Java开发中避免不了遇到各种坑,希望其他童鞋不要不如后尘,不要在坑里打滚。
1、jra hell, 好多时候maven引入的包出问题(Class loading之类的问题)由于m2 本地夹包污染,删掉重来
2、Junit测试类必须命名成“Tests”的后缀,如果命名为.Net风格 的“Test”,对不起,你的测试Junit发现不了。
3、tomcat catalina 等配置,必须采用标准tomcat 发布规范来避免测试环境搭建和发布异常(参考:测试环境下单Tomcat运行多个站点 、如何在测试环境发布Java应用(java deployment相关))。
4、Java的resource包中的资源中的2进制文件会被maven修改,你必须显示声明禁止它去修改。
5、资源定位 properties读取
6、Java的sun base64 类库jenkins读取不了,maven不认识,你要用新的库或者你自己手写,否则jenkins不认识。
7 string() toString()//response.body().string() ,java官方包不一定好用,第三方包可能命名很不规范,使用请注意,第一参考对象是第三方包的官方文档,而不是你的(错误)经验。
8、mybatis坑:
- mapper xml中sql严格区分大小写;
- mabatis中要么注解注入要么xml配置注入,请不要混合使用。
- 注解注入的请严格建立包结构 :mybatis的xml文件(mapper文件)必须和Dao文件在同一个dao里面否则需要些配置中指出xml位置;
- mybatis的xml文件(mapper文件)必须和Dao文件命名的一模一样(在这上面浪费半个小时
)
9、参数配置中心应用名字、参数名等大小写敏感;
10、配置中心不能放在静态字段或者静态类、方法中
11、java测试总结:PowerMockito vs Mockito.when
spy()
//创建spy(真实对象),如果不创建的话,后面调用对象就都是Mock类,这里创建了spy后,只有设置了mock的方法才会调用mock行为 。结论:spy 部分mock方法
mock()
doNothing()
@RunWith(PowerMockRunner.class)
@PrepareForTest({PropertiesLoader.class})
只能作用于mock方法
12、Java单元测试可能导致的内存泄露,需要我们写测试的规避这一点:
http://stackoverflow.com/questions/20852013/java-lang-outofmemoryerror-permgen-with-jenkins-and-maven
13、Java天生为linux服务,windows系统区别文件大小写,而java不区分,为了一致性,请把包名命名成小写,同样url定义也是完全区分大小写,请在开发中注意这些和.Net不同点。
14、线上Babel发布的Java 项目挂载的nginx只能是80端口,按照应用名字区分,设计部署架构和以后上线发布的同学们需要注意这一点,考虑如何F5最终到你的应用的路由规则的配置。
15、 pom.xml中应用名 <artifactId>AAA</artifactId>,和applicationContext-framework.xml 中的应用名<cmbus:application application="BBB" 需要一致,如果分别设置成AAA和BBB,本地生成的配置参数缓存文件在不同的目录内,而且参数配置下载不下来,造成参数配置中心功能失效,需要统一设置为一样的。