无法找到或加载主类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 2015年

您的机器上安装了gradle吗?您可以尝试调用常规gradle而不是gradlew,可能还应该恢复gradle包装器。
RaGe

Answers:


133

您的gradle包装器丢失,损坏或损坏。

什么是gradle wrapper:gradle wrapper
gradlew是可执行文件-Windows上的批处理脚本和其他地方的Shell脚本。包装器脚本在被调用时,下载定义的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中条目。

您可以在.gitignore中为gradlew的jar文件添加例外

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

或强制将包装罐添加到git中

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

参考:摇篮包装


1
非常感谢你!
SePröbläm

8
此错误的另一个可能原因是gradle / wrapper / gradle-wrapper.jar文件无法执行,例如,如果您从Windows复制文件...
centic 2015年

我有这种情况,并最终执行gradlew.bat而没有修改它。不知道为什么,但是值得一试。
Alwyn Schoeman

207

除了@RaGe的答案外,可能还会是我遇到的全局git ignore忽略.jar文件的情况,因此gradle包装器jar从未提交。因此,在尝试之后,我在Jenkins服务器上收到该错误/var/lib/jenkins/my_project/gradlew build。我必须明确地强制添加一个jar,然后提交:

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

17
这确实是问题所在。我没有意识到我有一个全局.gitignore。
amey91 2015年

1
好一个。我也是这样。
布伦丹2015年

这正是我的问题...谢谢队友!
CallMeJun

我正在GitHub Actions中从事CI / CD的工作,这就是我的工作。谢谢!
安迪

43

对我有用的是首先运行:

 gradle wrapper

成功构建后,我可以运行

./gradlew assembleRelease

注意:能够gradle wrapper先运行brew install gradle。如果安装成功,请gradle wrapper从项目根目录运行。

消息来源和感谢:http : //gradle.org/docs/current/userguide/gradle_wrapper.htmlhttps://stackoverflow.com/users/745574/rage


1
如果此命令不起作用,则在AS右侧有Gradle面板。点击Gradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov,

为我工作。
negrotico19

是的,我在IntelliJ IDE上的springBoot项目中遇到了同样的问题,该建议解决了该问题。谢谢@niklasingvar
Ermias K

41

就我而言,这是一个全局变量.gitignore如@HankCa的答案所述

我没有在每个Gradle项目中都要记住要强制添加的jar,而是添加了一个重写以将包装的jar重新包含在我的global中.gitignore

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

这对我很有用,因为我有许多使用Gradle的项目。Git现在会提醒我包括包装纸罐。

只要上面的目录gradle-wrapper.jar(如gradlewrapper)都不会被忽略,此覆盖将起作用- 出于性能原因,git不会进入被忽略的目录


是的,这对我来说是同样的问题
–silentsudo

22

就我而言,我wrapper在复制gradle文件夹时遗漏了子文件夹,并得到了相同的错误。

无法找到或加载主类org.gradle.wrapper.GradleWrapperMain

如果从其他位置复制包装,请确保您具有正确的文件夹结构。

├──build.gradle
├──摇篮
│└──包装纸
│├──gradle-wrapper.jar
│└──gradle-wrapper.properties
├──gradlew
├──gradlew.bat
└──settings.gradle

你为什么要包装纸?只需执行即可gradle wrapper得到完全相同的结果;)
Xerus

@Xerus,在某些公司环境中,存在网络限制,您不能自由下载软件包。在这种情况下,您必须复制/移动。
yantaq

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-distribution-url myEnterpriseRepository:7070 / gradle / distributions /…
爱与和平-Joe Codeswell

是的,问题是缺少gradle/wrapperdir 的内容。可以通过运行gralde wrapper您所说的来解决。
尤里(Yuri)

如果此命令不起作用,则在AS右侧有Gradle面板。点击Gradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov,

4

您还可以将gradlew.bat复制到您的根文件夹中,并将gradlew-wrapper复制到gradlew文件夹中。

那对我有用。


4

当我遇到这个问题时,我遵循了上面的答案。而且,如果您遇到此问题,请确保同时强制推送jar和properties文件。在这两个之后,我不再遇到这个问题。

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尝试在C:\ Test的根文件夹中找到gradle-wrapper.jar文件(剥离了'&'之后的所有内容)

我是通过在上面设置的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
Hey @ Neek欢迎使用Stack Overflow,请提供有关新问题的答案,该问题已接受了4个以上的答案,因此请专注于该部分。
Dilip

2
当然!上面所有接受的答案都没有帮助我,所以我把帮助我的内容排除在外。
NeeK

1

我用下一个修复程序解决了这个问题(也许会帮助某人):

只需检查项目文件夹的父文件夹是否具有带空格或其他禁止字符的名称即可。如果是,请将其删除。

“ C:\ Users \ someuser \ Test Projects \ testProj”-在这种情况下,“ Test Projects”应为“ TestProjects”。



0

就我而言,我已经从项目中删除了gradlew和gradle文件夹。通过intellij的Gradle Projects窗口中的“ Run Gradle Task”重新运行干净的构建任务

在此处输入图片说明



0

如果是新项目,请删除现有文件夹并运行$ npm install -g react-native-cli

检查运行是否没有任何错误

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.