我想在我的單元測試中使用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