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


162

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 java, ¿cómo puedo configurar Maven para que use 1.7?


No puedo exportar JAVA_HOME con java 1.7 porque no puedo tocar la configuración de mi máquina, la versión predeterminada de Java debe ser 1.6.
y el

Maven usa JAVA_HOME, así que no pienses que lo que quieres hacer es posible sin cambiar el valor de JAVA_HOME.
Zyga

1
¿Estás usando un IDE o la línea de comando? ¿Estás en un * nix o windows?
xwoker

1
¿Esta respuesta cubre lo que quieres? stackoverflow.com/a/4724062/1570834
DB5

Sí es útil, pero no puedo hacer cambios en el proyecto, sin embargo, las cosas son las mismas y la respuesta es correcta
y el

Respuestas:


137

Maven usa el JAVA_HOMEparámetro 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 configurar el JAVA_HOMEparámetro justo antes de iniciar maven (y cambiarlo nuevamente si es necesario).
  • También puede ir a su mvn(no Windows) / mvn.bat/ mvn.cmd(Windows) y configurar su versión de Java explícitamente allí.

29
@andPat: ¿y? Puede configurar JAVA_HOMEsu shell local sin cambiar la configuración de su máquina (tan pronto como cierre ese shell, el cambio desaparecerá). Incluso puede cambiarlo por un solo comando:JAVA_HOME=/path/to/jdk17/ mvn build
Joachim Sauer

@JoachimSauer: Sí, pero también hice referencia a mvn.bat, que es específico de Windows.
DanielBarbarian

En Mac puedes crear un archivo .mavenrc con el JAVA_HOME dentro
Ronan Quillevere

Viejo, pero tirando mis 2 centavos. Estoy trabajando en un servicio Java 8 llamado por una aplicación Java 7. Para evitar tener que cambiar constantemente al construir, yo (en Windows) creé una variable de entorno MVN_JAVA_HOME, y luego reemplacé cada aparición de JAVA_HOME con MVN_JAVA_HOME dentro de mvn y mvn.cmd.
ryanlutgen

74

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>

9
A partir del compilador-plugin versión 3.7.0, los valores por defecto de origen y de destino si se deja sin especificar es de 1,5
Crowne

58

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_HOMEes estático, creé alias en mi .bashrcpara 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.


2
A menos que necesite maven 2 y 3 para varios proyectos, en cuyo caso ya tiene mvn2y mvn3definido y el nombre se vuelve un poco extraño cuando las versiones de Java también entran en juego ...: D
Tomislav Nakic-Alfirevic

3
Si está utilizando una Mac, su JDK viene con el comando java_home para que pueda evitar rutas de codificación, por ejemploalias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
ptkvsk

55
En (ubuntu + bash), debe omitir el &&anterior mvn. mvn no ve el valor de JAVA_HOME con &&.
Fabien

@Fabien es bueno saberlo; Uso ZSH y no sabía sobre las diferencias de Bash
Jonathan Landrum

47

En windows

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

Edite su mvn.batarchivo 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 lo @REM ==== START VALIDATION ====mencionado por @Jonathan

En Mac (¿y Linux?)

Si no desea cambiar su JAVA_HOMEvariable dentro de su ~/.bashrco~/.bash_profile

se puede crear un ~/.mavenrcarchivo y volver a definir su JAVA_HOMEuso de la herramienta de inicio_java

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

Prueba de cordura

Puede verificar que todo funcione bien ejecutando los siguientes comandos. La versión jdk debería ser diferente.

mvn -version

luego

java -version


Lo configuré para establecer JAVA_HOME = C: \ Archivos de programa \ Java \ jdk1.7.0_45 sublimada jre sublimada.
nanosoft

32

Agregar mis dos centavos y proporcionar explícitamente la solución.

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

Mi valor predeterminado (y configurado en la variable de entorno del sistema de Windows) JAVA_HOMEestá configurado 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 @DanielBarbarianconfigurarlo mvn.bat.

Para algunos que no están familiarizados con el archivo por lotes de Windows, básicamente agregué la set JAVA_HOME=<path_to_other_jdk>línea después @REM ==== START VALIDATION ====de 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

44
En maven 3.5, mvn.batse renombra a mvn.cmd.
CKM

30

Hace poco, después de siete largos años con Maven, aprendí sobre toolchains.xml. Maven lo tiene incluso documentado y lo admite desde 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é diferentes JDKs Maven puede usar para construir el proyecto, independientemente de con qué JDK Maven se ejecute. Algo así como cuando define JDK a nivel de proyecto en IDE.


2
La mejor respuesta! Gracias. Esto explica una situación clara en la que queremos ejecutar Maven y el proyecto en compilación con dos java runtimes / framework diferentes.
Soundararajan

5

Una solución simple al problema:

JAVA_HOME = / usr / lib / jvm / java-6-sun / mvn instalación limpia

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 dado anteriormente no funciona en el shell 'fish'. También tenía bash shell disponible y funcionó bien allí. solo use el comando 'bash' para cambiar a bash shell.


5

Puede configurar fuentes de compilación utilizando diferentes JDK con maven-compiler-plugin.

Simplemente especifique la ruta a javacen la <executable>etiqueta. Por ejemplo, para java11 se ve así:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <source>11</source>
        <target>11</target>
        <fork>true</fork>
        <executable>C:\Program Files\Java\jdk-11.0.1\bin\javac</executable> <!--PATH TO JAVAC -->
    </configuration>
</plugin>

4

Para evitar cualquier impacto en su proyecto y en sus Variables de entorno, puede configurar el complemento del compilador Maven solo para el POM del proyecto, especificando la versión Java de origen y 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>

4

Puede configurar Maven para usar cualquier versión de Java siguiendo las instrucciones a continuación.

Instale jenv en el enlace de su máquina

Verifique las versiones disponibles de Java instaladas en su máquina emitiendo el siguiente comando en la línea de comandos.

versiones de jenv

Puede especificar la versión global de Java con el siguiente comando.

jenv global oracle64-1.6.0.39

Puede especificar la versión local de Java para cualquier directorio (Proyecto) utilizando el siguiente comando en el directorio en la línea de comandos.

jenv local oracle64-1.7.0.11

agregue la versión correcta de Java en su pom.xml

si está ejecutando maven en la línea de comandos, instale el complemento jenv maven utilizando el siguiente comando

jenv enable-plugin maven

Ahora puede configurar cualquier versión de Java en su máquina para cualquier proyecto sin ningún problema.


1
como esta opción jenv es como virtualenv para python
Jesse Zhuang

4

En Mac, (suponiendo que tenga instalada la versión correcta)

JAVA_HOME=`/usr/libexec/java_home -v 1.8` mvn clean install -DskipTests


4

Sin cambiar las Variables de entorno, puede administrar la versión de Java en función del nivel del proyecto utilizando el Complemento del compilador de Maven.

Método 1

<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Método 2

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>

2

En Windows, solo agrego varios archivos por lotes para diferentes versiones de JDK a la carpeta bin de Maven de esta manera:

mvn11.cmd

@echo off
setlocal
set "JAVA_HOME=path\to\jdk11"
set "path=%JAVA_HOME%;%path%"
mvn %*

entonces puede usar mvn11para ejecutar Maven en el JDK especificado.



1

No tuve éxito en mac con solo configurar JAVA_HOMEen la consola, pero tuve éxito con este enfoque

  • Cree el archivo .mavenrc en su directorio de inicio (para que la ruta del archivo sea ~/.mavenrc
  • En ese archivo pegue export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

0

También puede tener instaladas dos versiones de maven y editar una de ellas, editando aquí:

mvn (no windows) /mvn.bat/mvn.cmd (windows)

reemplazando sus% java_home% apariencias a su ruta deseada de java. Luego solo ejecuta maven desde esa ruta modificada

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.