Gradle: nie można określić wersji Java z „11 .0.2”

134

Uruchomiłem następujący komentarz:

./gradlew app:installDebug

tylko do spełnienia z dziennikiem:

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

Moja wersja Gradle to 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

Nie jestem pewien, jak postępować (próbowałem zaktualizować / obniżyć wersję, ale jak dotąd nic nie zadziałało).

AKTUALIZACJA: Kiedy biegałem ./gradlew --version, otrzymałem następujące informacje:

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

Moje gradle-wrapper.propertieszawiera:

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
źródło
5
zgodnie z tym raportem o błędzie , czy możliwe jest, że twój wrapper gradle jest starszy?
Roddy of the Frozen Peas
moja wersja gradle to 5.1.1, co moim zdaniem powinno być w porządku.
lesley2958
2
Uruchamiasz polecenie ./gradlew, które inicjuje wersję gradle powiązaną z tym konkretnym projektem. Nie ma gwarancji, że wersja projektu jest taka sama jak ta, którą zainstalowałeś (5.1.1)
tryman
1
Czy ta informacja o wersji jest wynikiem gradle --versionlub ./gradlew --version? Projekty oparte na Gradle często używają opakowania, aby ułatwić różnym programistom użycie tej samej wersji Gradle do zbudowania projektu; dzięki temu kompilacje są bardziej stabilne.
Slaw
to jest wersjagradle --version
lesley2958,

Odpowiedzi:

124

W twoim systemie są dwie różne aplikacje Gradle.

  1. Gradle całego systemu
    aplikacja ta jest wywoływana przez gradle (arguments).

  2. the gradle-wrapper
    Gradle-wrapper jest specyficzny dla każdego projektu i można go wywołać tylko wewnątrz katalogu projektu, używając polecenia ./gradlew (arguments).

Twoja ogólnosystemowa wersja gradle to 5.1.1 (jak wyjaśnił OP w komentarzach, uruchomienie polecenia gradle --versionzwróciło wersję 5.1.1).

Jednak niepowodzenie jest wynikiem wywołania metody gradle-wrapper ( ./gradlew). Czy możesz sprawdzić wersję opakowania gradle projektu? Aby to zrobić, wykonaj ./gradlew --versionw folderze projektu, w katalogu, w którym znajdują się pliki gradlew i gradlew.bat.

Aktualizacja 1:
Ponieważ uruchomienie ./gradlew --versionnie powiodło się, możesz ręcznie sprawdzić wersję opakowania, otwierając plik:

(folder główny projektu) /gradle/wrapper/gradle-wrapper.properties

za pomocą prostego edytora tekstu. Znajdujący się wewnątrz atrybut „distributionUrl” powinien nam powiedzieć, jaka jest wersja opakowania.

Aktualizacja 2: Zgodnie ze zaktualizowanym pytaniem OP, wersja programu gradle-wrapper to 4.1RC1.
Gradle dodał obsługę JDK 11 w Gradle 5.0 . Dlatego, ponieważ 4.1RC nie obsługuje JDK 11, jest to zdecydowanie problem.

Oczywistym sposobem byłoby zaktualizowanie opakowania gradle projektu do wersji 5.0. Jednak przed aktualizacją spróbuj uruchomić gradle app:installDebug. Spowoduje to użycie programu Gradle zainstalowanego w całym systemie w wersji 5.1.1 i obsługującego język Java 11. Sprawdź, czy to działa. Jeśli tak, to na skrypt buildscript (plik build.gradle) nie wpływają żadne istotne zmiany między wersją 4.1RC1 a wersją 5.1.1 i możesz zaktualizować opakowanie, wykonując polecenie z wiersza poleceń w folderze projektu: gradle wrapper --gradle-version=5.1.1[ *].

Jeśli gradle app:installDebugnie działa poprawnie, być może musisz zaktualizować skrypt kompilacji Gradle. W przypadku aktualizacji z wersji 4.1RC1 do 5.1.1 projekt Gradle zapewnia przewodnik ( 1 , 2 ) zawierający istotne zmiany i przestarzałe funkcje między mniejszymi wydaniami, dzięki czemu można stopniowo aktualizować do najnowszej wersji.

Ewentualnie, jeśli z jakiegoś powodu nie możesz lub nie chcesz zaktualizować skryptu kompilacji Gradle, zawsze możesz zdecydować się na zmianę wersji Java na wersję obsługiwaną przez Gradle 4.1RC1.

[*] Jak słusznie wskazał w innej odpowiedzi @lupchiazoem, użyj gradle wrapper --gradle-version=5.1.1(a nie ./gradlewtak, jak pierwotnie przez pomyłkę tam zamieściłem). Powodem jest to, że Gradle działa w Javie. Możesz zaktualizować swój Gradle-wrapper używając dowolnej działającej dystrybucji Gradle, zainstalowanej w całym systemie Gradle lub samego Gradle-wrappera. Jednak w tym przypadku twój wrapper nie jest kompatybilny z zainstalowaną wersją Javy, więc musisz użyć systemowego Gradle (aka gradlei nie ./gradlew).

tryman
źródło
1
@tryman thanks! dla mnie pomogła mi Twoja aktualizacja 2. Jako ogólną zasadę myślę, że sprawdziłbym wersję Gradle, która będzie dostępna.
Avid Programmer
nie podajesz dokładnie, co jest PRZYCZYNĄ błędu. Różne wersje?
João Pimentel Ferreira
Co? Myślałem, że aktualizacja 2 była całkiem jasna. Próbowała uruchomić opakowanie Gradle wersji 4.1RC1 z JDK11. Gradle dodał obsługę JDK11 w wersji 5.0. Więc jakie jest twoje zamieszanie @ JoãoPimentelFerreira? To była przyczyna, reszta to rozwiązanie, jak zaktualizować opakowanie projektu do nowszej wersji, która obsługuje JDK11.
tryman
1
Teraz moja kolej, aby się pogubić. Jeśli rzeczywiście masz w folderze projektu zarówno opakowanie gradle, jak i ogólnosystemową instalację Gradle, powyższe rozwiązanie krok po kroku powinno działać dla Ciebie. Czy próbowałeś zaktualizować opakowanie, wykonując w folderze projektu polecenie aktualizacji gradle wrapper --gradle-version=5.0? Zastąp 5.0 żądaną wersją, myślę, że teraz najnowsza to 5.4
tryman
1
Jednak uwaga: między wersją 3.3 twojego opakowania a dowolną wersją 5.x są pewne istotne zmiany, które możesz napotkać lub nie. Dlatego w mojej odpowiedzi sugeruję, aby najpierw zbudować projekt za pomocą programu Gradle dla całego systemu, aby sprawdzić, czy wszystko działa płynnie z wersją 5.x, do której chcesz zaktualizować, przed zaktualizowaniem opakowania projektu. Jeśli się spieszysz (wyczuwam pilność w twoim tonie), zawsze możesz użyć gradle systemowego bezpośrednio lub przejść na starszą wersję JDK i nadrobić zaległości w aktualizacji wrappera później.
tryman
34

Jak distributionUrlwciąż wskazuje na starszą wersję, zaktualizuj wrapper używając:

gradle wrapper --gradle-version 5.1.1

Uwaga: użyj, gradlea niegradlew

lupchiazoem
źródło
To działa. Polecenie aktualizuje moją wersję opakowania gradle. Dzięki.
Daniel
Lub po prostu zamień wersję w gradle/wrapper/gradle-wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip wersji 6 na JDK12 nie działa. 5.1.1 działa dobrze, dziękuję.
Liam Kernighan,
11

W moim przypadku JAVA_HOMEzmienna została ustawiona na /usr/lib/jvm/jdk-11.0.2/. Wystarczyło rozbroić zmienną w ten sposób:

$ export JAVA_HOME=

dr0i
źródło
1
To również rozwiązało mój problem. jenv mógł na początku wywołać moje problemy.
jokarl
dla mnie GRADLE_HOMEzostał zaktualizowany (do 5.4.1 ''), ale nie wersja gradle (nadal wskazuje na starszą wersję 4.3), co jest dziwne, ale ponowne uruchomienie terminala działało dobrze. coś dziwnegosource ~/.bash_profile
prayagupd
7

Aktualizacja gradle/wrapper/gradle-wrapper.propertiesza pomocą następującej wersji rozwiązała problem:

distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
Manuel Schmitzberger
źródło
6

tl; dr : obniż wersję javy, uruchamiającupdate-alternatives


Moja wersja gradle w systemie to 4.4.1, a wersja wrappera to 4.0. Po uruchomieniu polecenia podanego przez kilka innych odpowiedzi:

gradle wrapper --gradle-version 4.4.1

Nadal miałem ten sam błąd:

FAILURE: Build failed with an exception.

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

Okazuje się, że java 11 nie była obsługiwana do gradle 4.8, a moje repozytoria oprogramowania miały tylko 4.4.1. (Ponadto aktualizacja do nowszej wersji Gradle mogła być niekompatybilna z pakietem, który próbowałem skompilować).

Odpowiedzią było obniżenie wersji java. Mój system faktycznie miał już zainstalowany java8 i łatwo było przełączać się między wersjami java, uruchamiając to polecenie i postępując zgodnie z instrukcjami:

sudo update-alternatives --config java
craq
źródło
5

Ponieważ wersja wrapper nie obsługuje 11+, możesz zrobić prostą sztuczkę, aby na zawsze oszukać nowszą wersję 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/

Lub jeśli chcesz pracować z java 11+, wystarczy zaktualizować wersję wrappera do 4.8+

SuperAndrew
źródło
1
Tylko uwaga NIE próbuj tego rozwiązania w Android Studio. Złamię to.
Mauricio Sartori
3

Krótko mówiąc, zaktualizuj gradlewza pomocą gradlenarzędzia systemowego . Zwróć uwagę, że poniższe uaktualnienie działa, nawet jeśli gradlewersja twojego systemu to < 5.

gradle wrapper --gradle-version=5.1.1
Rocky Inde
źródło
3

Tutaj miałem ten sam problem. W moim przypadku muszę użyć starej wersji JDK i używam sdkmanagera do zarządzania wersjami JDK, więc zmieniłem wersję maszyny wirtualnej na 1.8.

sdk use java 8.0.222.j9-adpt

Następnie aplikacja działa tutaj zgodnie z oczekiwaniami.

Maciel Bombonato
źródło
1

Rozwiązałem to, klikając Plik -> Struktura projektu, a następnie zmieniłem lokalizację JDK, aby użyć osadzonego JDK (zalecane)

Derrick Lamptey
źródło
0

Wpadłem na podobny problem. Usunąłem te:

  • biblioteki i pamięci podręczne z folderu .idea (TwojaAplikacja> .idea> ..) ORAZ
  • zawartość folderu kompilacji.

    następnie odbudować.

* NIE ZAPOMNIJ W PIERWSZEJ KOPII ZAPASOWEJ SWOJEGO PROJEKTU *

CHAN
źródło
0

Napotkałem ten sam problem w Ubuntu 18.04.3 LTS. W moim przypadku apt zainstalował gradle w wersji 4.4.1. Zainstalowana już wersja Java to 11.0.4

Otrzymałem wiadomość dotyczącą kompilacji

Could not determine java version from '11.0.4'.

W tamtym czasie większość dokumentów online odwoływała się do wersji 5.6 programu Gradle, więc wykonałem następujące czynności:

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

Następnie powtórzyłem inicjalizację projektu (używając "gradle init" z domyślnymi ustawieniami). Po tym "./gradlew build" działał poprawnie.

Później przeczytałem komentarz dotyczący zmiany formatu wyjścia z "java --version", która spowodowała zerwanie gradle, co zostało naprawione w późniejszej wersji gradle.

MgFrobozz
źródło
0

W moim przypadku próbowałem zbudować i pobrać APK dla starego projektu Unity 3D (aby móc grać w tę grę na moim telefonie z Androidem). Używałem najnowszej wersji Android Studio i wszystkich pakietów SDK, które mogłem pobrać za pośrednictwem Menedżera SDK w Android Studio. Pakiety SDK znajdowały się w

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

Komunikat o błędzie, który otrzymałem, był taki sam, z wyjątkiem wersji JDK (Java Development Kit) „jdk-12.0.2”. JDK znajdował się w

C:\Program Files\Java\jdk-12.0.2

Zmienną środowiskową w systemie Windows była JAVA_HOME: C: \ Program Files \ Java \ jdk-12.0.2

Po 3 godzinach poszukiwań odkryłem, że Unity nie obsługuje JDK 10. Jak powiedziano w https://forum.unity.com/threads/gradle-build-failed-error-could-not-determine-java-version-from-10-0-1.532169/. Moja sugestia to:

  1. Odinstaluj niechciany JDK, jeśli masz już zainstalowany. https://www.java.com/tr/download/help/uninstall_java.xml
  2. Zmierzać do http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  3. Zaloguj się do / otwórz konto Oracle, jeśli nie jesteś jeszcze zalogowany.
  4. Pobierz starszą, ale funkcjonalną wersję JDK 8 do konfiguracji komputera (32-bitowy / 64-bitowy, Windows / Linux itp.)
  5. Zainstaluj pakiet JDK. Zapamiętaj ścieżkę instalacji. ( https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/ )
  6. Jeśli używasz systemu Windows, otwórz zmienne środowiskowe i zmień ścieżkę Java poprzez kliknięcie prawym przyciskiem myszy My 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. W Unity 3D naciśnij Edit > Preferences > External Tools and fill in the JDK path (Mine was "C:\Program Files\Java\jdk1.8.0_221").
  8. Ponadto w tym samym wyskakującym okienku edytuj ścieżkę SDK. (Zdobądź to od Android Studio > SDK Manager > Android SDK > Android SDK Location.)
  9. W razie potrzeby uruchom ponownie komputer, aby zmiany odniosły skutek.
Onat Korucu
źródło
0

dostałem się do pliku projektu .. gradle / wrapper / gradlewrapper.properties

tam możesz zmienić wartość distributionurlna zawsze ostatnią wersję. (Znalezione na docs.gradle.org)

atreyHazelHispanic
źródło
0

Miałem ten sam problem w konfiguracji Dockera, gdy próbowałem zainstalować Gradle-2.4z JDL 11.0.7. Muszę zainstalować późniejszą wersję, aby naprawić problem.

Oto działający plik Dockerfile

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
źródło