Maven 参数(maven.test.skip 和 maven.test.skip.exec) 区别

 Part 1缘由在于咱们参数的差别:maven

 

状况1 mvn clean install -Dmaven.test.skip=trueide

这种状况,即不编译测试类文件,也不执行测试类文件单元测试

 

状况2mvn clean install –Dmaven.test.skip.exec=true测试

这种状况,编译测试类文件成字节码文件,可是不执行字节码文件ui

 

 

因为之前你们都没写单元测试,因此没问题,如今有单元测试进来了,因而问题来了。spa

 

 

----分界线----orm

 

第一种状况下,(也就是出错的状况),咱们maven3(基于JDK 1.6 不编译这些,因此一直运行到build successful ,没问题。blog

而后。。(关键来了)执行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阶段,因此没问题了。ip

 

 

 

 

Part 2:解决办法

 

一个办法就是把参数弄成Dmaven.test.skip.exec 但这不是最好的方法

最好的方法是,让sonarsource version target version设置为1.6,而不是默认的1.5