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ć?

SePröbläm
źródło
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

Wściekłość
źródło
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
HankCa
źródło
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

niklasingvar
źródło
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ść .

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

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

Chłopak
źródło
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
Jose Peralez
źródło
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.

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

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


źródło
1

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

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

Ihor Khomiak
źródło
1

W Gradle 5.x używam:

wrapper {
    gradleVersion = '5.5.1'
}
Guilherme Biff Zarelli
źródło
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

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

winorośl
źródło