Maven 编译器插件在 maven.test.skip 为真时重新编译测试

Maven compiler Plugin recompiling tests while having maven.test.skip to true

当更新 pom.xml 文件以使用较新的 maven-compiler-version3.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 将其作为错误报告时,我实际上发现它已经被报告过:

所以很可能是回归,有待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