2014-06-20 142 views
30

我想在我的单元测试中使用Java 8语法,但是我的'主'代码需要编译Java 7以来我的生产环境只安装了JDK 7。如何编译和运行我的Maven单元测试Java 8,同时让我的代码编译为Java 7

有没有办法用maven-compiler-plugin来做到这一点? 我的Jenkins服务器安装了Java 8。

我会接受我在生产代码中意外使用Java 8特定功能的风险。

+3

+1请注意,这是一个有点冒险,只是设置源语言版本。您可能会意外地使用Java 8 API,编译器不会投诉。所以为了安全起见,你也需要使用Java7类库进行编译(这可能会导致复杂的Maven配置文件......) – Thilo

回答

36

在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> 
+0

这很容易:)感谢 – rjdkolb

+9

有一个很好的例子,说明如何使用这种方法并保持你的代码安全(=没有错误地使用Java 8 API)https://gist.github.com/aslakknutsen/9648594 – blalasaadri

+0

@blalasaadri是的,很好的补充。 – mkrakhin

2

一个mkrakhin的回答 略有更简洁的版本,您可以设置sourcetargettestSourcetestTarget

<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>