Part 1:原因在于我们参数的差异:
情况1 :mvn clean install -Dmaven.test.skip=true
情况2:mvn clean install –Dmaven.test.skip.exec=true
由于以前大家都没写单元测试,所以没问题,现在有单元测试进来了,于是问题来了。
----分界线----
第一种情况下,(也就是出错的情况),我们maven3(基于JDK 1.6) 不编译这些,所以一直运行到build successful ,没问题。
然后。。(关键来了)执行sonar,因为我们Jenkins版本非常低,只能接受sonar2.0,而sonar 2.0(基于JDK 1.5)在执行生命周期时 maven-compiler-plugin:2.3.2:testCompile时候,他发现没有编译那些类,所以他用jdk 1.5编译测试类,而我们源代码是1.6的源码,他没能力编译这些,所以编译不通过。
第二种情况, 我们maven3(基于JDK 1.6) 编译这些类,所以在target目录下生成了 1.6版本的字节码,但是不运行他们。一切都很顺利,然后到了sonar了,同样会调用compiler-plugin:2.3.2:testCompile ,(关键来了),此时他比较一下时间戳,发现是已经有最新的字节码了(刚maven3 使用JDK 1.6来编译的),所以,他就跳过了testCompile阶段,所以没问题了。
Part 2:解决办法
一个办法就是把参数弄成Dmaven.test.skip.exec ,但这不是最好的方法
最好的方法是,让sonar的source version 和target version都设置为1.6,而不是默认的1.5
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。