我想在我的单元测试中使用Java 8语法,但是我的'主'代码需要编译Java 7以来我的生产环境只安装了JDK 7。如何编译和运行我的Maven单元测试Java 8,同时让我的代码编译为Java 7
有没有办法用maven-compiler-plugin来做到这一点? 我的Jenkins服务器安装了Java 8。
我会接受我在生产代码中意外使用Java 8特定功能的风险。
我想在我的单元测试中使用Java 8语法,但是我的'主'代码需要编译Java 7以来我的生产环境只安装了JDK 7。如何编译和运行我的Maven单元测试Java 8,同时让我的代码编译为Java 7
有没有办法用maven-compiler-plugin来做到这一点? 我的Jenkins服务器安装了Java 8。
我会接受我在生产代码中意外使用Java 8特定功能的风险。
在Maven编译和测试编译目标是不同的。而且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>
这很容易:)感谢 – rjdkolb
有一个很好的例子,说明如何使用这种方法并保持你的代码安全(=没有错误地使用Java 8 API)https://gist.github.com/aslakknutsen/9648594 – blalasaadri
@blalasaadri是的,很好的补充。 – mkrakhin
一个mkrakhin的回答 略有更简洁的版本,您可以设置source,target,testSource和testTarget:
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.testSource>1.8</maven.compiler.testSource>
<maven.compiler.testTarget>1.8</maven.compiler.testTarget>
</properties>
</project>
+1请注意,这是一个有点冒险,只是设置源语言版本。您可能会意外地使用Java 8 API,编译器不会投诉。所以为了安全起见,你也需要使用Java7类库进行编译(这可能会导致复杂的Maven配置文件......) – Thilo