Не удалось найти или загрузить основной класс 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

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

SePröbläm
источник
4
Вы должны быть в состоянии запустить gradle wrapperснова, чтобы восстановить отсутствующий код ... это предполагает, что у вас нет настройки управления исходным кодом.
cjstehno
У вас на машине установлен gradle? Вы можете попробовать вызвать обычный gradle вместо gradlew, возможно, следует также восстановить оболочку gradle.
RaGe

Ответы:

136

Ваша обертка gradle отсутствует, сломана или повреждена.

Что такое gradle wrapper:
gradlew это исполняемый файл gradle wrapper - пакетный скрипт для 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 предотвращает проверку jar-пакетов в git. Обратите внимание, что .gitignore в действительности может быть в исходной папке, или глобальной в вашей домашней папке пользователя, или в глобальной конфигурации git. Распространено иметь *.jarзапись в .gitignore.

Вы можете добавить исключение для jar-файлов gradlew в .gitignore

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

или принудительно добавьте банку в Git

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

ref: Gradle Wrapper

RaGe
источник
1
Большое спасибо!
SePröbläm
8
Другая возможная причина этой ошибки - не исполняемый файл gradle / wrapper / gradle-wrapper.jar, например, если вы скопировали файлы из Windows ...
centic
У меня был этот случай, и в итоге я запустил gradlew.bat без аргументов. Не знаю почему, но стоит попробовать.
Алвин
207

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

git add -f gradle/wrapper/gradle-wrapper.jar
HankCa
источник
17
Это была действительно проблема. Я не понял, что у меня был глобальный .gitignore.
amey91
1
Хороший. Так было и со мной.
Брендан
Это была именно моя проблема ... Спасибо, приятель!
ониПозвонитеМежун
Я работаю над CI / CD в GitHub Actions, и это было для меня. Спасибо!
Анди
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

niklasingvar
источник
1
В случае, если эта команда не работает, на AS справа есть панель Gradle. КликGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Джемшит Искендеров
Работаю на меня.
negrotico19
Да, у меня была та же проблема в проекте springBoot в IntelliJ IDE, это предложение решило проблему. Спасибо @niklasingvar
Ermias K
41

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

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

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

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

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

Алекс Палмер
источник
Да, это проблема та же в моем случае
Silentsudo
22

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

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

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

Build── build.gradle
Dle── gradle
Wra └── обертка
Gra ├── gradle-wrapper.jar
Gra └── gradle-wrapper.properties
Gra── gradlew
Dle── gradlew.bat
Settings── settings.gradle
yantaq
источник
Зачем вам копировать обертку? Простое выполнение 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 / distribution /… "
Любовь и мир - Джо Кодсвелл
Да, проблема в том, что содержание 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 по сути является корневой папкой для проекта, поэтому, если это каким-то образом испортится, вы получите:

Ошибка: не удалось найти или загрузить основной класс 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мог бы помочь, но человек с проблемой решил вместо этого сделать свежий клон.

cb2
источник
1

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


источник
1

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

NEEK
источник
1
Привет @ Neek Добро пожаловать в переполнение стека, пожалуйста, дайте ответ на новый вопрос, на этот вопрос уже принято более 4 ответов, поэтому, пожалуйста, сконцентрируйтесь на этой части.
Дилип
2
Конечно! все вышеперечисленные ответы не помогли мне, поэтому я выложил то, что помогло мне.
NeeK
1

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

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

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

Игорь Хомяк
источник
1

На Gradle 5.x я использую:

wrapper {
    gradleVersion = '5.5.1'
}
Гильерме Бифф Зарелли
источник
0

В моем случае я удалил папки gradlew и gradle из проекта. Перезапустите задачи чистой сборки через «Выполнить задачу Gradle» из окна Gradle Projects в intellij.

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

Саурабх
источник
0

если это новый проект, удалите существующую папку и запустите $ npm install -g Reaction-native-cli

проверьте, что работает без ошибок

Vineet
источник