Cómo establecer una versión específica de Java para Maven

En mi máquina tengo instaladas dos versiones de Java: (1.6 y 1.7 instaladas manualmente por mí). Los necesito a ambos para diferentes proyectos. Pero para Maven necesito 1.7, ahora mi Maven usa la versión 1.6 de java, ¿cómo puedo configurar Maven para usar 1.7?

Maven usa el parámetro JAVA_HOME para encontrar qué versión de Java se supone que debe ejecutar. Veo por su comentario que no puede cambiar eso en la configuración.

  • Puede establecer el parámetro JAVA_HOME justo antes de iniciar maven (y luego volver a cambiarlo si es necesario).
  • También puede mvn su mvn (no-windows) / mvn.bat / mvn.cmd (windows) y configurar su versión de java explícitamente allí.

En el POM, puede establecer las propiedades del comstackdor, por ejemplo, para 1.8:

  ...  1.8 1.8  ...  

Agregando mis dos centavos y proporcionando explícitamente la solución.

Tengo dos JDK instalados en mi máquina con Windows: JDK 1.5 y JDK 1.6 .

Mi valor predeterminado (y configurado en la variable de entorno del sistema de Windows) JAVA_HOME está establecido en JDK 1.5 .

Sin embargo, tengo un proyecto maven que necesito construir (es decir, Etsy.com de JBehave Tutorial ) usando JDK 1.6 .

Mi solución en este escenario (¡que funcionó!) Es la sugerida por @DanielBarbarian para establecerlo en mvn.bat .

Para algunos que no están familiarizados con el archivo de proceso por lotes de window, básicamente agregué el set JAVA_HOME= line after @REM ==== START VALIDATION ==== mvn.bat en mvn.bat (es decir, %MAVEN_HOME%\bin\mvn.bat )

 @REM ==== START VALIDATION ==== set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45\jre if not "%JAVA_HOME%" == "" goto OkJHome 

En ventanas

Si no desea cambiar su variable JAVA_HOME dentro de las variables del sistema.

Edite su archivo mvn.bat y agregue una línea como esta

 set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45\jre 

Esto se puede hacer después de @REM ==== START VALIDATION ==== como lo mencionó @Jonathan

En Mac (y Linux?)

Si no desea cambiar su variable JAVA_HOME dentro de su ~/.bashrc o ~/.bash_profile

puede crear un archivo ~/.mavenrc y redefinir su JAVA_HOME usando la herramienta java_home

 export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_45` 

Prueba de cordura

Puede verificar que todo funciona correctamente ejecutando los siguientes comandos. La versión jdk debe ser diferente.

mvn -version

entonces

java -version

Recientemente, después de siete largos años con Maven, aprendí sobre toolchains.xml. Maven incluso lo ha documentado y lo soporta desde la versión 2.0.9 – documentación de toolchains

Así que agregué un archivo toolchain.xml a mi carpeta ~ / .m2 / con el siguiente contenido:

    jdk  1.8 sun   /opt/java8    jdk  1.7 sun   /opt/java7    

Le permite definir qué JDKs diferentes Maven puede usar para construir el proyecto independientemente del JDK con el que Maven se ejecute. Más o menos como cuando defines JDK en el nivel de proyecto en IDE.

Agregar una solución para personas con múltiples versiones de Java instaladas

Tenemos una gran base de código, la mayoría de los cuales está en Java. La mayoría de lo que trabajo está escrito en Java 1.7 o 1.8. Como JAVA_HOME es estático, creé alias en mi .bashrc para ejecutar Maven con diferentes valores:

 alias mvn5="JAVA_HOME=/usr/local/java5 && mvn" alias mvn6="JAVA_HOME=/usr/local/java6 && mvn" alias mvn7="JAVA_HOME=/usr/local/java7 && mvn" alias mvn8="JAVA_HOME=/usr/local/java8 && mvn" 

Esto me permite ejecutar Maven desde la línea de comandos en mi máquina de desarrollo, independientemente de la versión JDK utilizada en el proyecto.

Para evitar cualquier impacto en su proyecto y en sus variables de entorno, puede configurar el complemento Maven Compiler solo para el POM del proyecto, especificando la versión Java de origen y de destino.

    maven-compiler-plugin 3.5.1  1.7 1.7   ...  

Una solución simple al problema –

JAVA_HOME = / usr / lib / jvm / java-6-sun / mvn clean install

En Mac, se vería algo así como …

JAVA_HOME = / Library / Java / JavaVirtualMachines / jdk1.7.0_21.jdk / Contents / Home / mvn clean install

PD: Un caso especial que encontré es que el comando anterior no funciona en el shell ‘fish’. También tuve bash shell disponible y funcionó bien allí. solo usa el comando ‘bash’ para cambiar a bash shell.