Maven 编译器插件在 maven.test.skip 为真时重新编译测试
Maven compiler Plugin recompiling tests while having maven.test.skip to true
当更新 pom.xml
文件以使用较新的 maven-compiler-version
、3.6.0
并传递 -D=maven.test.skip=true
选项时,实际上并没有跳过测试编译。
基于以下示例 POM:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.sample</groupId>
<artifactId>sample-compiler</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
虽然将 maven-compiler-plugin
版本设置为以前的 3.5.1
会在调用时有效地跳过测试编译:
mvn clean test -Dmaven.test.skip=true
会产生:
[INFO] --- maven-compiler-plugin:3.5.1:testCompile (default-testCompile) @ sample-compiler ---
[INFO] Not compiling test sources
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ sample-compiler ---
[INFO] Tests are skipped.
然而,当将它升级到 3.6.0
并调用与上面相同的命令时,我们将有:
[INFO] --- maven-compiler-plugin:3.6.0:testCompile (default-testCompile) @ sample-compiler ---
[INFO] Not compiling test sources
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\data\eclipse-workspace\sample-compiler\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ sample-compiler ---
[INFO] Tests are skipped.
注意附加的 Changes detected - recompiling the module!
意味着 maven.test.skip
标志实际上被忽略了。
问题:这是回归还是上面的过程中缺少什么?
在尝试 post 将其作为错误报告时,我实际上发现它已经被报告过:
MCOMPILER-284
: maven.test.skip
不跳过测试编译
所以很可能是回归,有待Maven团队进一步确认。
重要提示:将 skip
测试传递给 testCompile
目标时会发生相同的行为(默认通过默认绑定执行),如以下(覆盖其默认 ID,default-testCompile
):
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<executions>
<execution>
<id>default-testCompile</id>
<configuration>
<skip>true</skip>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
解决方案:解决这个问题
- 恢复到以前的版本,
3.5.1
,或
- 升级到版本
3.6.1
,现在 available
当更新 pom.xml
文件以使用较新的 maven-compiler-version
、3.6.0
并传递 -D=maven.test.skip=true
选项时,实际上并没有跳过测试编译。
基于以下示例 POM:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.sample</groupId>
<artifactId>sample-compiler</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
虽然将 maven-compiler-plugin
版本设置为以前的 3.5.1
会在调用时有效地跳过测试编译:
mvn clean test -Dmaven.test.skip=true
会产生:
[INFO] --- maven-compiler-plugin:3.5.1:testCompile (default-testCompile) @ sample-compiler ---
[INFO] Not compiling test sources
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ sample-compiler ---
[INFO] Tests are skipped.
然而,当将它升级到 3.6.0
并调用与上面相同的命令时,我们将有:
[INFO] --- maven-compiler-plugin:3.6.0:testCompile (default-testCompile) @ sample-compiler ---
[INFO] Not compiling test sources
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\data\eclipse-workspace\sample-compiler\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ sample-compiler ---
[INFO] Tests are skipped.
注意附加的 Changes detected - recompiling the module!
意味着 maven.test.skip
标志实际上被忽略了。
问题:这是回归还是上面的过程中缺少什么?
在尝试 post 将其作为错误报告时,我实际上发现它已经被报告过:
MCOMPILER-284
:maven.test.skip
不跳过测试编译
所以很可能是回归,有待Maven团队进一步确认。
重要提示:将 skip
测试传递给 testCompile
目标时会发生相同的行为(默认通过默认绑定执行),如以下(覆盖其默认 ID,default-testCompile
):
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<executions>
<execution>
<id>default-testCompile</id>
<configuration>
<skip>true</skip>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
解决方案:解决这个问题
- 恢复到以前的版本,
3.5.1
,或 - 升级到版本
3.6.1
,现在 available