with pom plugin compiler compatible change maven java-7 java-6

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 su mvn (no-windows) / mvn.bat / mvn.cmd (windows) y configurar su versión de java explícitamente allí.