Gradle: Impossible de déterminer la version Java à partir de «11 .0.2»

134

J'ai lancé le commentaire suivant:

./gradlew app:installDebug

seulement pour être rencontré avec le journal:

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine java version from '11.0.2'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

Ma version de gradle est la 5.1.1:

------------------------------------------------------------
Gradle 5.1.1
------------------------------------------------------------

Build time:   2019-01-10 23:05:02 UTC
Revision:     3c9abb645fb83932c44e8610642393ad62116807

Kotlin DSL:   1.1.1
Kotlin:       1.3.11
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM:          11.0.2 (Oracle Corporation 11.0.2+9-LTS)
OS:           Mac OS X 10.13.6 x86_64

Je ne sais pas comment procéder (j'ai essayé de mettre à niveau / rétrograder, mais rien n'a fonctionné jusqu'à présent).

MISE À JOUR: Lorsque j'ai couru ./gradlew --version, j'ai obtenu ce qui suit:

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine java version from '11.0.2'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

Mon gradle-wrapper.propertiescontient:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-rc-1-all.zip
lesley2958
la source
5
d'après ce rapport de bogue , est-il possible que votre wrapper gradle soit plus ancien?
Roddy of the Frozen Peas
ma version de gradle est 5.1.1, ce qui, à mon avis, devrait convenir.
lesley2958
2
Vous exécutez la commande ./gradlew qui lance la version gradle associée à ce projet spécifique. Il n'y a aucune garantie que la version du projet est la même que celle que vous avez installée (5.1.1)
tryman
1
Cette information de version est-elle le résultat de gradle --versionou ./gradlew --version? Les projets basés sur Gradle utilisent souvent un wrapper pour permettre à différents développeurs d'utiliser plus facilement la même version de Gradle pour créer le projet; cela rend également les builds plus stables.
Slaw
c'est la version degradle --version
lesley2958

Réponses:

124

Il existe deux applications Gradle différentes dans votre système.

  1. le Gradle à l'échelle du système
    Cette application est appelée par gradle (arguments).

  2. le gradle-wrapper
    Le gradle-wrapper est spécifique à chaque projet et ne peut être appelé que dans le répertoire du projet, en utilisant la commande ./gradlew (arguments).

Votre version gradle à l'échelle du système est 5.1.1 (comme l'OP l'a expliqué dans les commentaires, l'exécution de la commande a gradle --versionrenvoyé la version 5.1.1).

Cependant, l'échec est le résultat d'un appel à gradle-wrapper ( ./gradlew). Pourriez-vous vérifier la version de l'encapsuleur gradle de votre projet? Pour ce faire, exécutez ./gradlew --versiondans le dossier de votre projet, dans le répertoire où se trouvent les fichiers gradlew et gradlew.bat.

Mise à jour 1:
comme l'exécution a ./gradlew --versionéchoué, vous pouvez vérifier manuellement la version de votre wrapper en ouvrant le fichier:

(dossier racine du projet) /gradle/wrapper/gradle-wrapper.properties

avec un simple éditeur de texte. Le "distributionUrl" à l'intérieur devrait nous dire quelle est la version du wrapper.

Mise à jour 2: Conformément à la question mise à jour de l'OP, la version du gradle-wrapper est 4.1RC1.
Gradle a ajouté la prise en charge de JDK 11 dans Gradle 5.0 . Par conséquent, comme 4.1RC ne prend pas en charge le JDK 11, c'est définitivement un problème.

La manière la plus évidente serait de mettre à jour le gradle-wrapper de votre projet vers la version 5.0. Cependant, avant de mettre à jour, essayez d'exécuter gradle app:installDebug. Cela utilisera votre Gradle installé à l'échelle du système dont la version est 5.1.1 et prend en charge Java 11. Voyez si cela fonctionne. Si c'est le cas, alors votre buildscript (fichier build.gradle) n'est pas affecté par les changements de rupture entre v.4.1RC1 et v.5.1.1 et vous pouvez alors mettre à jour votre wrapper en exécutant à partir de la ligne de commande dans le dossier de votre projet: gradle wrapper --gradle-version=5.1.1[ *].

S'il gradle app:installDebugne s'exécute pas correctement, vous devez peut-être mettre à niveau votre buildscript Gradle. Pour la mise à jour de la v.4.1RC1 vers la 5.1.1, le projet Gradle fournit un guide ( 1 , 2 ) avec les changements de rupture et les fonctionnalités obsolètes entre les versions mineures, afin que vous puissiez mettre à jour progressivement vers la dernière version.

Alternativement, si pour une raison quelconque vous ne pouvez pas ou ne voulez pas mettre à jour votre buildscript Gradle, vous pouvez toujours choisir de rétrograder votre version Java vers une version prise en charge par Gradle 4.1RC1.

[*] Comme indiqué correctement dans une autre réponse de @lupchiazoem, utilisez gradle wrapper --gradle-version=5.1.1(et non pas ./gradlewcomme je l'avais initialement publié par erreur). La raison en est que Gradle fonctionne sur Java. Vous pouvez mettre à jour votre Gradle-wrapper en utilisant n'importe quelle distribution Gradle fonctionnelle, soit votre Gradle installé à l'échelle du système, soit le Gradle-wrapper lui-même. Cependant, dans ce cas, votre wrapper n'est pas compatible avec votre version Java installée, vous devez donc utiliser le Gradle à l'échelle du système (c'est-à-dire gradleet non ./gradlew).

tryman
la source
1
@tryman merci! pour moi, c'est votre mise à jour 2 qui m'a aidé. En règle générale, je pense que je vérifierais la version gradle à venir.
Avid Programmer
vous n'indiquez pas exactement quelle est la CAUSE de l'erreur. Différentes versions?
João Pimentel Ferreira
Quoi? Je pensais que la mise à jour 2 était assez claire. Elle essayait d'exécuter le wrapper Gradle de la version 4.1RC1 avec JDK11. Gradle a ajouté la prise en charge de JDK11 à la version 5.0. Alors, quelle est votre confusion @ JoãoPimentelFerreira? C'était la cause, le reste est la solution pour mettre à jour le wrapper du projet vers une version ultérieure qui prend en charge JDK11.
tryman
1
Maintenant c'est à mon tour d'être confus. Si vous avez en effet à la fois le wrapper gradle dans votre dossier de projet et une installation Gradle à l'échelle du système, la solution étape par étape ci-dessus devrait fonctionner pour vous. Avez-vous essayé de mettre à niveau votre wrapper en exécutant dans le dossier de votre projet la commande de mise à jour gradle wrapper --gradle-version=5.0? Remplacez 5.0 par la version souhaitée, je pense que maintenant la dernière est la 5.4
tryman
1
Cependant, un mot d'avertissement: entre la version 3.3 de votre wrapper et n'importe quelle version 5.x, il y aura forcément des changements de rupture que vous pourriez rencontrer ou non. C'est pourquoi, dans ma réponse, je vous demande de commencer par créer votre projet avec votre Gradle à l'échelle du système pour vérifier que tout fonctionne correctement avec la version de 5.x que vous souhaitez mettre à niveau avant de mettre à jour le wrapper de votre projet. Si vous êtes pressé (je sens l'urgence dans votre ton), vous pouvez toujours utiliser le gradle du système directement ou rétrograder vers un JDK plus ancien et rattraper la mise à niveau de votre wrapper plus tard.
tryman
34

Comme distributionUrlil pointe toujours vers une version plus ancienne, mettez à niveau le wrapper en utilisant:

gradle wrapper --gradle-version 5.1.1

Remarque: utilisez gradleet nongradlew

lupchiazoem
la source
Ça marche. La commande met à jour ma version de wrapper gradle. Merci.
Daniel
Ou simplement remplacer la version de la gradle/wrapper/gradle-wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip version 6 par JDK12 ne semble pas fonctionner. 5.1.1 fonctionne bien, merci.
Liam Kernighan
11

Dans mon cas, la JAVA_HOMEvariable a été définie sur /usr/lib/jvm/jdk-11.0.2/. Il suffisait de désactiver la variable comme ceci:

$ export JAVA_HOME=

dr0i
la source
1
Cela a aussi résolu mon problème. jenv a peut-être commencé mes problèmes au départ.
jokarl
pour moi a GRADLE_HOMEété mis à jour (à 5.4.1 ``) mais pas la version gradle (pointant toujours vers une version plus ancienne 4.3), ce qui est étrange mais le redémarrage du terminal a bien fonctionné. quelque chose de bizarre avecsource ~/.bash_profile
prieragupd
7

La mise gradle/wrapper/gradle-wrapper.propertiesà jour avec la version suivante l'a corrigé pour moi:

distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
Manuel Schmitzberger
la source
6

tl; dr : rétrograder java en exécutantupdate-alternatives


La version de mon système gradle était 4.4.1 et la version du wrapper gradle était 4.0. Après avoir exécuté la commande donnée par plusieurs autres réponses:

gradle wrapper --gradle-version 4.4.1

J'ai toujours eu la même erreur:

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine java version from '11.0.4'.

Il s'avère que java 11 n'était pas pris en charge avant la gradle 4.8, et mes référentiels logiciels n'avaient que 4.4.1. (De plus, la mise à niveau vers une version plus récente de gradle aurait pu être incompatible avec le package que j'essayais de compiler.)

La réponse était de rétrograder java. Mon système avait en fait java8 déjà installé, et il était facile de basculer entre les versions de java en exécutant cette commande et en suivant les instructions:

sudo update-alternatives --config java
craq
la source
5

Parce que la version wrapper ne prend pas en charge 11+, vous pouvez faire une astuce simple pour tricher pour toujours la nouvelle version d'InteliJ.

  press3x Shift -> type "Switch Boot JDK" -> and change for java 8. 

https://blog.jetbrains.com/idea/2015/05/intellij-idea-14-1-4-eap-141-1192-is-available/

Ou si vous souhaitez travailler avec java 11+, vous devez simplement mettre à jour la version du wrapper vers 4.8+

SuperAndrew
la source
1
Attention, N'essayez PAS cette solution sur Android Studio. Je vais le casser.
Mauricio Sartori
3

Pour résumer la réponse longue, mettez à niveau votre gradlewà l'aide de l' gradleoutil système . Notez que la mise à niveau ci-dessous fonctionne même si la gradleversion de votre système est < 5.

gradle wrapper --gradle-version=5.1.1
Rocky Inde
la source
3

J'ai eu le même problème ici. Dans mon cas, j'ai besoin d'utiliser une ancienne version de JDK et j'utilise sdkmanager pour gérer les versions de JDK, j'ai donc changé la version de la machine virtuelle en 1.8.

sdk use java 8.0.222.j9-adpt

Après cela, l'application s'exécute comme prévu ici.

Maciel Bombonato
la source
1

J'ai résolu cela en cliquant sur Fichier -> Structure du projet, puis j'ai changé l'emplacement du JDK pour utiliser le JDK intégré (recommandé)

Derrick Lamptey
la source
0

J'ai rencontré un problème similaire. J'ai supprimé ceux-ci:

  • bibliothèques et caches du dossier .idea (YourApp> .idea> ..) ET
  • contenu du dossier de construction.

    puis reconstruisez.

* N'OUBLIEZ PAS DE SAUVEGARDER VOTRE PROJET D'ABORD *

KHAN
la source
0

J'ai rencontré le même problème dans Ubuntu 18.04.3 LTS. Dans mon cas, apt a installé la version 4.4.1 de gradle. La version java déjà installée était 11.0.4

Le message de construction que j'ai reçu était

Could not determine java version from '11.0.4'.

À l'époque, la plupart des documents en ligne faisaient référence à la version 5.6 de gradle, j'ai donc fait ce qui suit:

sudo add-apt-repository ppa:cwchien/gradle
sudo apt update
sudo apt upgrade gradle

Ensuite j'ai répété l'initialisation du projet (en utilisant "gradle init" avec les valeurs par défaut). Après cela, "./gradlew build" a fonctionné correctement.

J'ai lu plus tard un commentaire concernant un changement de format de la sortie de "java --version" qui provoquait une rupture de gradle, qui a été corrigé dans une version ultérieure de gradle.

MgFrobozz
la source
0

Dans mon cas, j'essayais de créer et d'obtenir un fichier APK pour un ancien projet Unity 3D (afin de pouvoir jouer au jeu sur mon téléphone Android). J'utilisais la version la plus récente d'Android Studio et tous les packages SDK que je pouvais télécharger via SDK Manager dans Android Studio. Les packages SDK se trouvaient dans

C:/Users/Onat/AppData/Local/Android/Sdk 

Et le message d'erreur que j'ai reçu était le même sauf la version JDK (Java Development Kit) "jdk-12.0.2". JDK était situé à

C:\Program Files\Java\jdk-12.0.2

Et la variable d'environnement dans Windows était JAVA_HOME: C: \ Program Files \ Java \ jdk-12.0.2

Après 3 heures de recherche, j'ai découvert que Unity ne prend pas en charge JDK 10. Comme indiqué dans https://forum.unity.com/threads/gradle-build-failed-error-could-not-determine-java-version-from-10-0-1.532169/. Ma suggestion est:

  1. Désinstallez le JDK indésirable si vous en avez déjà un. https://www.java.com/tr/download/help/uninstall_java.xml
  2. Se diriger vers http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  3. Connectez-vous / ouvrez un compte Oracle si vous n'êtes pas déjà connecté.
  4. Téléchargez le JDK 8 plus ancien mais fonctionnel pour la configuration de votre ordinateur (32 bits / 64 bits, Windows / Linux, etc.)
  5. Installez le JDK. Souvenez-vous du chemin d'installation. ( https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/ )
  6. Si vous utilisez Windows, ouvrez les variables d'environnement et modifiez le chemin Java via un clic droit Computer/This PC>Properties>Advanced System Settings>Environment Variables>New>Variable Name: JAVA_HOME>Variable Value: [YOUR JDK Path, Mine was "C:\Program Files\Java\jdk1.8.0_221"]
  7. Dans Unity 3D, appuyez sur Edit > Preferences > External Tools and fill in the JDK path (Mine was "C:\Program Files\Java\jdk1.8.0_221").
  8. De plus, dans la même fenêtre contextuelle, modifiez le chemin du SDK. (Obtenez-le Android Studio > SDK Manager > Android SDK > Android SDK Location.)
  9. Si nécessaire, redémarrez votre ordinateur pour que les modifications prennent effet.
Onat Korucu
la source
0

accéder au fichier de projet .. gradle / wrapper / gradlewrapper.properties

là, vous pouvez changer la valeur de distributionurlen quelle que soit la dernière version. (Trouvé sur docs.gradle.org)

atreyHazelHispanique
la source
0

J'étais confronté au même problème dans la configuration de Docker, alors que j'essayais d'installer Gradle-2.4avec JDL 11.0.7. Je dois installer une version ultérieure pour résoudre le problème.

Voici le Dockerfile de travail

FROM openjdk:11.0.7-jdk
RUN apt-get update && apt-get install -y unzip
WORKDIR /gradle
RUN curl -L https://services.gradle.org/distributions/gradle-6.5.1-bin.zip -o gradle-6.5.1-bin.zip
RUN unzip gradle-6.5.1-bin.zip
ENV GRADLE_HOME=/gradle/gradle-6.5.1
ENV PATH=$PATH:$GRADLE_HOME/bin
RUN gradle --version
Adiii
la source