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

Ответы:


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


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

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


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

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


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» из окна Gradle Projects в intellij.

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



0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.