2014-06-20 2 views
30

Voglio usare la sintassi Java 8 nei miei test di unità, ma il mio codice 'principale' deve essere compilato per Java 7 dal il mio ambiente di produzione ha solo JDK 7 installato.Come compilare ed eseguire i miei test di unità Maven per Java 8, pur avendo il mio codice compilato per Java 7

C'è un modo per farlo con il plugin maven-compilatore? Il mio server Jenkins ha installato Java 8.

Accetterò il rischio di poter utilizzare accidentalmente le funzionalità specifiche di Java 8 nel mio codice di produzione.

+3

+1 Si noti che è un po 'rischioso per solo impostare la sorgente versione della lingua. Potresti utilizzare accidentalmente l'API Java 8 e il compilatore non si lamenterà. Quindi, per essere sicuro, dovresti compilare anche con le librerie di classi Java7 (che probabilmente porta a complessi profili di esperti ...) – Thilo

risposta

36

In Maven compile e testCompile gli obiettivi sono diversi. E Maven ha anche parametri per testCompile: testTarget e testSource. Quindi:

<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

Che facile :) Grazie – rjdkolb

+9

C'è un bell'esempio di come usare questo metodo e mantenere il tuo codice sicuro (= non usando Java 8 API per errore) sotto https://gist.github.com/aslakknutsen/9648594 – blalasaadri

+0

@blalasaadri si, bella aggiunta. – mkrakhin

2

Una versione leggermente più concisa della risposta di mkrakhin È possibile impostare il source, target, testSource e 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>