如何为Java11编译和运行Maven单元测试,同时让代码为旧版本的Java8编译
我想在单元测试中使用Java11语法,但我的“main”代码需要为Java8编译,因为我的生产环境只安装了JDK8 maven编译器插件有没有办法做到这一点? 我的Jenkins服务器安装了Java11如何为Java11编译和运行Maven单元测试,同时让代码为旧版本的Java8编译,java,unit-testing,maven,junit,jenkins,Java,Unit Testing,Maven,Junit,Jenkins,我想在单元测试中使用Java11语法,但我的“main”代码需要为Java8编译,因为我的生产环境只安装了JDK8 maven编译器插件有没有办法做到这一点? 我的Jenkins服务器安装了Java11 我将承担在我的生产代码中意外使用Java 11特定功能的风险。在Maven compile和testCompile中,目标是不同的。Maven甚至还有testCompile的参数:testTarget和testSource。因此: <plugin> <groupId&g
我将承担在我的生产代码中意外使用Java 11特定功能的风险。在Maven compile和testCompile中,目标是不同的。Maven甚至还有testCompile的参数:testTarget和testSource。因此:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<testSource>1.8</testSource>
<testTarget>1.8</testTarget>
</configuration>
</plugin>
org.apache.maven.plugins
maven编译器插件
3
1.7
1.7
1.8
1.8
mkrakhin回答的更简洁版本
您可以设置,以及:
1.8
1.8
11
11
+1请注意,只设置源语言版本有点冒险。您可能会意外地使用Java8API,编译器不会抱怨。为了安全起见,您还需要使用Java7类库进行编译(这可能会导致复杂的maven配置文件…)在@blalasaadri下有一个很好的示例,说明如何使用此方法并保持代码安全(=不误用Java8 API)@blalasaadri是的,添加得很好。@blalasaadri,我也喜欢您的答案
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.testSource>11</maven.compiler.testSource>
<maven.compiler.testTarget>11</maven.compiler.testTarget>
</properties>
</project>