Beim Versuch, gradle auszuführen, erhalte ich die folgende Fehlermeldung:
# gradle
ERROR: Java_HOME is set to an invalid directory: /usr/lib/jvm/default-Java
Please set the Java_HOME variable in your environment to match the
location of your Java installation.
Wenn ich jedoch die Java_HOME-Variable überprüfe, erhalte ich Folgendes:
# echo $Java_HOME
/usr/lib/jvm/Java-7-Oracle
Mein Java_HOME ist in .bashrc definiert und ich habe überprüft, ob es als Quelle festgelegt ist.
Das Ausführen von Java -version
bestätigt auch, dass Java_HOME richtig eingestellt ist und sich im PATH befindet.
# Java -version
Java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
Ich habe auch überprüft, dass /usr/bin/Java
sym auf /etc/alternatives/Java
verweist, was wiederum korrekt auf /usr/lib/jvm/Java-7-Oracle/jre/bin/Java
verweist.
Außerdem habe ich überprüft, dass es keine doppelten Java_HOME-Definitionen in .bash_profile
oder /etc/profile
gibt.
Meine Frage ist also, wie/warum Gradle /usr/lib/jvm/default-Java
findet und was noch wichtiger ist, wie kann ich es auf das richtige Verzeichnis verweisen?
Andere Programme, für die das JDK erforderlich ist, funktionieren gut. Ich denke, es ist eine Gradle-Ausgabe. Ich habe auch versucht, Gradle erneut zu installieren, was keinen Unterschied machte.
Ich habe 64bit Xubuntu (Ubuntu 13.10 Basis)
Es stellt sich heraus, dass die bestimmte Gradle-Binärdatei, die ich aus dem Ubuntu 13.10-Repository selbst heruntergeladen habe, Java_HOME zu exportieren versucht. Danke an Lucas für diesen Vorschlag.
/usr/bin/gradle
Zeile 70:
export Java_HOME=/usr/lib/jvm/default-Java
Wenn Sie diese Zeile auskommentieren, wird das Problem gelöst, und Gradle findet den richtigen Pfad zur Java-Binärdatei.
Wenn Sie nur die Binärdatei von ihrer Website herunterladen hat dieses Problem nicht, Dies ist ein Problem mit der Ubuntu-Repo-Version. Es scheint auch einige andere Probleme mit der Version 13.10 zu geben.
fügen Sie einen symbolischen Link hinzu
Sudo ln -s /usr/lib/jvm/Java-7-Oracle /usr/lib/jvm/default-Java
Für mich war dieser Fehler auf den Grund Gradle als Sudo zurückzuführen, und ich versuchte als Standardbenutzer, Gradle auszuführen.
Versuchen:
Sudo gradle -version
oder
Sudo gradle -v
Die Lösung ist, Java_HOME == dir über bin zu machen, wo javac wie in lebt
type javac
javac is /usr/bin/javac # now check if its just a symlink
ls -la /usr/bin/javac
/usr/bin/javac -> /etc/alternatives/javac # its a symlink so check again
ls -la /etc/alternatives/javac # now check if its just a symlink
/etc/alternatives/javac -> /usr/lib/jvm/Java-8-openjdk-AMD64/bin/javac
OK, so fand ich schließlich den Behälter über dem eigentlichen Javac
export Java_HOME=/usr/lib/jvm/Java-8-openjdk-AMD64
export PATH=$Java_HOME/bin:$PATH
oben vereinfacht und verallgemeinert werden
which javac >/dev/null 2>&1 || die "ERROR: no 'javac' command could be found in your PATH"
export Java_HOME=$(dirname $(dirname $(readlink -f $(which javac) )))
Versuchen Sie, die neueste Version von gradle
zu installieren.
Sudo add-apt-repository ppa:cwchien/gradle
Sudo apt-get update
Sudo apt-get install gradle
Wenn wir von Ubuntu Repo installieren, wird die alte Version installiert (für mich war es Gradle 1.4). In der älteren Version wird Java von Gradle als export Java_HOME=/usr/lib/jvm/default-Java
festgelegt. Die neueste Version hat dieses Problem nicht.
Haben Sie export
Ihren Java_HOME
? Ohne Export wird die Einstellung nicht an die Befehle weitergegeben, die in dieser Shell gestartet wurden. Außerdem verwendet Java -version
nicht Java_HOME
, sondern die erste Java
in Ihrem Pfad. Stellen Sie sicher, dass Ihr .bashrc
in etwa so aussieht:
Java_HOME=/path/to/Java/home
export Java_HOME
Ich hatte das gleiche Problem, aber ich fand den Exportbefehl in Zeile 70 in der gradle-Datei für die neueste Version 2.13 nicht, aber ich verstehe dort einen dummen Fehler, der folgt:
Wenn Sie Zeile 70 mit Exportbefehl in Gradle-Datei nicht im Gradle-Ordner/bin/finden, überprüfen Sie Ihre ~/.bashrc, wenn Sie export Java_HOME==/usr/lib/jvm/Java-7-openjdk-AMD64/bin/Java
finden. Entfernen Sie /bin/Java
aus dieser Zeile wie Java_HOME==/usr/lib/jvm/Java-7-openjdk-AMD64
und den Pfad> >> Statt dieses export PATH=$PATH:$HOME/bin:Java_HOME/
wird es export PATH=$PATH:$HOME/bin:Java_HOME/bin/Java
sein. Führen Sie dann source ~/.bashrc
aus.
Der Grund ist, wenn Sie Ihre Gradle-Datei überprüfen, finden Sie in Zeile 70 (wenn es keinen Exportbefehl gibt) oder in Zeile 75,
JAVACMD="$Java_HOME/bin/Java" fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: Java_HOME is set to an invalid directory: $Java_HOME
Das bedeutet, dass
/bin/Java
bereits vorhanden ist und daher vom PfadJava_HOME
abgezogen werden muss.
Das ist in meinem Fall passiert.
Dieses Problem trat auf, wenn ich den folgenden Befehl auf Ubuntu ausführte:
ionic build Android
Um dieses Problem zu lösen, habe ich folgende Schritte ausgeführt:
ln -sf /usr/lib/jvm/Java-7-openjdk-AMD64/jre/bin/Java /usr/lib/jvm/default-Java
Fügen Sie Java_HOME zu/etc/environment hinzu:
vi /etc/environment
Hinzufügen:
Java_HOME="/usr/lib/jvm/default-Java"
Nach dem Speichern lesen Sie es:
source /etc/environment
Zum Schluss können Sie den build-Befehl ausführen.
Sie können auch in den Ordner bin im Installationsordner von Gradle gehen und den Parameter Java_HOME in der Datei gradle.bat korrigieren. In meinem Fall war mein Java_HOME auf c:\Programme\Java\bin Java_HOME gesetzt in gradle.bat wurde auf% Java_HOME%\bin\Java.exe gesetzt.
Ich habe Java_HOME in gradle.bat korrigiert und es hat funktioniert.
Vielen Dank!!!
Sudo ln -s /usr/lib/jvm/Java-7-Oracle/jre /usr/lib/jvm/default-Java
Erstellen Sie einen symbolischen Link zum Standard-Java-Verzeichnis.
Sie finden Ihr Java-Verzeichnis unter
readlink -f $(which Java)
# outputs: /usr/lib/jvm/Java-7-Oracle/jre/bin/Java
# Remove the last `/bin/Java` and use it in above symbolic link command.
Für mich war das Problem ein expliziter Satz im Argumentabschnitt der Konfiguration für externe Werkzeuge in Eclipse.
Ich hatte auch ein Problem damit. Es sagte falsches Verzeichnis, wenn es richtig war. Also habe ich gerade eine lokale Variable mit dem Namen Java_HOME erstellt, die das letzte/bin/Java weglässt. Es hat gut für mich funktioniert.
In meinem Ubuntu habe ich 2 Tage lang Kopfschmerzen bei diesem Problem.
Schritt 1. Geben Sie auf dem Terminal whereis Java
ein, dann wird so etwas angezeigt
Java: /usr/bin/Java /etc/Java /usr/share/Java /usr/lib/jvm/Java-8-openjdk-AMD64/bin/Java /usr/share/man/man1/Java.1.gz
Schritt 2. Notieren Sie sich den Pfad: /usr/lib/jvm/Java-8-openjdk-AMD64/bin/Java
schließe den bin/Java
aus
ihr Java_HOME = /usr/lib/jvm/Java-8-openjdk-AMD64
Geben Sie vor dem Ausführen des Befehls Folgendes ein:
export Java_HOME="path_to_Java_home"
Wobei path_to_Java_home
der Ordner ist, in dem sich Ihr bin/Java
befindet.
Wenn Java ordnungsgemäß installiert ist, können Sie den Speicherort mit dem folgenden Befehl ermitteln:
readlink -f $(which Java)
Vergessen Sie nicht, bin/Java
vom Ende des Pfads zu entfernen, während Sie ihn in Java_HOME
einfügen.
Wenn Ihre GRADLE_HOME- und Java_HOME-Umgebung ordnungsgemäß eingerichtet ist, überprüfen Sie Ihr JDK-Verzeichnis und stellen Sie sicher, dass sich unter dem Pfad Java.exe befindet.
C:\Program Files (x86)\Java\jdk1.8.0_181\bin
Als Fehler in der gradle.bat-Datei erwähnt
:findJavaFromJavaHome
set Java_HOME=%Java_HOME:"=%
set Java_EXE=%Java_HOME%/bin/Java.exe
if exist "%Java_EXE%" goto init
echo.
echo ERROR: Java_HOME is set to an invalid directory: %Java_HOME%
echo.
echo Please set the Java_HOME variable in your environment to match the
echo location of your Java installation.
Ihre Java-Installation kann nicht gefunden werden. Also finden und einstellen
Java.exe
unter %Java_HOME%/bin
wenn alles korrekt ist.
Dies funktioniert für mich (mein Konto wurde vom Client deaktiviert und der Administrator hat Java.exe aus meinem Verzeichnis entfernt.)
In meinem Dockercontainer (da das Problem minimal war, Java nicht zu finden) war das "welche" nicht installiert. Durch die Komprimierung eines Projekts mit gradlew wurde in ./gradlew Java gefunden.