用于test和main的不同maven编译器版本

如何配置maven编译器使用java 5作为我的测试代码,java 1.4作为我的主代码?

如果要设置与相关Java版本的兼容性,可以为每次执行配置编译器插件。 假设Maven使用的JDK至少与您指定的最高版本一样。 通过使用属性,您可以在命令行或子项中覆盖该配置(如果需要):

 org.apache.maven.plugins maven-compiler-plugin  ${compileSource} ${compileSource}    test-compile process-test-sources  testCompile   ${testCompileSource} ${testCompileSource}     ...  1.4 1.5  

如果你的意思是使用不同的编译器 ,那就更复杂了。 因为您需要指定JDK的路径以及您正在使用的编译器版本。 这些可以在属性中定义。 虽然您可能希望在settings.xml中定义它们

  org.apache.maven.plugins maven-compiler-plugin  ${compileSource} ${compileSource} ${compileJdkPath}/bin/javac ${compileSource}    test-compile process-test-sources  testCompile   ${testCompileSource} ${testCompileSource} ${testCompileJdkPath}/bin/javac ${testCompileSource}     ...  1.4 1.5 path/to/jdk path/to/test/jdk  

请注意,在配置文件中定义编译器配置可能是有意义的,每个JDK支持一个,这样您的正常构建就不依赖于设置的属性。

此外, 在Maven 3.x中,您需要在指定可执行文件时包含fork参数,例如:

   maven-compiler-plugin 3.1   default-testCompile test-compile  testCompile   true ${testCompileJdkPath}/bin/javac 1.8 1.8     

我对使用maven-compiler-plugin版本3.5.1编译java 7源代码和java 8测试源的已接受答案没有运气。 因为compile插件使用了源,主要和测试源的源/目标参数。

但我发现,测试源和目标有单独的配置参数。

对我来说,有效的解决方案是

     org.apache.maven.plugins maven-compiler-plugin 3.5.1  1.7 1.7 1.8 1.8