pom - Error: JAVA_HOME no está definido correctamente al ejecutar maven
set java 1.8 maven (13)
Instalé java y configuré la ruta al entorno y cuando ejecuto
echo $JAVA_HOME
obtengo el siguiente resultado:
/usr/lib/jvm/java-7-oracle/jre/bin/java
También instalé
apache-maven
y cambié
environment
archivo de
environment
y ahora se ve así:
JAVA_HOME="/usr/lib/jvm/java-7-oracle/jre/bin/java"
M2_HOME=/usr/local/apache-maven/apache-maven-3.0.5
M2=$M2_HOME/bin
MAVEN_OPTS="-Xms256m -Xmx512m"
PATH=$M2:$PATH
Pero cuando ejecuto
mvn --version
me sale una advertencia:
Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/lib/jvm/java-7-oracle/jre/bin/java/bin/java
No puedo descubrir por qué se repite al final
/bin/java/bin/java
Abrimos una terminal y buscamos la ubicación de java:
manuel@zonademanel:~ → whereis java
java: / usr / bin / java / etc / java / usr / bin / X11 / java / usr / share / java /usr/share/man/man1/java.1.gz
Lo que estamos buscando es / usr / bin / java continuar en la línea de comando para encontrar la ruta absoluta, ya que este es solo un enlace simbólico.
manuel@zonademanel:~ → ls -lah /usr/bin/java
lrwxrwxrwx 1 root root 22 may 19 2015 / usr / bin / java -> / etc / Alternatives / java
manuel@zonademanel:~ → ls -lah /etc/alternatives/java
lrwxrwxrwx 1 root root 39 dic 7 11:52 / etc / alternativas / java -> / usr / lib / jvm / java-8-oracle / jre / bin / java
Modifiqué mi archivo / etc / environment con los siguientes valores
RUTA = "/ usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / usr / lib / jvm / java-8-oracle / jre / bin "JAVA_HOME =" / usr / lib / jvm / java-8-oracle / jre "
Si no quiero volver a iniciar sesión, puedo volver a cargar los cambios con:
source /etc/environment
Y ejecute mvn -version correctamente
manuel@zonademanel:~ → mvn -version
Apache Maven 3.0.5
Maven home: / usr / share / maven
Versión de Java: 1.8.0_77, proveedor: Oracle Corporation
Página de inicio de Java: / usr / lib / jvm / java-8-oracle / jre
Configuración regional predeterminada: es_MX, codificación de plataforma: UTF-8
Nombre del sistema operativo: "linux", versión: "3.16.0-70-generic", arch: "amd64", familia: "unix"
Debe tomar todo el directorio donde está instalado Java, en mi caso:
export JAVA_HOME=/usr/java/jdk1.8.0_31
En mi caso, el problema estaba en vscode.
Uso Windows e instalé Ubuntu en mi computadora, por lo que vscode terminal usa Ubuntu. Solo voy a settings.json y cambio a cmd.exe nuevamente
En primer lugar, en un modo de desarrollo, debe usar JDK en lugar de JRE. En segundo lugar, JAVA_HOME es donde instala Java y donde todos los demás marcos buscarán lo que necesitan (JRE, javac, ...)
Entonces, si configuras
JAVA_HOME = / usr / lib / jvm / java-7-oracle / jre / bin / java
cuando ejecuta un comando "mvn", Maven intentará acceder a Java agregando / bin / java, pensando que JAVA_HOME está en el directorio raíz de la instalación de Java.
Pero ambientación
JAVA_HOME = / usr / lib / jvm / java-7-oracle /
Maven accederá a add bin / java, entonces funcionará bien.
Es posible que reciba este error debido a un par de razones. Para solucionar esto rápidamente, siga los pasos a continuación,
Primero encuentre la ubicación de Java. Para obtener una lista de sus plataformas Java instaladas, ejecute el siguiente comando desde la terminal:
$ sudo update-alternatives --config java
Ahora configure JAVA_HOME y PATH,
$ export JAVA_HOME=<java_home>
$ export PATH=$JAVA_HOME/jre/bin:$PATH
Crea el enlace simbólico
$ sudo ln -s <java_home>/jre <java_symlink_path>
Cuando tomamos su caso como ejemplo:
$ sudo ln -s /usr/lib/jvm/java-7-oracle/jre /usr/lib/jvm/java-7-oracle/jre/bin/java
El comando anterior creará la ubicación del enlace simbólico donde el sistema está tratando de encontrar su problema.
Finalmente haz el
$ mvn --version
Esta solución funciona para mí ... simplemente escriba
export PATH=$JAVA_HOME/jre/bin:$PATH
en el terminal y luego ejecute
mvn -version
, mostrará el mismo error pero con un registro como este
which: no javac in (/jre/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/puppetlabs/bin)
Warning: JAVA_HOME environment variable is not set.
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T22:59:23+05:30)
Maven home: /opt/apache-maven-3.2.5
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"
ahora copie la ruta de
Java home
, es decir
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
en mi caso.
ahora escribe,
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
y el error se resuelve. NOTA: pegue su propia ruta que muestra su máquina en mvn log en export JAVA_HOME.
JAVA_HOME debe ser
/usr/lib/jvm/java-7-oracle/jre/
.
Si está utilizando mac-OS, debe
export JAVA_HOME=/usr/libexec/java_home
para
export JAVA_HOME=$(/usr/libexec/java_home)
.
Pasos para hacer esto:
$ vim .bash_profile
export JAVA_HOME=$(/usr/libexec/java_home)
$ source .bash_profile
donde
/usr/libexec/java_home
es la ruta de su jvm
Sucede por la razón mencionada a continuación:
Si ve el script mvn: el código falla aquí ---
Pasos para la depuración y reparación:
Paso 1: Abra el script mvn /Users/Username/apache-maven-3.0.5/bin/mvn (Abra con el comando less como: less /Users/Username/apache-maven-3.0.5/bin/mvn)
Paso 2: descubra el siguiente código en el script:
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM''s JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly."
echo " We cannot execute $JAVACMD"
exit 1
fi
Paso 3: está sucediendo porque no se configuró la variable
JAVACMD
.
Entonces muestra el error.
Nota: para arreglarlo
export JAVACMD=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/bin/java
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/
Clave: Si desea que sea permanente, abra emacs .profile
publique los comandos y presione Ctrl-x Ctrl-c (save-buffers-kill-terminal).
Suponiendo que utiliza bash shell e instala Java con el instalador de Oracle, puede agregar lo siguiente a su
.bash_profile
export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/jre/bin:$PATH
Esto seleccionaría el
JAVA_HOME
correcto según lo definido por el instalador de Oracle y lo establecerá primero en su
$PATH
asegurándose de que se encuentre.
Además, no necesita cambiarlo más tarde al actualizar Java.
EDITAR
Según los comentarios:
Hacerlo persistente después de un reinicio
Simplemente agregue esas líneas en el archivo de configuración del shell.
(Asumiendo que es
bash
)
Por
.profile
:
.bashrc
,
.bash_profile
o
.profile
(para ubuntu)
Usar una instalación Java personalizada
Establezca
JAVA_HOME
en la carpeta raíz de la ruta de instalación de Java personalizada sin el
$()
.
Ej:
JAVA_HOME=/opt/java/openjdk
Utilice estos dos comandos (para Java 8):
sudo update-java-alternatives --set java-8-oracle
java -XshowSettings 2>&1 | grep -e ''java.home'' | awk ''{print "JAVA_HOME="$3}'' | sed "s///jre//g" >> /etc/environment
establecer como está exportar JAVA_HOME = / usr / java / jdk1.8.0_31. y ejecutar con sudo se ejecutará ...
$JAVA_HOME
debe ser el directorio donde se instaló java, no una de sus partes:
export JAVA_HOME=/usr/lib/jvm/java-7-oracle