Gradle trouve le JAVA_HOME erroné même s'il est correctement défini

168

Lorsque j'essaye d'exécuter gradle, j'obtiens l'erreur suivante:

# 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.

Cependant, lorsque je vérifie la variable JAVA_HOME, j'obtiens:

# echo $JAVA_HOME 
/usr/lib/jvm/java-7-oracle

Mon JAVA_HOME est défini dans .bashrc et j'ai vérifié deux fois qu'il est défini comme source.

L'exécution java -versionconfirme également que JAVA_HOME est correctement défini et se trouve sur le PATH.

# 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)

J'ai également vérifié que les /usr/bin/javaliens symboliques vers /etc/alternatives/javalesquels les liens symboliques vers/usr/lib/jvm/java-7-oracle/jre/bin/java

De plus, j'ai vérifié qu'il n'y avait pas de définitions JAVA_HOME en double dans .bash_profileou /etc/profile.

Ma question est donc de savoir comment / pourquoi Gradle trouve-t /usr/lib/jvm/default-java-il et, plus important encore, comment le pointer vers le bon répertoire?

D'autres programmes qui nécessitent le JDK fonctionnent bien, donc je pense que c'est un problème de Gradle. J'ai également essayé de réinstaller Gradle, ce qui n'a fait aucune différence.

J'utilise Xubuntu 64 bits (base Ubuntu 13.10)

James Barnett
la source
Veuillez fournir la sortie d'erreur complète. Dans l'état actuel des choses, on ne sait pas d'où vient le message. Avez-vous également un /usr/lib/jvm/default-javarépertoire ou un lien symbolique? Et comment avez-vous installé Gradle?
Peter Niederwieser
J'ai mis à jour le Q, mais c'est à peu près la sortie d'erreur complète. Il n'y a pas de /usr/lib/jvm/default-javadir. Installé avec apt (apt-get install gradle)
James Barnett
Le script de démarrage Gradle n'a pas besoin JAVA_HOMEd'être défini. Si JAVA_HOMEest défini, le script utilise $JAVA_HOME/bin/javapour exécuter Gradle. Sinon, il utilise java(c'est- javaà- dire doit être sur le PATH). Peut-être que le package apt (tiers) utilise un script de démarrage modifié.
Peter Niederwieser
Oui ressemble à n'importe quel ppa à partir duquel j'ai obtenu le binaire avait codé en dur et exporté le JAVA_HOME vers usr/lib/jvm/defult-java. Merci pour l'aide
James Barnett
Avez-vous fait source ~/.bashrcou redémarré votre ordinateur après avoir défini JAVA_HOME?
IgorGanapolsky

Réponses:

263

Il s'avère que le binaire Gradle particulier que j'ai téléchargé à partir du référentiel Ubuntu 13.10 lui-même essaie d'exporter JAVA_HOME. Merci à Lucas de l' avoir suggéré.

/usr/bin/gradle ligne 70:

export JAVA_HOME=/usr/lib/jvm/default-java

Le commentaire de cette ligne résout le problème et Gradle trouve le chemin correct vers le binaire Java.

Si vous téléchargez simplement le binaire à partir de leur site Web, il n'y a pas ce problème, c'est un problème avec la version du repo Ubuntu. Il semble également y avoir d'autres problèmes avec la version 13.10.

James Barnett
la source
Le package gradle semble installer le jdk à cet emplacement, au moins sur Ubuntu 12.04 LTS avec uniquement les référentiels par défaut. J'ai fait cela sur une VM Ubuntu qui n'avait pas Java, je l'ai d'abord instantané, apt-get install gradle (qui installe près de 400 packages), et il a installé java dans / usr / lib / jvm ... snapshot rétabli, non / usr / lib / jvm. J'étais en train de tester la théorie de l'exportation de script gradle JAVA_HOME et en effet, comme vous l'avez trouvé.
Joshua McKinnon
2
Gradle ne fait pas ça. Le ppa est fourni par quelqu'un d'autre, et vous devrez donc leur demander. En général, je recommanderais de démarrer Gradle via le Gradle Wrapper, plutôt que de l'installer via un gestionnaire de paquets.
Peter Niederwieser
J'ai mis à jour la réponse pour qu'il soit plus clair que la version du repo Ubuntu est le problème, pas Gradle lui-même.
James Barnett
11
Merci, je recherche depuis plus d'une heure une solution à ce problème. Merci pour cet article, il résout mon problème sur ubuntu 14.04
Kay Schneider
1
Façon de résoudre votre propre problème (et le mien simultanément)! C'est dommage que cette question ait un an et que le script Gradle du référentiel n'ait pas été mis à jour pour résoudre ce problème.
sotrh
49

ajouter un lien symbolique

sudo ln -s /usr/lib/jvm/java-7-oracle /usr/lib/jvm/default-java
Shashi
la source
@Nar pourriez-vous s'il vous plaît fournir le chemin d'installation de JAVA
Shashi
Merci pour la réponse, mais le chemin de JAVA n'a pas d'importance car le script gradle remplace le chemin comme l'a dit James stackoverflow.com/a/22309017/1679348
Nar
5
Cela a très bien fonctionné pour moi. Étant donné le nom ( default-java ), je dirais que c'est une approche assez raisonnable.
Phil
2
À mon avis, c'est une bien meilleure solution que de changer les fichiers Gradle. (Et oui, ça marche pour moi très bien)
zorglub76
Merci Monsieur! Tu as sauvé mon temps!
AlexKh
21

La solution est de rendre JAVA_HOME == dir au-dessus de bin où javac vit comme dans

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, alors j'ai finalement trouvé le bac au-dessus du javac réel, alors faites-le

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

ci-dessus peut être simplifiée et généralisée à

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)  )))
Scott Stensland
la source
13

Pour moi, cette erreur était due à la raison pour laquelle Gradle était installé en tant que sudo et que j'essayais en tant qu'utilisateur par défaut d'exécuter Gradle.

Essayer:

sudo gradle -version

ou

sudo gradle -v
Jyoti Prakash
la source
7

Essayez d'installer la dernière version de gradle,

sudo add-apt-repository ppa:cwchien/gradle

sudo apt-get update

sudo apt-get install gradle

Si nous installons à partir d'ubuntu repo, il installera l'ancienne version (pour moi, c'était gradle 1.4). Dans la version plus ancienne, il définit java à partir de gradle comme export JAVA_HOME=/usr/lib/jvm/default-java. La dernière version n'a pas ce problème.

Mohammed Safeer
la source
5

Avez-vous exportvotre JAVA_HOME? Sans exportation, le paramètre ne sera pas propagé aux commandes lancées à l'intérieur de ce shell. Aussi, java -versionn'utilise pas JAVA_HOME, il utilise plutôt le premier javatrouvé dans votre chemin. Assurez-vous que votre .bashrcressemble à quelque chose comme ceci:

JAVA_HOME=/path/to/java/home
export JAVA_HOME
Lucas
la source
1
Oui, il est défini dans .bashrc comme export JAVA_HOME=/usr/lib/jvm/java-7-oracle(syntaxe légèrement différente mais je suppose que c'est la même chose)
James Barnett
3
@JamesBarnett, la gradlecommande elle-même pourrait- elle définir cette variable? Peut-être que la personne qui a installé a gradlecréé un script wrapper qui définit les variables d'environnement avant de démarrer l'application. Lors de l'utilisation de tomcat, il n'est pas rare que le catalina.sh(qui est le script de démarrage) appelle un setenv.shpour configurer des variables d'environnement qui peuvent inclureJAVA_HOME
Lucas
4

J'ai rencontré ce problème lorsque j'exécute la commande suivante sur Ubuntu:

ionic build android

Pour résoudre ce problème, j'ai suivi les étapes suivantes:

ln -sf /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java /usr/lib/jvm/default-java

Ajoutez JAVA_HOME à / etc / environment:

vi /etc/environment

Ajouter:

JAVA_HOME="/usr/lib/jvm/default-java"

Après avoir enregistré, lisez-le:

source /etc/environment

Enfin, vous pouvez exécuter la commande build.

Agilox
la source
4

J'ai eu le même problème, mais je n'ai pas trouvé la commande d'exportation à la ligne 70 dans le fichier gradle pour la dernière version 2.13, mais je comprends une erreur stupide, à savoir la suite,

Si vous ne trouvez pas la ligne 70 avec la commande d'exportation dans le fichier gradle dans votre dossier gradle / bin /, vérifiez votre ~ / .bashrc, si vous trouvez export JAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64/bin/java, supprimez-le /bin/javade cette ligne, comme JAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64, et dans le chemin >>> à la place de cela export PATH=$PATH:$HOME/bin:JAVA_HOME/, ce sera export PATH=$PATH:$HOME/bin:JAVA_HOME/bin/java. Alors courez source ~/.bashrc.

La raison en est que si vous vérifiez votre fichier gradle, vous trouverez à la ligne 70 (s'il n'y a pas de commande d'exportation) ou à la ligne 75,

JAVACMD="$JAVA_HOME/bin/java"
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Cela signifie qu'il /bin/javaest déjà là, il doit donc être soustrait du JAVA_HOMEchemin.

Cela s'est produit dans mon cas.

rien de spécial
la source
4

Dans mon Ubuntu, j'ai mal à la tête pendant 2 jours sur ce problème.

Étape 1. Tapez sur le terminal whereis java puis il affichera quelque chose comme ça

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

Étape 2. Prenez note du chemin: /usr/lib/jvm/java-8-openjdk-amd64/bin/java

exclure le bin/java

votre JAVA_HOME = /usr/lib/jvm/java-8-openjdk-amd64

MJ Montes
la source
La clé ici est d'exclure / bin / java
Borjante le
2

Pour moi, un ensemble explicite sur la section des arguments de la configuration des outils externes dans Eclipse était le problème.

entrez la description de l'image ici

Aneesh Vijendran
la source
2

Vous pouvez également aller dans le dossier bin de votre dossier d'installation gradle et corriger le paramètre JAVA_HOME dans le fichier gradle.bat. Dans mon cas, mon JAVA_HOME a été défini sur c: \ Program files \ java \ bin Le JAVA_HOME dans gradle.bat a été défini sur% JAVA_HOME% \ bin \ java.exe.

J'ai corrigé le JAVA_HOME dans gradle.bat et cela a fonctionné.

Je vous remercie!!!

asp_NewBee
la source
c'est maintenant 2019 et c'est TOUJOURS un problème! Sauf que c'est légèrement différent et que la variable fautive est maintenant "set JAVA_EXE =% JAVA_HOME% / bin / java.exe" - supprimez la partie bin d'ici pour corriger.
Andy Lorenz
2
sudo ln -s /usr/lib/jvm/java-7-oracle/jre /usr/lib/jvm/default-java

Créez un lien symbolique vers le répertoire java par défaut.

Vous pouvez trouver votre répertoire java par

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.
Venkat Kotra
la source
Cette réponse serait améliorée si vous expliquiez ce que fait cette commande et pourquoi elle est nécessaire.
Ian McLaird
2

Avant d'exécuter la commande, essayez d'entrer:

export JAVA_HOME="path_to_java_home"

path_to_java_homeest le dossier où vous vous trouvez bin/java.

Si java est correctement installé, vous pouvez trouver son emplacement en utilisant la commande:

readlink -f $(which java)

N'oubliez pas de retirer bin/javade la fin du chemin tout en le mettant dansJAVA_HOME

Jasper Kinoti
la source
1

J'ai eu un problème avec ça aussi. Il a dit mauvais répertoire quand il était correct. Je viens donc de créer une variable locale avec le nom JAVA_HOME en omettant le fichier final / bin / java. Cela a bien fonctionné pour moi.

Brise-roche
la source
1

Si votre environnement GRADLE_HOME et JAVA_HOME sont correctement définis, vérifiez votre répertoire JDK et assurez-vous que vous avez le fichier java.exe sous le chemin ci-dessous.

C:\Program Files (x86)\Java\jdk1.8.0_181\bin

Comme erreur mentionnée dans le fichier gradle.bat

: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.

Il ne parvient pas à localiser votre installation java. Alors trouve et règle

java.exe

sous %JAVA_HOME%/binsi tout est correct.

Cela fonctionne pour moi (mon compte a été désactivé par le client et leur administrateur a supprimé java.exe de mon répertoire.)

Dur
la source
0

Dans mon dockercontainer (étant minime le problème de ne pas trouver java) était, ce "qui" n'était pas installé. La création d'un projet à l'aide de gradlew a utilisé qui dans ./gradlew pour trouver l'installation de java qui a résolu le problème.

lem-fr
la source
0

[Windows] Comme déjà dit, il ressemble à .bat -file essaie de trouver java.exe à partir de %JAVA_HOME%/bin/java.exedonc il ne le trouve pas car il binest répété deux fois dans path. Supprimez cet extra /binde gradle.bat.

Gradle

O-9
la source
0

L'ajout de lignes ci-dessous dans build.gradle a résolu mon problème.

sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
Sameera De Silva
la source