Nie można znaleźć lub załadować klasy głównej org.gradle.wrapper.GradleWrapperMain


166

Sprzątałam cały projekt usuwając lokalnych katalogów, takich jak ~/.gradle, ~/.m2 ~./androida ~/workspace/project/.gradlei chosing File -> Invalidate Caches / Restart...w Android Studio. Teraz wykonanie polecenia ./gradlewprowadzi do następującego wyniku:

usr$ ./gradlew tasks
Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain

Nie trzeba dodawać, że usunąłem za dużo, pytanie brzmi, jak można to ponownie naprawić? Czy masz jakieś pomysły, jak to naprawić?


4
Powinieneś móc uruchomić gradle wrapperponownie, aby ponownie wygenerować brakujący kod ... przy założeniu, że nie masz konfiguracji kontroli źródła.
— cjstehno

Czy masz zainstalowany gradle na swojej maszynie? Możesz spróbować wywołać zwykły gradle zamiast gradlew, prawdopodobnie powinno również przywrócić opakowanie gradle.
— RaGe

Odpowiedzi:


134

Brakuje Twojego opakowania gradle, jest ono uszkodzone lub uszkodzone.

Co to jest otoka gradle:
gradlew to plik wykonywalny otoki gradle - skrypt wsadowy w systemie Windows i skrypt powłoki w innych miejscach. Wywołany skrypt opakowujący pobiera zdefiniowaną wersję gradle i wykonuje ją. Rozprowadzając opakowanie wraz z projektem, każdy może z nim pracować bez konieczności wcześniejszego instalowania Gradle. Co więcej, użytkownicy kompilacji mają gwarancję, że będą używać wersji Gradle, z którą kompilacja została zaprojektowana.

Przywracanie opakowania gradle:
Kiedyś trzeba było dodać wrapperzadanie do pliku build.gradle, aby przywrócić opakowanie gradle i wszystkie jego zależności. Na przykład:

task wrapper(type: Wrapper) {
    gradleVersion = '4.1'
}

Nowsze wersje gradle tego nie wymagają. Jest to teraz zadanie wbudowane. Po prostu biegnij:

gradle wrapper

Możesz także podać dodatkowe flagi, aby określić wersje itp

gradle wrapper --gradle-version 6.2 --distribution-type all

Po uruchomieniu tego zadania skrypt opakowania gradle i wymagane pliki jar są dodawane do folderów źródłowych. Właściwości są przechowywane w gradle / wrapper / gradle-wrapper.properties

(Może być konieczne lokalne zainstalowanie Gradle, aby uruchomić to. brew install gradleNa przykład na komputerze Mac. Zobacz bardziej szczegółowe instrukcje tutaj )

Dlaczego w ogóle go brakowało?
Wygląda na to, że OP usunął coś, od czego zależy opakowanie gradle.

Ale częstym powodem jest to, że wpis .gitignore zapobiega sprawdzaniu słoików opakowujących w git. Zwróć uwagę, że w efekcie .gitignore może znajdować się w folderze źródłowym lub globalnym w folderze domowym użytkownika lub w globalnej konfiguracji git. Często *.jarwpis w .gitignore.

Możesz dodać wyjątek dla plików jar programu Gradlew w formacie .gitignore

*.jar
!gradle/wrapper/gradle-wrapper.jar

lub wymuś dodanie słoika do gita

git add -f gradle/wrapper/gradle-wrapper.jar

ref: Gradle Wrapper


1
Dziękuję Ci bardzo!
— SePröbläm

8
Inną możliwą przyczyną tego błędu jest to, że plik gradle / wrapper / gradle-wrapper.jar nie jest wykonywalny, np. Jeśli skopiowałeś pliki z Windowsa ...
— centic

Miałem ten przypadek i ostatecznie wykonanie gradlew.bat bez argumentów naprawiło to. Nie wiem dlaczego, ale warto spróbować.
— Alwyn Schoeman

207

Oprócz odpowiedzi @ RaGe może być sytuacja, z którą miałem do czynienia, gdy miałem globalne ignorowanie gita, które ignorowało .jarpliki, więc słoik gradle wrapper nigdy nie został zatwierdzony. W ten sposób otrzymałem ten błąd na serwerze Jenkins po próbie /var/lib/jenkins/my_project/gradlew build. Musiałem wyraźnie wymusić dodanie słoika, a następnie zatwierdzić:

git add -f gradle/wrapper/gradle-wrapper.jar

17
To był rzeczywiście problem. Nie zdawałem sobie sprawy, że mam globalny .gitignore.
— amey91

1
Niezłe. Tak też było ze mną.
— Brendan,

To był dokładnie mój problem ... Dzięki stary!
— TheyCallMeCz

Pracuję nad CI / CD w GitHub Actions i to było dla mnie to. Dziękuję Ci!
— Andi

43

U mnie zadziałało pierwsze uruchomienie:

 gradle wrapper

Po udanej kompilacji mogłem biec

./gradlew assembleRelease

Uwaga: aby móc uruchomić gradle wrapperpierwszy bieg brew install gradle. Jeśli instalacja zakończyła się pomyślnie, uruchom gradle wrapperz katalogu głównego projektu.

Źródło i podziękowania: http://gradle.org/docs/current/userguide/gradle_wrapper.html i https://stackoverflow.com/users/745574/rage


1
W przypadku, gdy to polecenie nie działa, na AS znajduje się panel Gradle po prawej stronie. KliknijGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
— Jemshit Iskenderov

Pracuje dla mnie.
— negrotico19

Tak, miałem ten sam problem w projekcie springBoot w IntelliJ IDE, ta sugestia rozwiązała problem. Dziękuję @niklasingvar
— Ermias K

41

W moim przypadku było to globalne .gitignore, jak wyjaśniono w odpowiedzi @ HankCa .

Zamiast na siłę dodawać słoik, o czym musisz pamiętać w każdym projekcie Gradle, dodałem zastąpienie, aby ponownie uwzględnić słoik opakowania w moim globalnym .gitignore:

*.jar
!gradle/wrapper/gradle-wrapper.jar

Jest to dla mnie przydatne, ponieważ mam wiele projektów korzystających z Gradle; Git przypomni mi teraz o dołączeniu słoika opakowania.

To nadpisanie będzie działało tak długo, jak żadne katalogi powyżej gradle-wrapper.jar(takie jak gradlei wrapper) nie będą ignorowane - git nie zejdzie do ignorowanych katalogów ze względu na wydajność .


Tak, to jest ten sam problem w moim przypadku
— silentsudo

22

W moim przypadku opuściłem wrapperpodfolder podczas kopiowania gradlefolderu i otrzymałem ten sam błąd.

Nie można znaleźć lub załadować klasy głównej org.gradle.wrapper.GradleWrapperMain

upewnij się, że masz poprawną strukturę folderów, jeśli kopiujesz opakowanie z innej lokalizacji.

├── build.gradle
├── gradle
│ └── opakowanie
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle

Dlaczego miałbyś kopiować opakowanie? Samo wykonanie gradle wrapperda dokładnie taki sam wynik;)
— Xerus

@Xerus, w niektórych środowiskach korporacyjnych istnieją ograniczenia sieciowe, których nie można swobodnie pobierać pakietów. w takim przypadku musisz skopiować / przenieść.
— yantaq

8

Prawdopodobnie brakuje gradle-wrapper.jarpliku w katalogu gradle/wrapperw Twoim projekcie.

Musisz wygenerować ten plik za pomocą tego skryptu w pliku build.gradle, jak poniżej,

task wrapper(type: Wrapper) {
   gradleVersion = '2.0' // version required
}

i uruchom zadanie:

gradle wrapper

Z Gradle 2.4 (lub wyższym) możesz skonfigurować opakowanie bez dodawania dedykowanego zadania:

gradle wrapper --gradle-version 2.3

LUB

gradle wrapper --gradle-distribution-url https://myEnterpriseRepository:7070/gradle/distributions/gradle-2.3-bin.zip

Wszystkie szczegóły można znaleźć w tym linku


Wiele błędów w systemie Windows 10 dla „gradle wrapper --gradle-distribution-url myEnterpriseRepository: 7070 / gradle / distributions /… ”
— Love and peace - Joe Codeswell

Tak, brakuje treści gradle/wrapperreż. Można temu zaradzić, uruchamiając gralde wrapperzgodnie z opisem.
— Yuri

W przypadku, gdy to polecenie nie działa, na AS znajduje się panel Gradle po prawej stronie. KliknijGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
— Jemshit Iskenderov

4

możesz również skopiować plik gradlew.bat do folderu głównego i skopiować plik gradlew-wrapper do folderu gradlew.

to działa dla mnie.


4

Postępowałem zgodnie z odpowiedziami z góry, kiedy napotkałem to. A jeśli masz ten problem, pamiętaj, aby wymusić wypchnięcie zarówno plików jar, jak i properties. Po tych dwóch przestałem otrzymywać ten problem.

git add -f gradle/wrapper/gradle-wrapper.jar
git add -f gradle/wrapper/gradle-wrapper.properties

3

W moim przypadku (w systemie Windows 10) gradlew.bat ma następujące wiersze kodu w:

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

Zmienna APP_HOME jest zasadniczo folderem głównym gradles dla projektu, więc jeśli zostanie w jakiś sposób pomieszany, otrzymasz:

Błąd: nie można znaleźć lub załadować klasy głównej org.gradle.wrapper.GradleWrapperMain

Dla mnie było to pomieszane, ponieważ struktura folderów mojego projektu zawierała znak ampersand (&). Np. C: \ Test & Dev \ MyProject

Tak więc gradel próbował znaleźć plik gradle-wrapper.jar w folderze głównym C: \ Test (usuwając wszystko po znaku „&” i włączając go)

Znalazłem to, dodając następującą linię poniżej ustawionej linii APP_HOME =% DIRNAME% powyżej. Następnie uruchomiłem plik nietoperza, aby zobaczyć wynik.

echo "%APP_HOME%"

Pojawi się kilka innych „znaków specjalnych”, które mogą spowodować przerwanie ścieżki / katalogu.


2

Widziałem ten sam błąd, ale w moim przypadku była to nowa instalacja Gita bez zainstalowanego LFS. Przedmiotowe repozytorium zostało utworzone przy użyciu LFS, a plik gradle-wrapper.jar był w LFS, więc zawierał tylko wskaźnik do serwera LFS. Rozwiązanie było proste, wystarczy uruchomić:

git lfs install

I świeży klon załatwił sprawę. Przypuszczam, że git lfs pulllub po prostu git pullmogłaby pomóc, ale osoba z problemem zdecydowała się zamiast tego zrobić nowy klon.


1

@HankCa rozwiązał problem również w moim przypadku. Postanowiłem zmienić moje niebezpieczne **/*.jarignorowanie na oczywiste, jak src/**/lib/*.jaruniknąć takich problemów w przyszłości. Ignorowanie zaczynające się od ** / * jest trochę zbyt niebezpieczne, przynajmniej dla mnie. I zawsze dobrze jest poznać ideę wiersza .gitignore, patrząc na niego.


1

W moim przypadku plik gradle-wrapper.jar został uszkodzony po zastąpieniu kilku plików. Przywrócenie oryginalnej wersji rozwiązało problem.


1
Hej @ Neek Witaj w przepełnieniu stosu, proszę, odpowiedz na nowe pytanie, na to pytanie zostało już zaakceptowanych więcej niż 4 odpowiedzi, więc skoncentruj się na tej części.
— Dilip

2
Pewnie! wszystkie powyższe zaakceptowane odpowiedzi nie pomogły, więc odłożyłem to, co mi pomogło.
— NeeK

1

Naprawiłem ten problem przy następnej poprawce (może to komuś pomoże):

Po prostu sprawdź, czy foldery nadrzędne folderu projektu mają nazwy ze spacjami lub innymi niedozwolonymi znakami. Jeśli tak - usuń go.

„C: \ Users \ someuser \ Test Projects \ testProj” - w tym przypadku jako „Test Projects” powinno być „TestProjects”.



0

W moim przypadku usunąłem foldery gradlew i gradle z projektu. Ponownie wykonaj czyste zadania kompilacji za pomocą opcji „Uruchom zadanie Gradle” z okna projektów Gradle w intellij

wprowadź opis obrazu tutaj



0

jeśli jest to nowy projekt, usuń istniejący folder i uruchom $ npm install -g react-native-cli

sprawdź, czy działa bez żadnego błędu

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.