用于测试和主编译器的不同 maven 版本
2022-09-01 12:59:04
如何将 maven 编译器配置为对测试代码使用 java 5,对主代码使用 java 1.4?
如何将 maven 编译器配置为对测试代码使用 java 5,对主代码使用 java 1.4?
如果要将合规性设置为相关的 Java 版本,则可以为每次执行配置编译器插件。假设 Maven 使用的 JDK 至少与您指定的最高版本一样最新。通过使用属性,您可以根据需要在命令行或子级中覆盖该配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${compileSource}</source>
<target>${compileSource}</target>
</configuration>
<executions>
<execution>
<id>test-compile</id>
<phase>process-test-sources</phase>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<source>${testCompileSource}</source>
<target>${testCompileSource}</target>
</configuration>
</execution>
</executions>
</plugin>
...
<properties>
<compileSource>1.4</compileSource>
<testCompileSource>1.5</testCompileSource>
</properties>
如果你的意思是使用不同的编译器,那就更复杂了。因为您需要指定JDK的路径以及您正在使用的编译器版本。同样,这些可以在属性中定义。尽管您可能希望在设置中定义它们.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${compileSource}</source>
<target>${compileSource}</target>
<executable>${compileJdkPath}/bin/javac</executable>
<compilerVersion>${compileSource}</compilerVersion>
</configuration>
<executions>
<execution>
<id>test-compile</id>
<phase>process-test-sources</phase>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<source>${testCompileSource}</source>
<target>${testCompileSource}</target>
<executable>${testCompileJdkPath}/bin/javac</executable>
<compilerVersion>${testCompileSource}</compilerVersion>
</configuration>
</execution>
</executions>
</plugin>
...
<properties>
<compileSource>1.4</compileSource>
<testCompileSource>1.5</testCompileSource>
<compileJdkPath>path/to/jdk</compileJdkPath>
<testCompileJdkPath>path/to/test/jdk<testCompileJdkPath>
</properties>
请注意,在配置文件中定义编译器配置可能是有意义的,配置文件对应于您支持的每个 JDK,以便您的正常构建不依赖于正在设置的属性。
此外,在 Maven 3.x 中,在指定可执行文件时,您需要包含 fork
参数,例如:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<executions>
<execution>
<id>default-testCompile</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<fork>true</fork>
<executable>${testCompileJdkPath}/bin/javac</executable>
<source>1.8</source>
<target>1.8</target>
</configuration>
</execution>
</executions>
</plugin>
我没有运气接受的答案编译java 7源代码和java 8测试源代码,使用,版本3.5.1。因为编译插件对主源和测试源都使用了源/目标参数。maven-compiler-plugin
但是我发现,测试源和目标有单独的配置参数。
所以对我来说,有效的解决方案是
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<testSource>1.8</testSource>
<testTarget>1.8</testTarget>
</configuration>
</plugin>
</plugins>
</build>