2010-04-02 15 views
7

Tengo proyectos que deben compilarse con una versión específica del JDK.Dependencia del proyecto Maven contra JDK versión

El problema no está en los parámetros de origen y destino, sino en los contenedores del tiempo de ejecución utilizados durante la compilación. En algunos casos obtengo un error de compilación si trato de compilar con el JDK incorrecto, pero a veces la compilación es exitosa y obtengo errores de tiempo de ejecución cuando uso los jars.

Por ejemplo, en eclipse tengo la capacidad de establecer el entorno de ejecución para el proyecto en el archivo .classpath.

¿Hay alguna manera de manejar tal situación en maven?

Lo que me gustaría tener es la capacidad de manejar la dependencia de JRE como otras dependencias del proyecto en el archivo POM.

ACTUALIZACIÓN:

La solución aceptada era la mejor opción cuando hice esta pregunta, así que no voy a cambiarlo. Mientras tanto, se ha introducido una nueva solución a este tipo de problemas: Maven Toolchain. Siga el enlace para más detalles.

Respuesta

2

he encontrado este artículo:

http://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html

<project> 
    [...] 
    <build> 
    [...] 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.1</version> 
     <configuration> 
      <verbose>true</verbose> 
      <fork>true</fork> 
      <executable>${JAVA_1_4_HOME}/bin/javac</executable> 
      <compilerVersion>1.3</compilerVersion> 
     </configuration> 
     </plugin> 
    </plugins> 
    [...] 
    </build> 
    [...] 
</project> 
+0

Gracias, esto resuelve mi problema –

1

creo que esto puede ser resuelto con los siguientes plug-in en su pom:

<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.1</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 

Aquí se dirigen a la versión 1.6, o escriba su propia versión

+1

No, como ya he dicho que no es una cuestión de parámetro de origen y de destino, porque esta influencia única forma en que el compilador de leer el lenguaje (fuente) y generar el bytecode (destino) pero no las bibliotecas utilizadas en la compilación. Si compila utilizando un proyecto de 1.6 jdk con 1.5 como parámetro de origen/destino, puede obtener un jar que no es válido para la ejecución con un jre de 1.5 (por ejemplo, puede haber problemas con métodos sobrecargados en clases de biblioteca). –

+0

@Andrea luego la solución Pascal es la respuesta – ant

+0

sí, creo que los perfiles son lo que necesita. –

2

tengo proyectos que deben construir con una versión específica del JDK.

Puede utilizar el Maven Enforcer plugin para hacer cumplir el uso de una versión particular del JDK:

<project> 
    [...] 
    <build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-enforcer-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>enforce-versions</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
      <configuration> 
       <rules> 
       <requireJavaVersion> 
        <version>1.5</version> 
       </requireJavaVersion> 
       </rules> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

Pero no estoy seguro de que realmente entendía la pregunta. Si esto no es lo que desea, tal vez podría declarar sus dependencias específicas de JDK en los perfiles y usar un activador de activación basado en la versión de JDK. Por ejemplo:

<profiles> 
    <profile> 
    <activation> 
     <jdk>1.5</jdk> 
    </activation> 
    ... 
    </profile> 
</profiles> 

Esta configuración se disparará el perfil cuando la versión del JDK comienza con "1,5".

+0

Gracias, el complemento de enforcer es realmente útil para mí, incluso si no resuelve completamente mi problema. –

Cuestiones relacionadas