2014-06-20 107 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>