2014-06-20 2 views
30

Chcę używać składni Java 8 w moich testach jednostkowych, ale mój "główny" kod musi być skompilowany dla Javy 7, ponieważ moje środowisko produkcyjne ma tylko zainstalowaną JDK 7.Jak skompilować i uruchomić moje testy jednostki Mave dla Java 8, podczas gdy mój kod skompilowany dla Javy 7

Czy można to zrobić za pomocą wtyczki maven-compiler? Serwer My Jenkins ma zainstalowaną Javę 8.

Zaakceptuję ryzyko, że mogę przypadkowo użyć specyficznej funkcji Java 8 w moim kodzie produkcyjnym.

+3

+1 Należy pamiętać, że jest to trochę ryzykowne, aby po prostu ustawić źródło wersja językowa. Możesz przypadkowo użyć Java 8 API, a kompilator nie będzie narzekał. Aby być bezpiecznym, musisz też skompilować biblioteki klas Java7 (co prawdopodobnie prowadzi do złożonych profili profili) ... – Thilo

Odpowiedz

36

W Maven cele kompilacji i testowania kompilacji są różne. A Maven ma nawet parametry dla testCompile: testTarget i testSource. Więc:

<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

To proste :) Dzięki – rjdkolb

+9

Jest ładny przykład, jak korzystać z tej metody i zachować kod bezpieczny (= przez pomyłkę używanie API Java 8) pod https://gist.github.com/aslakknutsen/9648594 – blalasaadri

+0

@blalasaadri tak, miłym dodatkiem. – mkrakhin

2

Nieco bardziej zwięzła wersja mkrakhin za odpowiedź Można ustawić source, target, testSource i 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>