2011-01-18 16 views
34

Quiero configurar Maven2 para que use sun-java6-jdk para compilar módulos Java SE 1.6, y use openjdk-7 para compilar módulos Java SE 1.7. ¿Es posible?¿Configura Maven para usar diferentes JDK para diferentes versiones de J2SE?

Maven2 debería entonces elegir automáticamente el JDK correcto para construir diferentes módulos en un comando.

Por ejemplo, debe ser

$ mvn package 

en lugar de

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

P.S. No se trata de archivos pom.xml, que ya se han configurado maven-compiler-plugin con diferentes valores <source>, <target> para diferentes módulos. Si elijo usar openjdk-7, Maven2 generará archivos de clase de la versión 1.6, pero usando openjdk-7 en lugar de sun-java6-jdk. La pregunta es sobre cómo configurar perfiles de Java SE.

+6

FYI: no existe tal cosa como J2SE 1.6. A partir de 1.6, se llama Java SE (J2EE es ahora Java EE). [Referencia] (http://weblogs.java.net/blog/kgh/archive/2005/06/goodbye_j2se_he_1.html) –

Respuesta

83

hemos resuelto este problema mediante explícitamente sepecify la javac en config de plug-in de compilación (con JAVA_HOME_6 y JAVA_HOME_7 definido como variables de entorno):

y para Java 6 módulo

<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> 

y para Java módulo 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

Gracias, respondiste increíblemente rápido, voy a aclarar mi pregunta un paso más, pero tú ya he dado la respuesta. :) –

+0

@ 谢 继 Len 'Lenik, entonces quizás sea apropiado un voto positivo –

+1

Nota: Para mí, parece que si JAVA_HOME está configurado, lo usa sin importar qué y la sección no se aplica. Tuve que eliminarlo y realmente usar JAVA_HOME_6 y JAVA_HOME_7 para que funcione –

5

Se puede decir que el experto compilador-plugin para 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

De las numerosas upvotes sobre la respuesta de @ lweller supongo que es extraño, pero con 1.7 como source y target experto todavía trató de compilar usando java 1.5. En lugar únicamente con 7 ... Al igual que:

<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> 

experto compilador-plugin versión 2.5.1.

+2

7 es un sinónimo de 1.7. Eche un vistazo a https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html para los parámetros '-source' y' -target' – freedev

Cuestiones relacionadas