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

我通过删除本地目录,如~/.gradle~/.m2~./android~/workspace/project/.gradle,并在Android Studio中选择File -> Invalidate Caches / Restart...来清理整个项目。 现在,执行命令./gradlew将导致以下输出:

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

不用说,我删掉的太多了,问题是怎样才能重新修复呢?你有什么解决办法吗?

314914 次浏览

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

< p >,
什么是gradle包装:

gradlew是gradle包装器可执行文件——windows上的批处理脚本和其他地方的shell脚本。包装器脚本在被调用时,下载已定义的gradle版本并执行它。通过将包装器与项目一起分发,任何人都可以使用它,而不需要事先安装Gradle。更好的是,构建的用户可以保证使用该构建设计用于工作的Gradle版本。

< p >,
恢复gradle包装:

过去,你需要在构建中添加wrapper任务。恢复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来运行它。例如mac上的brew install gradle。详见详细说明在这里)

< p >,
为什么它一开始就不见了?< / >强

OP似乎删除了一些gradle wrapper依赖的东西。

但是一个常见的原因是.gitignore条目阻止包装器jar被检入git。请注意,.gitignore可能在源文件夹中,也可能在用户主文件夹或git全局配置中的全局文件夹中。在.gitignore中有*.jar条目是很常见的。

你可以在.gitignore中为gradlew的jar文件添加一个异常

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

或者强制将包装器jar添加到git中

git add -f gradle/wrapper/gradle-wrapper.jar
< p >,
裁判:Gradle包装 < / p >

除了@RaGe的答案可能是我所面临的情况,我有一个全局git忽略忽略.jar文件,所以gradle包装器jar永远不会被提交。因此,在尝试/var/lib/jenkins/my_project/gradlew build之后,我在Jenkins服务器上得到了这个错误。我必须显式地强制添加jar,然后提交:

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

你也可以拷贝gradlew.bat到你的根文件夹和拷贝gradlew-wrapper到gradlew文件夹。

那是我的工作。

@HankCa也解决了我的问题。我决定将危险的**/*.jar忽略改为像src/**/lib/*.jar这样的不言自明的忽略,以避免将来出现此类问题。忽略以**/*开头的内容有点太危险了,至少对我来说是这样。通过观察得到。gitignore row背后的想法总是一个好主意。

在我的情况下(使用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 < / p >

对我来说,这是一团糟,因为我的项目文件夹结构中有一个&号(&)。例如C: \ Test& Dev \ MyProject的

所以,grader试图在C:\Test的根文件夹中找到gradle-wrapper.jar文件(剥离后面的所有内容,包括'&')

通过在上面的set APP_HOME=%DIRNAME%行下面添加以下行,我发现了这一点。然后运行bat文件查看结果。

echo "%APP_HOME%"

还有其他一些“特殊字符”可能会破坏路径/目录。

在我的例子中,它是一个全局.gitignore正如@HankCa的回答所解释的那样

我没有在每个Gradle项目中强制添加jar,而是添加了一个重写,在全局.gitignore中重新包含包装器jar:

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

这对我来说很有用,因为我有很多使用Gradle的项目;Git现在会提醒我包含包装器jar。

只要没有gradle-wrapper.jar以上的目录(比如gradlewrapper)被忽略,这个重写就可以工作——由于性能原因,Git不会下降到被忽略的目录

对我有效的方法是:

 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

您可能在项目的gradle/wrapper目录下丢失了gradle-wrapper.jar文件。

您需要在构建中通过此脚本生成此文件。Gradle文件如下,

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

并运行task:

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

所有细节都可以在这个链接中找到

在我的例子中,我在复制gradle文件夹时遗漏了包装器子文件夹,并得到了相同的错误。

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

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

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

在我的情况下gradle-wrapper.jar在替换了一堆文件后被损坏。回到原来的那个解决了这个问题。

我修复了这个问题的下一个修复(也许它会帮助别人):

只需检查项目文件夹的父文件夹名称中是否包含空格或其他禁止使用的字符。如果存在,请移除。

"C:\Users\someuser\Test Projects\testProj" -在本例中,"TestProjects"应该是"TestProjects"。

在我的情况下,我已经从项目中删除了gradlew和gradle文件夹。 在intellij

的Gradle项目窗口中,通过“运行Gradle任务”重新运行干净的构建任务

enter image description here

我顺着上面的答案发现了这个。如果你有这个问题,一定要强制推送jar和属性文件。这两期之后,我就不再看这期了。

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

对于Gradle版本5+,这个命令解决了我的问题:

gradle包装

https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:adding_wrapper

我看到了同样的错误,但在我的情况下,这是一个没有安装LFS的新Git安装。问题中的repo是用LFS设置的,gradle-wrapper.jar在LFS中,所以它只包含一个指向LFS服务器的指针。解决方案很简单,只需运行:

git lfs install

一个新的克隆体成功了。我想git lfs pull或只是一个git pull也可以帮助,但有问题的人决定做一个新的克隆。

在Gradle 5上。x我使用:

wrapper {
gradleVersion = '5.5.1'
}

我得到了这个错误,因为我的应用程序是在一个文件夹,有一个阿拉伯语的名字,我解决它,只是改变阿拉伯语文件夹的名字为英语一个,它工作正常。

所以要确保你的应用程序的所有路径都是用英文写的。

我卸载gradle并重新安装它,然后创建一个新的包装器。

$ sudo apt remove gradle
$ sudo apt-get install gradle
$ gradle wrapper

我们的问题是gradle-wrapper.jar文件一直被git损坏。

我们必须添加.gitattributes文件,代码如下:

*.jar binary

然后从git中删除jar并再次添加它。奇怪的是,这只要求我们的一个回购,而不是其他。

我刚刚在OS X中解决了这个问题,如下所示:

$ gradle wrapper

现在,你可以运行build命令,

 $ ./gradlew build

问题陈述很简单,它无法定位可执行的主类文件。

如果你在你的项目中使用gradle包装器,你应该有如下结构

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

当你执行。/gradlew时,它会寻找类路径,根据gradlew或gradlew.bat中的代码,有一行将gradle-wrapper.jar添加到类路径中

CLASSPATH = $ APP_HOME / gradle /包装/ gradle-wrapper.jar

在我的例子中,在。gitignore as *.jar中有一个条目,当第一次提交时,它也排除了gradle-wrapper。jar。

因此,要恢复文件,您必须执行以下任务

gradle wrapper

如果你没有使用最新的gradle版本,那么你必须在构建中有一个包装任务。Gradle如下图。这定义了哪个gradle版本将被捆绑在包装器中。对于最新版本的gradle,包装器任务是隐式的。

task wrapper(type: Wrapper) {
gradleVersion = '4.8'
//change this as per your project. Refer to distributionUrl in gradle-wrapper.properties to confirm the version
}

一旦你执行了这个任务,gradle-wrapper-4.8.jar将被下载并放到gradle/wrapper文件夹中(如上树形结构所述)。将文件重命名为gradle-wrapper.jar

然而,由于*.jar被排除在。gitignore文件,我仍然无法签入它存储在github。

因此,在.gitignore文件中添加以下一行,将gradle-wrapper.jar从被忽略的jar列表中排除,因为*.jar。

!gradle-wrapper.jar

Git实际上已经为所有编程语言共享了示例.gitignore文件。

请参考gradle和java

如果您使用的是MacOS, ./gradle/wrapper/gradle-wrapper.jar文件已经存在,但它仍然抛出相同的错误,这可能是由于MacOS对Documents文件夹的java权限。

转到System Preferences -> Security and Privacy -> Privacy Tab -> Files and Folders -> Java,并检查“文档文件夹”;复选框(或任何其他可能出现在你持有你的应用程序)。

我和这个东西斗争了几个小时,所以我希望它对某人有用。

我只是复制了gradle-wrapper.jar从我以前的一个项目从路径/android/gradle/wrapper和粘贴到我的应用程序在相同的路径/android/gradle/wrapper和它工作完美。

冷静药丸:)

  1. 从你任何正在运行的项目中复制Gradle的文件夹。
  2. 将其替换到当前项目中
< p >然后重建 我希望你工作顺利。

它也可能发生,你失去了gradle文件夹的执行权限,所以

sudo chmod -R +x ./gradle

将有助于解决问题。

你可以通过将gradle-wrapper.jar从以前项目的/android/gradle/wrapper文件夹下复制到当前项目的/android/gradle/wrapper文件夹中来解决这个错误。

如果需要,还可以使用下面的链接下载gradle包装器文件。

https://drive.google.com/file/d/1j4jFWMr4P8FjhUtmGnwGe92givdRRKVe/view?usp=sharing