it-swarm.com.de

Fehler: Java_HOME ist nicht korrekt beim Ausführen von Maven definiert

Ich habe Java installiert und den Pfad zur Umgebung gesetzt, und wenn ich echo $Java_HOME ausführte, erhalte ich die folgende Ausgabe:

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

Ich habe auch Apache-maven und environment Datei installiert und jetzt sieht es so aus:

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

Wenn ich jedoch mvn --version ausführen, erhalte ich eine Warnung:

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

Kann nicht herausfinden, warum es am Ende wiederholt wird /bin/Java/bin/Java

47
user3127896

Wenn Sie die bash-Shell verwenden und Java mit dem Oracle-Installationsprogramm installiert haben, können Sie Ihrem .bash_profile Folgendes hinzufügen:

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

Dies würde den korrekten Java_HOME auswählen, wie vom Oracle-Installationsprogramm definiert, und ihn zuerst in Ihrem $PATH setzen, um sicherzustellen, dass er gefunden wird.

Sie müssen es auch später nicht ändern, wenn Sie Java aktualisieren.

EDIT

Wie in den Kommentaren:

Nach einem Neustart dauerhaft machen

Fügen Sie diese Zeilen einfach in die Shell-Konfigurationsdatei ein. (Angenommen, es ist bash)

Bsp .: .bashrc, .bash_profile oder .profile (für Ubuntu)

Verwenden einer benutzerdefinierten Java-Installation

Setzen Sie Java_HOME auf den Stammordner des benutzerdefinierten Java-Installationspfads ohne $().

ZB: Java_HOME=/opt/Java/openjdk

72
rbento

Java_HOME sollte /usr/lib/jvm/Java-7-Oracle/jre/ sein.

18
talex

Wir öffnen ein Terminal und suchen nach dem Standort von Java:

[email protected]:~ → whereis Java

Java:/usr/bin/Java/etc/Java/usr/bin/X11/Java /usr/share/Java /usr/share/man/man1/Java.1.gz

Wir suchen nach/usr/bin/Java in der Befehlszeile, um den absoluten Pfad zu finden, da dies nur ein symbolischer Link ist.

[email protected]:~ → ls -lah /usr/bin/Java

lrwxrwxrwx 1 Wurzel Wurzel 22 Mai 19 2015/usr/bin/Java -> /etc/alternatives/Java

[email protected]:~ → ls -lah /etc/alternatives/Java

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

Ich habe meine/etc/environment -Datei mit den folgenden Werten geändert 

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 "

Wenn ich nicht neu anmelden möchte, kann ich die Änderungen mit neu laden:

source /etc/environment 

Und führe mvn -version korrekt aus

[email protected]:~ → mvn -version

Apache Maven 3.0.5
Maven-Startseite:/usr/share/maven
Java-Version: 1.8.0_77, Hersteller: Oracle Corporation
Java-Startseite:/usr/lib/jvm/Java-8-Oracle/jre
Standardgebietsschema: es_MX, Plattformkodierung: UTF-8
Betriebssystemname: "Linux", Version: "3.16.0-70-Generic", Arch: "AMD64", Familie: "Unix"

$Java_HOME sollte das Verzeichnis sein, in dem Java installiert wurde, nicht einer seiner Bestandteile

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

Dieser Fehler kann aus verschiedenen Gründen auftreten. Um dies schnell zu beheben, folgen Sie bitte den folgenden Schritten:

Suchen Sie zuerst den Java-Speicherort. Führen Sie den folgenden Befehl auf dem Terminal aus, um eine Liste Ihrer installierten Java-Plattformen zu erhalten:

$ Sudo update-alternatives --config Java

Setzen Sie jetzt Java_HOME und PATH,

$ export Java_HOME=<Java_home>

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

Erstellen Sie den Symlink

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

Wenn wir Ihren Fall als Beispiel nehmen:

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

Mit dem obigen Befehl wird der Symlink-Ort erstellt, an dem das System in Ihrem Problem suchen soll.

Schließlich mache das 

$ mvn --version
5
tk_

In meinem Fall müssen Sie das gesamte Verzeichnis mit Java verwenden,

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

Erstens sollten Sie in einem Entwicklungsmodus JDK anstelle von JRE ..__ verwenden. Zweitens installieren Sie Java mit Java_HOME, und alle anderen Frameworks suchen nach dem, was sie benötigen (JRE, Javac, ...)

Also wenn du eingestellt hast

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

wenn Sie einen "mvn" -Befehl ausführen, versucht Maven, durch Hinzufügen von/bin/Java auf Java zuzugreifen. Dabei wird davon ausgegangen, dass sich Java_HOME im Stammverzeichnis der Java-Installation befindet.

Aber Einstellung 

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

Maven greift dann auf bin/Java zu, dann funktioniert es einwandfrei.

2
Jad B.

gesetzt, wie es ist Java_HOME =/usr/Java/jdk1.8.0_31 zu exportieren und mit Sudo auszuführen, wird es ausgeführt ..

2
rohit sawant

Diese Lösung funktioniert für mich ... Geben Sie einfach export PATH=$Java_HOME/jre/bin:$PATH in das Terminal ein Führen Sie dann mvn -versionit aus. Es wird derselbe Fehler angezeigt, jedoch mit einem Protokoll wie diesem

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"

kopieren Sie jetzt den Java home-Pfad, d. h. /usr/lib/jvm/Java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre in meinem Fall.

jetzt tippen,

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

und der Fehler wird behoben . HINWEIS: Fügen Sie Ihren eigenen Pfad ein, der von Ihrem Computer im mvn-Protokoll beim Exportieren von Java_HOME angezeigt wird.

1
Mohit Garg

Verwenden Sie diese beiden Befehle (für 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

Dies geschieht aus den unten genannten Gründen: 

Wenn Sie das mvn-Skript sehen: Der Code schlägt hier fehl --- 

Schritte zum Debuggen und Fixieren: 

Schritt 1: Öffnen Sie das mvn-Skript /Users/Username/Apache-maven-3.0.5/bin/mvn(Öffnen Sie den Befehl less mit dem Befehl less: mvn)

Schritt 2: Finden Sie den folgenden Code im Skript heraus:

  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

Schritt 3: Dies geschieht, weil die Variable JAVACMD nicht festgelegt wurde. Es zeigt also den Fehler an.

Hinweis: Um es zu beheben 

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/

Schlüssel: Wenn Sie möchten, dass es dauerhaft ist Öffnen Sie emacs .profile

poste die Befehle .__ und drücke Strg-x Strg-c (save-buffers-kill-terminal).

0
Shubham Verma

In meinem Fall lag das Problem in vscode.

Ich benutze Windows und habe Ubuntu auf meinem Computer installiert, also benutzt vscode terminal Ubuntu. Ich gehe einfach zu settings.json und wechsle wieder zu cmd.exe

0
Pedrojonassm

Wenn Sie mac-OS verwenden, muss export Java_HOME=/usr/libexec/Java_home in export Java_HOME=$(/usr/libexec/Java_home) geändert werden. Schritte dazu: 

 $ vim .bash_profile

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

 $ source .bash_profile

dabei ist /usr/libexec/Java_home der Pfad Ihres jvm 

0
ishanbakshi