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
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
Java_HOME devrait être /usr/lib/jvm/Java-7-Oracle/jre/
.
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
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
Vous devez prendre tout le répertoire où Java est installé, dans mon cas:
export Java_HOME=/usr/Java/jdk1.8.0_31
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.
défini comme il est export Java_HOME =/usr/Java/jdk1.8.0_31.et exécuté avec Sudo, il sera exécuté.
Cette solution fonctionne pour moi ... Tapez juste export PATH=$Java_HOME/jre/bin:$PATH
dans le terminal Puis lancez mvn -version
it 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.
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
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).
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
où /usr/libexec/Java_home
est le chemin de votre jvm