Не вдалося знайти або завантажити основний клас org.gradle.wrapper.GradleWrapperMain


166

Я очистив весь проект, видаляючи локальні каталоги , як ~/.gradle, ~/.m2 ~./androidі ~/workspace/project/.gradleта вони вибрали File -> Invalidate Caches / Restart...в Android Studio. Тепер виконання команди ./gradlewпризводить до наступного виводу:

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

Потрібно сказати, що я видалив занадто багато, питання полягає в тому, як це можна знову відремонтувати? Чи є у вас ідеї, як це виправити?


4
Ви повинні мати змогу запуститись gradle wrapperзнову, щоб відновити відсутній код ... це за умови, що у вас немає налаштування управління джерелом.
cjstehno

У вас на машині встановлений gradle? Ви можете спробувати викликати звичайний gradle замість gradlew, мабуть, також слід відновити обгортку gradle.
RaGe

Відповіді:


134

Ваша оболонка з градієном відсутня, зламана або зіпсована.

Що таке обгортка gradle:
gradlew чи виконується оболонка gradle - пакетний скрипт для Windows та скрипт оболонки в інших місцях. Після виклику сценарію обгортки завантажується визначена версія gradle та виконується. Поширюючи обгортку з вашим проектом, кожен може працювати з ним, не маючи заздалегідь встановлювати Gradle. Ще краще, що користувачі збірки гарантовано використовувати версію Gradle, з якою була створена збірка.

Відновлення обгортки gradle:
Раніше вам потрібно було додати wrapperзавдання до build.gradle, щоб відновити обгортку gradle та всі її залежності. Наприклад:

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

Новіші версії gradle цього не потребують. Тепер це вбудована задача. Просто запустіть:

gradle wrapper

Ви також можете надати додаткові прапори, щоб вказати версії тощо

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

Під час виконання цього завдання до папок джерела додаються сценарій обгортки gradle та необхідні файли jar. Властивості зберігаються в gradle / wrapper / gradle-wrapper.properties

(Вам може знадобитися встановити gradle локально, щоб запустити це. brew install gradleНаприклад, на mac. Детальніші інструкції див. Тут )

Чому його бракувало в першу чергу?
Здається, OP видалила щось, від чого залежить обгортка gradle.

Але загальною причиною є те, що запис .gitignore не дозволяє перевіряти банки з обгорткою в git. Зауважте, що фактично .gitignore може бути у вихідній папці або глобальній у домашній папці користувача або у глобальній конфігурації git. Зазвичай є *.jarзапис у .gitignore.

Ви можете додати виняток для jarle-файлів gradlew в .gitignore

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

або примусити додати баночку для обгортки в git

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

ref: Gradle Wrapper


1
Велике спасибі!
SePröbläm

8
Іншою можливою причиною цієї помилки є те, що файл gradle / wrapper / gradle-wrapper.jar не виконується, наприклад, якщо ви скопіювали файли з Windows ...
centic

У мене був такий випадок і, врешті-решт, виконано gradlew.bat, без аргументів його виправлено. Не знаю чому, але варто спробувати.
Альвін Шоман

207

На додаток до відповіді @ RaGe може бути ситуація, в якій я зіткнувся, коли у мене був глобальний git ігнорування, який ігнорував .jarфайли, і тому банку з обгорткою Gradle ніколи не робилася. Таким чином, я отримав цю помилку на сервері Дженкінса після спроби /var/lib/jenkins/my_project/gradlew build. Я повинен був явно примусити додати банку і потім зробити:

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

17
Це справді була проблема. Я не усвідомлював, що у мене глобальний .гітігнор.
amey91

1
Хороший. Так було і зі мною.
Брендан

Це була саме моя проблема ... Спасибі товаришу!
theyCallMeJun

Я працюю над CI / CD в GitHub Actions, і це було для мене. Дякую!
Andi

43

Що для мене працювало - це спершу запустити:

 gradle wrapper

Після успішного складання я зміг запустити

./gradlew assembleRelease

Примітка. Щоб мати змогу запустити gradle wrapperперший запуск brew install gradle. Якщо установка успішна, запустіть gradle wrapperз кореня проекту.

Джерело та подяка: http://gradle.org/docs/current/userguide/gradle_wrapper.html та https://stackoverflow.com/users/745574/rage


1
Якщо ця команда не працює, на AS є панель Gradle з правого боку. КлацнітьGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Джемшит Іскендеров

Працює для мене.
negrotico19

Так, у мене був той самий випуск проекту SpringBoot на IntelliJ IDE, ця пропозиція вирішила проблему. Дякую @niklasingvar
Ermias K

41

У моєму випадку це було глобальним .gitignore, як пояснено у відповіді @ HankCa .

Замість того, щоб насильно додавати банку, що потрібно пам’ятати, щоб зробити у кожному проекті Gradle, я додав переоцінку, щоб повторно включити банку з обгорткою у свій глобальний .gitignore:

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

Це мені корисно, оскільки у мене є багато проектів, які використовують Gradle; Тепер Git нагадає мені включити баночку для обгортки.

Це переопрацювання буде працювати до тих пір, поки жодні каталоги gradle-wrapper.jar(наприклад, gradleта wrapper) не будуть ігноровані - git не зійде в ігноровані каталоги з міркувань продуктивності .


Так, ця проблема є і в моєму випадку
silentsudo

22

У моєму випадку я залишив підпак wrapperпід час копіювання gradleпапки і отримав ту саму помилку.

Не вдалося знайти або завантажити основний клас org.gradle.wrapper.GradleWrapperMain

переконайтеся, що у вас правильна структура папки, якщо ви копіюєте обгортку з іншого місця.

├── build.gradle
├── градле
│ └── обгортка
│ ├── gradle-обгортка.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── налаштування.gradle

Чому б ви копіювали обгортку? Просте виконання gradle wrapperдасть вам точно такий же результат;)
Xerus

@Xerus, у деяких корпоративних середовищі існують мережеві обмеження, що ви не можете вільно завантажувати пакети. у цьому випадку вам доведеться скопіювати / перемістити.
янтак

8

Напевно, у вашому проекті відсутній gradle-wrapper.jarфайл під каталогом gradle/wrapper.

Вам потрібно генерувати цей файл за допомогою цього сценарію у файлі build.gradle, як показано нижче,

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

і виконати завдання:

gradle wrapper

З gradle 2.4 (або вище) ви можете налаштувати обгортку, не додаючи спеціального завдання:

gradle wrapper --gradle-version 2.3

АБО

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

З усіма деталями можна ознайомитись за цим посиланням


Багато помилок у Windows 10 для "gradle wrapper --gradle-distribution-url myEnterpriseRepository: 7070 / gradle / distributions /… "
Любов і мир - Джо Codeswell

Так, у проблемі відсутній вміст gradle/wrapperdir. Це можна усунути, запустивши так, gralde wrapperяк ви заявили.
Юрій

Якщо ця команда не працює, на AS є панель Gradle з правого боку. КлацнітьGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Джемшит Іскендеров

4

Ви також можете скопіювати gradlew.bat у свою кореневу папку та скопіювати gradlew-обгортку у папку gradlew.

це робота для мене.


4

Я дотримувався відповідей зверху, коли я наткнувся на це. І якщо у вас виникає ця проблема, то переконайтеся, що змушуйте натискати і jar, і файли властивостей. Після цих двох я перестав отримувати це питання.

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

3

У моєму випадку (за допомогою Windows 10) gradlew.bat має такі рядки коду в:

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

Змінна APP_HOME по суті є кореневою папкою gradles для проекту, тому, якщо це зіпсується якимось чином, ви збираєтеся отримати:

Помилка: не вдалося знайти або завантажити основний клас org.gradle.wrapper.GradleWrapperMain

Для мене це було зіпсовано, оскільки в моїй структурі папок проекту було вказано амперсанд (&). Напр. C: \ Test & Dev \ MyProject

Отже, gradel намагався знайти файл gradle-wrapper.jar у кореневій папці C: \ Test (знімаючи все після, включаючи '&')

Я виявив це, додавши наступний рядок нижче встановленого APP_HOME =% DIRNAME% рядка вище. Потім запустіть файл bat, щоб побачити результат.

echo "%APP_HOME%"

Буде кілька інших "спеціальних символів", які можуть зламати шлях / каталог.


2

Я бачив ту саму помилку, але в моєму випадку це була свіжа установка Git без встановленого LFS. Проблемне репо було створено з LFS, а gradle-wrapper.jar був у LFS, тому він містив лише вказівник на сервер LFS. Рішення було простим, просто запустіть:

git lfs install

І свіжий клон зробив свою справу. Я гадаю, git lfs pullчи просто git pullміг би допомогти, але людина з проблемою вирішила зробити свіжий клон замість цього.


1

@HankCa вирішив проблему і в моєму випадку. Я вирішив змінити свої небезпечні **/*.jarігнори на роз'яснювачі, які src/**/lib/*.jarхочуть уникати подібних проблем у майбутньому. Ігнори, що починаються з ** / *, є занадто небезпечними, принаймні, для мене. І це завжди гарна ідея отримати ідею за рядом .gitignore, просто подивившись на неї.


1

У моєму випадку gradle-wrapper.jar отримав пошкодження після заміни купу файлів. Повернення до оригіналу вирішило проблему.


1
Привіт @ Neek Ласкаво просимо до переповнення стека, будь ласка, дайте відповідь на нове запитання, на це запитання прийнято вже більше 4 відповідей, тому, будь ласка, зосередьтеся на цій частині.
Діліп

2
Звичайно! всі вищезазначені відповіді не допомогли мені, тому я поставив те, що мені допомогло.
NeeK

1

Я вирішив цю проблему наступним виправленням (можливо, це допоможе комусь):

Просто перевірте, чи є у батьківських папок вашої папки проекту імена з пробілами чи іншими забороненими символами. Якщо так - видаліть його.

"C: \ Users \ someuser \ Test Projects \ testProj" - у цьому випадку "Test Projects" має бути "TestProjects".



0

У моєму випадку я видалив папки gradlew і gradle з проекту. Повторіть завдання чистої збірки за допомогою "Запустіть задачу Gradle" у вікні Projekti Gradle в Intellij

введіть тут опис зображення



0

якщо це новий проект, видаліть існуючу папку та запустіть $ npm install -g react-native-cli

перевірити, чи працює без помилок

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.