pom - Cómo establecer una versión específica de Java para Maven
set java 1.8 maven (8)
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?
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.
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=<path_to_other_jdk>
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 el POM, puede establecer las propiedades del compilador, por ejemplo, para 1.8:
<project>
...
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
...
</project>
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.
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
...
</plugins>
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:
<toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd">
<!-- JDK toolchains -->
<toolchain>
<type>jdk</type>
<provides>
<version>1.8</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>/opt/java8</jdkHome>
</configuration>
</toolchain>
<toolchain>
<type>jdk</type>
<provides>
<version>1.7</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>/opt/java7</jdkHome>
</configuration>
</toolchain>
</toolchains>
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.
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.
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
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
sumvn
(no-windows) /mvn.bat
/mvn.cmd
(windows) y configurar su versión de java explícitamente allí.