如何为Java11编译和运行Maven单元测试,同时让代码为旧版本的Java8编译

如何为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

我想在单元测试中使用Java11语法,但我的“main”代码需要为Java8编译,因为我的生产环境只安装了JDK8

maven编译器插件有没有办法做到这一点? 我的Jenkins服务器安装了Java11


我将承担在我的生产代码中意外使用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>