Después de instalar Java JDK 7 para Mac OS X, la versión mvn todavía muestra la versión 1.6.0_31 de Java

117

Oracle lanzó Java JDK 7 el 26 de abril para Mac OS X. Seguí las instrucciones de instalación y cuando hago java -version en una ventana de terminal obtengo:

java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)

Sin embargo, cuando lo hago mvn -versionen la ventana de la terminal, obtengo:

Apache Maven 3.0.2 (r1056850; 2011-01-08 18:58:10-0600)
Java version: 1.6.0_31, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "mac os x", version: "10.7.3", arch: "x86_64", family: "mac"

¿Cómo puedo hacer que Maven use Java JDK 1.7.0_04?

Gracias por la ayuda.

Bruce Phillips
fuente

Respuestas:

126

Finalmente encontré la respuesta aquí:

http://www.adam-bien.com/roller/abien/entry/java_se_development_kit_7

En su JAVA_HOME=$(/usr/libexec/java_home)lugar, debería usarlo en una Mac y luego configurar el jdk actual a través de "Java Preferences.app".

Establecer JAVA_HOME en ~ / .profile

Bruce Phillips
fuente
4
Recientemente instalé Java 6 y no puedo ubicar JavaPreferences.app bcz mac ahora no proporciona soporte para Java. Puede decirme ahora cómo puedo configurar mi jvm sin usar JavaPreferences.
amod
2
Puede aceptar su propia respuesta. Eso nos mostrará al resto de nosotros que esto resolvió este problema. Y tendrás 10 ponts más :)
Ibolit
5
Agregué a ~ / .bash_profile: export JAVA_HOME = $ (/ usr / libexec / java_home)
skytteren
1
O puede hacer "export JAVA_HOME = $ (/ usr / libexec / java_home -v 1.6)" de una sola vez en lugar de cambiar usando Java Preferences.app
mac
incapaz de abrir la aplicación de preferencias de Java en El Captian, fui desde Preferencias del sistema -> Java.
Wolf7176
34

El problema es que el enlace simbólico "CurrentJDK" dentro de las versiones de JavaVm.framework apunta al antiguo jdk, así que cuando utilicé los siguientes comandos para configurar el CurrentJDK al último (1.7.0_45), funciona

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

referencia: http://java.dzone.com/articles/installing-jdk-7-mac-os-x

Mahmoud Adam
fuente
asegúrese de especificar la versión correcta para jdk1.7.0_45.jdk, la mía fuejdk1.7.0_51.jdk
ndequeker
1
Me pregunto por qué los desarrolladores de Oracle no lo hicieron automáticamente. No es trivial para mí. Esta respuesta me salvó el día.
Ivan Voroshilin
esto no funciona para mí. Estoy en el captian. la versión mvn java se niega a cambiar. JAVA_HOME es precisa
Wolf7176
17

Para encontrar la ruta desde las Preferencias de Java, intente /usr/libexec/java_home -X

Mi entrada de Java7 se ve así:

<dict>
    <key>JVMArch</key>
    <string>x86_64</string>
    <key>JVMBundleID</key>
    <string>com.oracle.java.7u04.jdk</string>
    <key>JVMEnabled</key>
    <true/>
    <key>JVMHomePath</key>
    <string>/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home</string>
    <key>JVMIsBuiltIn</key>
    <false/>
    <key>JVMName</key>
    <string>Java SE 7</string>
    <key>JVMPlatformVersion</key>
    <string>1.7</string>
    <key>JVMVendor</key>
    <string>Oracle Corporation</string>
    <key>JVMVersion</key>
    <string>1.7.0_04</string>
</dict>
dmolony
fuente
6
grrrrr, hice eso y la ruta que enumera para mi jdk1.7 no existe en absoluto :(
Dean Hiller
9

Necesita cambiar la JAVA_HOMEvariable de entorno a la nueva ubicación de JDK 1.7.

Mire esta pregunta para ver las posibles ubicaciones donde se podría definir JAVA_HOME. En una terminal, escriba which javapara buscar la ruta de su instalación de Java y luego actualice JAVA_HOMEpara que apunte a esa ruta (pero excluya la carpeta bin final).

Nate
fuente
¿Estás seguro de que lo necesito en Mac OS X? No he tenido que hacer eso en el pasado. Si necesito configurar JAVA_HOME, ¿cómo sé qué ruta usar? Ya que la instalación de Java JDK 7 no me proporcionó información sobre la ruta de instalación y la aplicación de la utilidad Java Preference en Mac no muestra una ruta al JDK 1.7
Bruce Phillips
Si observa su pregunta anterior, puede ver que JAVA_HOME ya se ha definido y actualmente apunta al antiguo 1.6 JDK. No estoy familiarizado con cómo cambiar las variables de entorno en OSX, pero esto es lo que Maven usa de forma predeterminada.
Nate
El problema es que una actualización de Apple normalmente actualiza la versión de Java y establece el valor de JAVA_HOME. Establecer el valor JAVA_HOME en .bashrc no funciona en OS X como lo hace en linux. Además, en ningún lugar puedo encontrar la ruta al JDK 7 instalado por Oracle.
Bruce Phillips
Además, Nate, mi pregunta NO es un duplicado de la publicación a la que vinculó. Estoy en OS X y he actualizado a Java JDK 7 usando la instalación de Oracle para Mac OS X, que se lanzó recientemente el 26 de abril.
Bruce Phillips
Ninguna Mac en lugar de .bashrc usa .bash_profile y debería poder encontrar la instalación en / System / Library / Java / JavaVirtualMachines / donde debe apuntar a su nueva versión 1.7.0 de Java
peter_budo
7

En caso de que alguien esté instalando Maven en una Mac de 64 bits que ejecute Mac OSX 'Mavericks', ahórrese algo de tiempo y tirones de pelo tratando de instalar Maven. Estaba tratando de seguir esto (que falló porque la ubicación de java_home ha cambiado en Mavericks:

http://maven.apache.org/download.cgi

Me estaba tirando de los pelos hasta que encontré este sitio web, que le recomienda instalar homebrew y seguir las instrucciones de esta página: http://techspunky.blogspot.in/2013/10/how-to-install-maven-on-mac -osx-109.html

una vez completado, no entre en pánico cuando $ maven -version no funcione, en su lugar use $ mvn --version como se recomienda maven.apache.org/download.cgi.

Funcionó, pero luego noté que el SDK de Java que Maven estaba usando era la versión de Java: 1.6.0_65, que no es el último SDK que instalé en el sistema.

Una vez que configuro JAVA_HOME =/usr/libexec/java_home

Estaba usando el SDK correcto: Maven home: /usr/local/Cellar/maven/3.1.1/libexec Versión de Java: 1.7.0_45, proveedor: Oracle Corporation Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_45. jdk / Contenidos / Inicio / jre Configuración regional predeterminada: en_US, codificación de plataforma: UTF-8 Nombre del sistema operativo: "mac os x", versión: "10.9", arch: "x86_64", familia: "mac"

¡Éxito! pero espera ... la próxima vez que abrí la terminal y ejecuté mvn -v, volvió a la versión 1.6 de Java. WTH!

es una especie de supuesto error de lo que leí use: echo JAVA_HOME = /usr/libexec/java_home -v 1.7| sudo tee -a / etc / mavenrc

y ahora:

Inicio de Maven: /usr/local/Cellar/maven/3.1.1/libexec Versión de Java: 1.7.0_45, proveedor: Oracle Corporation Inicio de Java: /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre Configuración regional predeterminada: en_US, codificación de plataforma: UTF-8 Nombre del sistema operativo: "mac os x", versión: "10.9", arch: "x86_64", familia: "mac"

ConfusedDeer
fuente
export JAVA_HOME=`/usr/libexec/java_home`funcionó bien para mí para que la var JAVA_HOME se exportara correctamente.
cdeszaq
4

La razón por la que Maven todavía usa Java 6 es que el script / usr / bin / mvn que lo inicia no usa el método correcto de OS / X para resolver la versión actual de Java como se especifica en las Preferencias de Java. Consulte este número de Maven para obtener más detalles:

http://jira.codehaus.org/browse/MNG-4226

Votarlo podría arreglarlo; Mientras tanto, si modifica el script / usr / bin / mvn como se muestra en los comentarios y el parche sobre ese problema, obtendrá el resultado deseado.

Robert Elliot
fuente
2

Ok en mi máquina. Sí, el instalador de Oracle no hizo exactamente su trabajo, y me confundió muchísimo después de que 1.6 todavía se estaba ejecutando.

java run time was updated 

java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

pero el SDK HOME es en realidad un enlace SIM que todavía apunta a 1.6

/Library/Java/Home en el buscador GetInfo apunta a /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

en la terminal

./Home -> /System/Library/Frameworks/JavaVM.framework/Home

Imagínate.

Encontré 1.7 aquí y lo estoy usando para construir con: /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home

Dave
fuente
0

Creo que el problema radica en parte en el mecanismo de lanzamiento de Java. He podido hacer que Eclipse ejecute mi código en Java7, pero creo que eclipse todavía se está ejecutando en Java6. Además, tengo un programa java que se compiló por última vez hace un año y se creó con jarbundler-2.1.0.jar (con la opción jvmversion = "1.6+"). Cuando hago doble clic en el archivo .app, ejecuta Java6, pero cuando hago doble clic en el archivo .jar dentro del .app, ejecuta Java7.

Además, no uso JAVA_HOME, pero aún obtengo la versión correcta de Java "1.7.0_04" que se muestra en la pregunta. JAVA_HOME parece ser una pista falsa. Tal vez Maven lo necesite, pero Eclipse no parece usarlo, y tampoco lo hace al iniciar archivos jar.

Y después de configurar Java7 en la herramienta de Preferencias de Java, no parece afectar el lanzamiento de archivos .app java. Sin embargo, hace que 'java -version' desde la terminal funcione bien. Intenté desmarcar todo menos la opción Java7, y luego Eclipse no se ejecutó en absoluto.

dmolony
fuente
0

Si su JAVA_HOME está ubicado en el bash del usuario local, mvn seleccionará la versión actual de Java del sistema sin importar qué JAVA_HOME haya configurado.

Por lo tanto, primero ejecute el comando ' which mvn ' y verifique qué mvn ejecutable está utilizando. Después de eso, edite ese archivo mvn y cambie la variable JAVA_HOME a su hogar Java preferido.

Ankit Bhatnagar
fuente