¿Por qué Maven usa JDK 1.6 pero mi versión de Java es 1.7?

159

Soy nuevo en Maven, y también en MacOS.

He configurado maven en mi terminal, y cuando obtengo la configuración de la versión (usando mvn -v) parece que usa JDK 1.6, mientras que tengo JDK 1.7 instalado. ¿Hay algo mal?

Los comandos que ingreso son estos:

blues:helloworld Ninja$ java -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b06)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)`
blues:helloworld Ninja$ mvn -v
Apache Maven 3.1.0 (893ca28a1da9d5f51ac03827af98bb730128f9f2; 2013-06-28 10:15:32+0800)
Maven home: /usr/local/Cellar/maven/3.1.0/libexec
Java version: 1.6.0_51, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: zh_CN, platform encoding: EUC_CN
OS name: "mac os x", version: "10.8.4", arch: "x86_64", family: "mac"
Ninja
fuente
2
¿Puedes publicar tus variables PATH y JAVA_HOME?
Jeanne Boyarsky
@JeanneBoyarsky blues: helloworld Ninja $ echo $ JAVA_HOME blues: helloworld Ninja $ echo $ PATH / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / local / git / bin
Ninja
@JeanneBoyarsky, ¿es esto lo que quiere, señor?
Ninja
3
Soy mujer (así que referirse a mí como "señor" es incorrecto) y sí. Intenta configurar tu JAVA_HOME. Su problema parece similar a este problema: stackoverflow.com/questions/13752519/…
Jeanne Boyarsky
2
@JeanneBoyarsky Perdona mi rudeza. La url que diste es el problema que encuentro. Muchas gracias ~
Ninja

Respuestas:

227

agregue lo siguiente a su ~/.mavenrc:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/{jdk-version}/Contents/Home

Segunda solución

echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile

Gaurav Vaish
fuente
sí, su respuesta es correcta. Se requiere JAVAHOME. Edito el perfil / etc / en su lugar
Ninja
8
Bueno, agregar a ~ / .mavenrc asegura que otras aplicaciones no se vean afectadas. Solo mvn recoge esta versión de JDK. :)
Gaurav Vaish
43
export JAVA_HOME = $ (/ usr / libexec / java_home -v 1.7)
jla
1
La solución .mavenrc funcionó perfectamente para mí. También me di cuenta de que solo tenía JDK 1.8 instalado y no JRE 1.8. Gracias Gaurav!
timothyclifford
2
Si está utilizando jenv en una Mac, puede ser: export JAVA_HOME="$HOME/.jenv/versions/`jenv version-name`"para ~/.mavenrcarchivo.
Eddy
46

Meterse en

/System/Library/Frameworks/JavaVM.framework/Versions

y actualice el CurrentJDKenlace simbólico para señalar

/Library/Java/JavaVirtualMachines/YOUR_JDK_VERSION/Contents/

P.ej

cd /System/Library/Frameworks/JavaVM.framework/Versions
sudo rm CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/ CurrentJDK

Ahora funcionará de inmediato.

Oskar
fuente
1
El truco del enlace simbólico CurrentJDK ya no parece funcionar con Maven 3.3.1, pero modificar ~ / .mavenrc sí.
Stefan L
41

También puedes hacer,

<properties>
      ...  

      <!-- maven-compiler-plugin , aka JAVA Compiler 1.7 -->
      <maven.compiler.target>1.7</maven.compiler.target>
      <maven.compiler.source>1.7</maven.compiler.source>

      ...  
</properties>
DEREK LEE
fuente
55
Eso no funciona si Maven se está ejecutando con Java 6. Simplemente se bloquea con[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project {projectname}: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
Gavin S. Yancey
27

También puede decirle explícitamente a Maven para qué versión de Java compilar. Puedes intentar agregar el maven-compiler-plugina tu pom.

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

Si importó un proyecto maven a un IDE, entonces probablemente haya una configuración maven en su IDE para el compilador predeterminado que está utilizando su corredor maven.

redFIVE
fuente
o gracias. Pero no he empezado. Simplemente 'mvn -v' ... la razón es que no asigno JAVA_HOME
Ninja
Tenga en cuenta que solo afecta a su código que se compila. Me encontré con este problema y vine aquí porque una biblioteca externa que estaba usando fue compilada para Java 7 y Maven estaba tratando de ejecutarla con Java 6
Eso no funciona si Maven se está ejecutando con Java 6. Simplemente se bloquea con[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project {projectname}: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
Gavin S. Yancey
Esto funcionará en caso de que la configuración de Maven en su IDE para el compilador predeterminado sea inferior a 1.7, pero el jdk instalado es superior a 1.7
John Doe
9

Me ayudó. Solo agrégalo a tu pom.xml.

De forma predeterminada, el complemento del compilador maven usa Java 1.5 o 1.6, debe redefinirlo en su pom.xml.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>
Sergey Luchko
fuente
4

Para usuarios de Eclipse. Si tiene una Configuración de ejecución que limpia el paquete, por ejemplo.

En el panel Ejecutar configuración hay una pestaña JRE donde puede especificar en qué tiempo de ejecución debe ejecutarse. Tenga en cuenta que esta configuración anula lo que esté en pom.xml.

Yonatan Abrego
fuente
2

Por favor verifique la compatibilidad. Luché con mvn 3.2.1y jdk 1.6.0_37por muchas horas. Todas las variables se establecieron pero no funcionaban. Finalmente he actualizado jdk to 1.8.0_60y mvn 3.3.3y que trabajaba. Variables de entorno de la siguiente manera:

JAVA_HOME=C:\ProgramFiles\Java\jdk1.8.0_60 
MVN_HOME=C:\ProgramFiles\apache-maven\apache-maven-3.3.3 
M2=%MVN_HOME%\bin extend system level Path- ;%M2%;%JAVA_HOME%\bin;
Vikas Singh
fuente
1

La solución de @MasterGaurav funciona perfectamente,

Normalmente pongo el interruptor de Java en una función zsh:

alias java_ls='/usr/libexec/java_home -V 2>&1 | grep -E "\d.\d.\d[,_]" | cut -d , -f 1 | colrm 1 4 | grep -v Home'

function java_use() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    echo export "JAVA_HOME=$(/usr/libexec/java_home -v $1)" > ~/.mavenrc
    export PATH=$JAVA_HOME/bin:$PATH
    java -version
}

Luego puede ejecutar java_lsdos y obtener todos los jvm disponibles en su máquina, ejecutar java_use 1.7para usar la versión 1.7 para Java y Maven.

Wei Qiu
fuente