Не удалось найти или загрузить основной класс org.градля.обертка.GradleWrapperMain

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

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

Излишне говорить, что я удалил слишком много, вопрос в том, как его можно восстановить снова? У вас есть идеи, как это исправить?

12 ответов


gradlew - это исполняемый пакетный сценарий оболочки gradle в windows и сценарий оболочки в другом месте. Если вы включаете следующие строки в свой build.gradle,

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

сценарий оболочки gradle добавляется в исходные папки. Сценарий-оболочка при вызове загружает определенную версию gradle и выполняет ее. Распространяя обертку с вашим проектом, любой может работать с ней без необходимости устанавливать Gradle заранее. Еще лучше, пользователи сборки гарантированно используйте версию Gradle, для которой была разработана сборка.

в ваших удалениях вы удалили то, от чего зависит gradlew. Вы можете либо вытащить только файлы gradlew из исходного репо, либо если у вас установлен gradle run gradle wrapper восстановить его.

ref:Gradle Wrapper


В дополнение к ответу @RaGe может быть ситуация, с которой я столкнулся, когда у меня был глобальный git ignore, который игнорировал .jar файлы, и поэтому Банка обертки gradle никогда не была зафиксирована. Таким образом, я получал эту ошибку на сервере Jenkins после попытки /var/lib/jenkins/my_project/gradlew build. Мне пришлось явно принудительно добавить банку, а затем совершить:

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

в моем случае это был глобальный .gitignore, как объяснено в ответе @HankCa.

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

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

это полезно для меня, поскольку у меня есть много проектов, которые используют Gradle; Git теперь напомнит мне включить банку обертки.

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


в моем случае я пропустил фантик подпапка при копировании ш и получил ту же ошибку.

не удалось найти или загрузить основной класс org.градля.обертка.GradleWrapperMain

убедитесь, что у вас есть правильная структура папок, если вы копируете обертку из другого места.

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

то, что сработало для меня, - это первый запуск:

 gradle wrapper

после успешной сборки я смог запустить

./gradlew assembleRelease

источник и спасибо:http://gradle.org/docs/current/userguide/gradle_wrapper.html и https://stackoverflow.com/users/745574/rage


вы также можете скопировать gradlew.bat в корневую папку и скопируйте gradlew-wrapper в папку gradlew.

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


вы, вероятно, отсутствует в каталоге 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) gradlew.летучая мышь имеет следующий код:

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

переменная APP_HOME по существу является корневой папкой gradles для проекта, поэтому, если это каким-то образом испортится, вы получите:

ошибка: не удалось найти или загрузить главный класс орг.градля.обертка.GradleWrapperMain

для меня это было испорчено, потому что в моей структуре папок проекта был амперсанд ( & ). Например C:\Test&Dev\MyProject

Так, Градель пытается найти Gradle в-фантик.файл jar в корневой папке C:\Test (снимая все после и включая'&')

Я нашел это, добавив следующую строку ниже строки set APP_HOME=%DIRNAME% выше. Затем запустите файл bat, чтобы увидеть результат.

echo "%APP_HOME%"

будет несколько других "специальных символов", которые могут сломать путь/каталог.


@HankCa решил проблему и в моем случае. Я решил изменить свой опасный **/*.jar игнорирует самоочевидные, такие как src/**/lib/*.jar чтобы избежать таких проблем в будущем. Игнорирование, начинающееся с**/*, слишком опасно, по крайней мере для меня. И это всегда хорошая идея, чтобы получить идея .gitignore row просто глядя на него.


в моем случае gradle-wrapper.jar был поврежден после замены кучи файлов. Возвращение к первоначальному разрешило проблему.


я исправил эту проблему со следующим исправлением (возможно, это поможет кому-то):

просто проверьте, имеют ли родительские папки вашей папки проекта Имена с пробелами или другими запрещенными символами. Если да - удалите его.

"C:\Users\someuser\Test Projects\testProj" - в этом случае "тестовые проекты" должны быть "TestProjects".


в моем случае я удалил папки gradlew и gradle из проекта. Reran очистить задачи сборки через "запустить задачу Gradle" из окна проектов Gradle в intellij

enter image description here