web-dev-qa-db-fra.com

Erreur: Java_HOME n'est pas défini correctement lors de l'exécution de maven

J'ai installé Java et défini le chemin d'accès à l'environnement et lorsque j'exécute echo $Java_HOME, je reçois le résultat suivant:

/usr/lib/jvm/Java-7-Oracle/jre/bin/Java

J'ai aussi installé Apache-maven et changé le fichier environment et voici à quoi il ressemble:

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

Mais quand j'exécute mvn --version, je reçois un avertissement:

Error: Java_HOME is not defined correctly.
  We cannot execute /usr/lib/jvm/Java-7-Oracle/jre/bin/Java/bin/Java

Impossible de savoir pourquoi cela se répète à la fin /bin/Java/bin/Java

47
user3127896

En supposant que vous utilisiez bash Shell et que Java soit installé avec le programme d’installation Oracle, vous pouvez ajouter ce qui suit à votre .bash_profile

export Java_HOME=$(/usr/libexec/Java_home)
export PATH=$Java_HOME/jre/bin:$PATH

Ceci choisirait le Java_HOME correct défini par le programme d'installation Oracle et le définirait d'abord dans votre $PATH en s'assurant qu'il soit trouvé.

De plus, vous n'avez pas besoin de le changer plus tard lorsque vous mettez à jour Java.

MODIFIER

Selon les commentaires:

Rendre persistant après un redémarrage

Ajoutez simplement ces lignes dans le fichier de configuration du shell. (En supposant que c'est bash)

Ex: .bashrc, .bash_profile ou .profile (pour Ubuntu)

Utilisation d'une installation Java personnalisée

Définissez Java_HOME dans le dossier racine du chemin d'installation Java personnalisé sans $().

Ex: Java_HOME=/opt/Java/openjdk

72
rbento

Java_HOME devrait être /usr/lib/jvm/Java-7-Oracle/jre/.

18
talex

Nous ouvrons un terminal et cherchons l'emplacement 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

Ce que nous recherchons, c'est/usr/bin/Java continue sur la ligne de commande pour trouver le chemin absolu, car il ne s'agit que d'un lien symbolique.

manuel@zonademanel:~ → ls -lah /usr/bin/Java

lrwxrwxrwx 1 racine racine 22 mai 19 2015/usr/bin/Java -> /etc/alternatives/Java

manuel@zonademanel:~ → ls -lah /etc/alternatives/Java

lrwxrwxrwx 1 racine racine 39 dic 7 11:52/etc/alternatives/Java -> /usr/lib/jvm/Java-8-Oracle/jre/bin/Java

J'ai modifié mon/etc/environment fichier avec les valeurs suivantes 

PATH = "/ 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 je ne veux pas me reconnecter, je peux recharger les modifications avec:

source /etc/environment 

Et lancez mvn -version correctement

manuel@zonademanel:~ → mvn -version

Apache Maven 3.0.5
Maven home:/usr/share/maven
Version Java: 1.8.0_77, fournisseur: Oracle Corporation
Page d'accueil Java:/usr/lib/jvm/Java-8-Oracle/jre
Paramètres régionaux par défaut: es_MX, codage de la plate-forme: UTF-8
Nom du système d'exploitation: "linux", version: "3.16.0-70-generic", Arch: "AMD64", famille: "unix"

$Java_HOME devrait être le répertoire où Java a été installé, pas une de ses parties:

export Java_HOME=/usr/lib/jvm/Java-7-Oracle
9
Mureinik

Vous pourriez avoir cette erreur pour deux raisons. Pour résoudre ce problème rapidement, veuillez suivre les étapes ci-dessous,

Recherchez d'abord l'emplacement Java. Pour obtenir la liste de vos plates-formes Java installées, exécutez la commande suivante à partir du terminal:

$ Sudo update-alternatives --config Java

Maintenant, définissez Java_HOME et PATH,

$ export Java_HOME=<Java_home>

$ export PATH=$Java_HOME/jre/bin:$PATH

Créer le lien symbolique

$ Sudo ln -s <Java_home>/jre <Java_symlink_path>

Quand nous prenons votre cas comme exemple:

$ Sudo ln -s /usr/lib/jvm/Java-7-Oracle/jre /usr/lib/jvm/Java-7-Oracle/jre/bin/Java

La commande ci-dessus créera l'emplacement du lien symbolique où le système tente de trouver votre problème.

Enfin faire le 

$ mvn --version
5
tk_

Vous devez prendre tout le répertoire où Java est installé, dans mon cas:

export Java_HOME=/usr/Java/jdk1.8.0_31
2
trenixjetix

Tout d'abord, en mode de développement, vous devez utiliser JDK au lieu de JRE . Deuxièmement, Java_HOME est l'endroit où vous installez Java et où tous les autres frameworks chercheront ce dont ils ont besoin (JRE, javac, ...)

Donc si vous définissez

Java_HOME =/usr/lib/jvm/Java-7-Oracle/jre/bin/Java

lorsque vous exécutez une commande "mvn", Maven tente d'accéder à Java en ajoutant/bin/Java, en pensant que Java_HOME se trouve dans le répertoire racine de l'installation Java.

Mais mise 

Java_HOME =/usr/lib/jvm/Java-7-Oracle /

Maven accédera à add bin/Java, puis cela fonctionnera parfaitement.

2
Jad B.

défini comme il est export Java_HOME =/usr/Java/jdk1.8.0_31.et exécuté avec Sudo, il sera exécuté.

2
rohit sawant

Cette solution fonctionne pour moi ... Tapez juste export PATH=$Java_HOME/jre/bin:$PATH dans le terminal Puis lancez mvn -versionit affichera la même erreur mais avec un journal de ce type.

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"

maintenant, copiez le Java home chemin i.e. /usr/lib/jvm/Java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre dans mon cas.

maintenant tapez,

export Java_HOME=/usr/lib/jvm/Java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre

et l'erreur est résolue ..___. REMARQUE: collez votre propre chemin indiqué par votre ordinateur dans le journal MVN à l'exportation Java_HOME.

1
Mohit Garg

Utilisez ces deux commandes (pour 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
0
Xdg

Cela se produit pour la raison mentionnée ci-dessous: 

Si vous voyez le script MVN: Le code échoue ici --- 

Étapes pour le débogage et la réparation: 

Étape 1: Ouvrez le script mvn /Users/Username/Apache-maven-3.0.5/bin/mvn(Open avec la commande less, telle que: less /Users/Username/Apache-maven-3.0.5/bin/ mvn)

Étape 2: Découvrez le code ci-dessous dans le 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

Étape 3: Cela se produit car la variable JAVACMD n'a pas été définie. Donc, il affiche l'erreur.

Note: pour le réparer 

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/

Key: Si vous voulez que ce soit permanent Ouvrez emacs .profile

postez les commandes .__ et appuyez sur Ctrl-x Ctrl-c (save-buffers-kill-terminal).

0
Shubham Verma

Si vous utilisez mac-OS, export Java_HOME=/usr/libexec/Java_home doit être remplacé par export Java_HOME=$(/usr/libexec/Java_home). Étapes pour le faire: 

 $ vim .bash_profile

 export Java_HOME=$(/usr/libexec/Java_home)

 $ source .bash_profile

/usr/libexec/Java_home est le chemin de votre jvm 

0
ishanbakshi