2011-01-18 20 views
34

Desidero configurare Maven2 per utilizzare sun-java6-jdk per costruire moduli Java SE 1.6 e utilizzare openjdk-7 per creare moduli Java SE 1.7. È possibile?Configura Maven per utilizzare JDK diversi per le diverse versioni di J2SE?

Maven2 dovrebbe quindi selezionare automaticamente il JDK corretto per creare moduli diversi in un unico comando.

Ad esempio, dovrebbe essere

$ mvn package 

anziché

$ cd module1 
$ update-alternatives ... jdk6 ... 
$ mvn package 
... 
$ cd module2 
$ update-alternatives ... jdk7 ... 
$ mvn package 

P.S. Non si tratta di file pom.xml, che sono già stati impostati maven-compiler-plugin con diversi valori <source>, <target> per diversi moduli. Se scelgo di usare openjdk-7, Maven2 genererà i file di classe della versione 1.6, ma usando openjdk-7 piuttosto che sun-java6-jdk. La domanda è su come configurare i profili di Java SE.

+6

FYI: non esiste una cosa come J2SE 1.6. A partire da 1.6, si chiama Java SE (Proprio come J2EE è ora Java EE). [Riferimento] (http://weblogs.java.net/blog/kgh/archive/2005/06/goodbye_j2se_he_1.html) –

risposta

83

abbiamo risolto questo problema esplicitamente sepecify il javac in configurazione di plug compilazione (con JAVA_HOME_6 e JAVA_HOME_7 definito come variabili di ambiente):

e per Java 6 Modulo

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
     <showDeprecation>true</showDeprecation> 
     <showWarnings>true</showWarnings> 
     <executable>${env.JAVA_HOME_6}/bin/javac</executable> 
     <fork>true</fork> 
    </configuration> 
</plugin> 

e per il modulo Java 7

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <source>1.7</source> 
     <target>1.7</target> 
     <showDeprecation>true</showDeprecation> 
     <showWarnings>true</showWarnings> 
     <executable>${env.JAVA_HOME_7}/bin/javac</executable> 
     <fork>true</fork> 
    </configuration> 
</plugin> 
+0

Grazie, hai risposto incredibilmente veloce, voglio solo chiarire la mia domanda ancora un passo, ma tu ho già dato la risposta :) –

+0

@ 谢 继 雷 'Lenik bene allora un upvote sarebbe forse appropriato –

+1

Nota: Per me sembra che se JAVA_HOME è impostato, lo usa indipendentemente da cosa e la sezione non si applica. Ho dovuto rimuoverlo e in realtà utilizzare JAVA_HOME_6 e JAVA_HOME_7 per farlo funzionare –

5

Si può dire al Maven-compiler-plugin per Compile Sources Using A Different JDK

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
    <executable><!-- path-to-javac --></executable> 
    </configuration> 
</plugin> 
1

Dalle numerose upvotes sulla risposta di @ lweller Credo che sia strano, ma con 1.7 come source e target Maven ancora provato a compilare utilizzando Java 1.5. Piuttosto solo con 7 ... Come così:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <source>7</source> <!-- see here, says only 7, not 1.7 --> 
     <target>7</target> <!-- here as well --> 
     <showDeprecation>true</showDeprecation> 
     <showWarnings>true</showWarnings> 
     <executable>${env.JAVA_HOME_7}/bin/javac</executable> 
     <fork>true</fork> 
    </configuration> 
</plugin> 

Maven-compiler-plugin versione 2.5.1.

+2

7 è un sinonimo per 1.7. Dai un'occhiata a https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html per i parametri '-source' e' -target' – freedev

Problemi correlati