Błąd React Native: „Nie można ustalić wersji Java z '9.0.1'.”


109

Pracuję na MacOS i dopiero zaczynam react-native .

Jednym z pierwszych kroków do rozpoczęcia jest uruchomienie: react-native run-androidlub react-native run-ios. Ale pojawia się ten błąd:

react-native run-android

Wynik:

Scanning folders for symlinks in /Users/ric/myprojs/albums/node_modules (6ms)
Starting JS server...
Building and installing the app on the device (cd android && ./gradlew installDebug)...

FAILURE: Build failed with an exception.

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

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
Could not install the app on the device, read the error above for details.
Make sure you have an Android emulator running or a device connected and have
set up your Android development environment:
https://facebook.github.io/react-native/docs/android-setup.html

Oto, co otrzymuję, gdy biegam java --version:

java --version

Wynik:

java 9.0.1
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
mbp:albums ric$ java --version
java 9.0.1
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)

Edytować

Moja wersja javac:

javac --version

Wynik:

javac 9.0.1

Masz jakiś pomysł, jak to naprawić?


2
czy możesz javac -versionteż biegać w terminalu, proszę
bennygenel

1
Uważam, że ten problem jest nieco stary, ale może być związany z wersją Java lub Gradle.
bennygenel

Odpowiedzi:


206

W swoim PROJECT_PATH/android/gradle/wrapper/gradle-wrapper.propertiespliku zaktualizuj swójdistributionUrl do następujących:

distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip

Zobacz powiązaną dokumentację dotyczącą dystrybucji gradle


4
powinno znajdować się w folderze app / android / gradle / wrapper / gradle-wrapper.properties
Muhammad Adeel

6
Po zmianie wersji Gradle na twoją sugestię pojawia się kolejny błąd: Nie można zainicjować klasy
com.android.sdklib.repository.AndroidSdkHandler

7
Dlaczego to jednak pomaga? React-Native domyślnie używa gradle-2.14.1 podczas inicjowania nowej aplikacji, więc po co nam inna?
Waltari,

11
otrzymywanie tego błędu po dodaniu tego> javax / xml / bind / annotation / XmlSchema
Milon,

15
Musisz użyć najnowszej wersji Gradle. Na przykład, aby obsługiwać Javę 11, możesz użyćgradle-4.10-all.zip
Andrey Kolpakov


15

Upewnij się, że masz JDK8zainstalowane, a następnie ustawić JAVA_HOMEnaJDK8

na przykład:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home

lub użyj .bash_*plików do ustawienia tej zmiennej


1
Miałem to w moim pliku .zshrc na komputerze Mac: export JAVA_HOME=$(/usr/libexec/java_home) zmiana go na wybranie export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)najnowszej zainstalowanej wersji Java v8 i naprawiono ten sam problem.
Greg Haygood

8
vi ~/.bash_profile

Następnie dodaj następujące wiersze:

export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

Teraz pobierz plik, aby powyższe zmiany były skuteczne w bieżącej powłoce:

source ~/.bash_profile 

1
Ta ostatnia linijka export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)rozwiązała dla mnie sprawę - dzięki!
JohnSalzarulo

7

Na MacOS uruchomiłem następujące polecenia:

brew cask uninstall java
brew tap caskroom/versions
brew cask install java8 "or just brew cask install java to install latest version"

3

Otrzymałem ten błąd, ale dla nowszej wersji Java - 10.0.2.

Aby naprawić mój błąd, wykonałem kroki wymienione @Blacktovichew tym problemie na Github: https://github.com/facebook/react-native/issues/17688

Kiedy otworzyłem androidfolder wewnątrz mojego projektu za pośrednictwem Android Studio, zostałem poproszony Android Gradle plugin update recommended. W tym czasie postępowałem zgodnie z nieco przestarzałym samouczkiem, który nakazał mi kliknąć Don't remind me again for this project.

Jednak zgodnie z @Blacktovichezaleceniami w kwestii github, do której link znajduje się powyżej, czasami konieczna jest aktualizacja wtyczki Gradle. Po aktualizacji musiałem też kliknąć Install Build Tools 27... and sync project(nie pamiętam dokładnej wersji).

Po wykonaniu tych czynności udało mi się pomyślnie uruchomić moją natywną aplikację React na emulatorze Android Studio.

Mam nadzieję, że to komuś pomoże!


1

---- Grudzień 2018 --- zachowaj uwagę --- React Native nie działa z wersjami Java wyższymi niż 8, więc musisz odinstalować swoją 9.0.1wersję. Aby to zrobić, wykonaj następujące polecenia:

cd /Library/Java/JavaVirtualMachines/
ls -l

Zidentyfikuj folder zawierający Twoją wersję Java, a następnie usuń go

sudo rm -rf jdk.x.x_xxx.jdk

Następnie możesz ponownie pobrać i zainstalować Javę 8 z Oracle. Zapoznaj się ze stroną pobierania jdk8


„React Native nie działa z wersjami Java wyższymi niż 8”, absolutnie niepoprawne. Mam teraz kompilację działającą na JDK 13.
Ian Kemp

Moja odpowiedź pochodzi z grudnia 2018 r. Pobierz React Native z 2018 r., A następnie uruchom na JDK 13, a jeśli zadziała, przyjdź tutaj i zaktualizuj swoją odpowiedź.
Guilherme Ferreira

0

Jeśli używasz systemu Windows; Upewnij się, że dodajesz ścieżkę jdk do zmiennej ścieżki środowiska. Następnie otwórz folder Androida z projektu natywnego Reaguj w Android Studio. Automatycznie zaktualizuje niezbędne rzeczy.


0

Zwykle pojawia się ten błąd, gdy zapomnę zbudować projekt za pomocą Android Studio. Prosta synchronizacja i aktualizacja Gradle załatwią sprawę.



0

W systemie Ubuntu należy uruchomić następujące wiersze poleceń w terminalu:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt install oracle-java8-installer
sudo apt install oracle-java8-set-default
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.