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

问题描述 投票:112回答:15

我删除了整个项目,删除了~/.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

不用说,我删了太多,问题是如何再次修复?你有任何想法如何解决这个问题?

android-studio gradle android-gradle gradlew
15个回答
84
投票

gradlew是gradle包装器可执行文件 - windows上的批处理脚本和其他地方的shell脚本。如果您在build.gradle中包含以下行,

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

gradle包装器脚本将添加到源文件夹中。调用时的包装脚本,下载已定义的gradle版本并执行它。通过在项目中分发包装器,任何人都可以使用它而无需事先安装Gradle。更好的是,构建的用户可以保证使用构建旨在使用的Gradle版本。

在删除中,您删除了gradlew所依赖的内容。您可以从源代码库中提取gradlew文件,或者如果已安装gradle,则运行gradle wrapper以恢复它。

ref:Gradle Wrapper


1
投票

@HankCa也解决了我的问题。我决定把我危险的**/*.jar忽略变成像src/**/lib/*.jar这样不言自明的人,以避免将来出现这样的问题。忽略以** / *开头有点太危险了,至少对我而言。只需通过查看就可以了解.gitignore行背后的想法总是一个好主意。


1
投票

在我的情况下,gradle-wrapper.jar在替换了一堆文件后被破坏了。恢复到原始版本解决了问题。


1
投票

我用下一个修复程序修复了这个问题(也许它可以帮助某人):

只需检查项目文件夹的父文件夹是否包含空格或其他禁用字符的名称。如果是 - 删除它。

“C:\ Users \ someuser \ Test Projects \ testProj” - 在这种情况下,“测试项目”应该是“TestProjects”。


0
投票

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

enter image description here


0
投票

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

gradle包装

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


0
投票

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

检查运行没有任何错误


165
投票

除了@ RaGe的回答可能是我遇到的情况,我有一个全局git忽略忽略.jar文件,所以gradle包装jar从未被提交。因此,在尝试使用/var/lib/jenkins/my_project/gradlew build后,我在Jenkins服务器上收到了该错误。我必须显式强制添加jar然后提交:

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

31
投票

就我而言,这是一个全球性的.gitignoreas explained in @HankCa's answer

我没有强行添加你需要记住在每个Gradle项目中执行的jar,而是添加了一个覆盖来重新包含我的全局.gitignore中的包装jar:

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

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

只要gradle-wrapper.jar上面没有目录(例如gradlewrapper)被忽略,这个覆盖就会起作用 - git will not descend in to ignored directories for performance reasons


15
投票

对我有用的是首先运行:

 gradle wrapper

成功构建后,我能够运行

./gradlew assembleRelease

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


15
投票

在我的情况下,我在复制gradle文件夹时遗漏了包装子文件夹并得到了同样的错误。

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

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

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

7
投票

您可能缺少项目中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

所有细节都可以找到this link


4
投票

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

这对我有用。


3
投票

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

对我来说,这已经搞砸了,因为我的项目文件夹结构中有一个和号(&)。例如C:\ Test&Dev \ MyProject

因此,gradel试图在C:\ Test的根文件夹中找到gradle-wrapper.jar文件(在包含'&'之后删除所有内容)

我通过在上面设置的APP_HOME =%DIRNAME%行下面添加以下行找到了这一点。然后运行bat文件以查看结果。

echo "%APP_HOME%"

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


3
投票

当我碰到这个时,我按照上面的答案。如果您遇到此问题,请确保强制推送jar和属性文件。在这两个之后,我停止了这个问题。

git add -f gradle/wrapper/gradle-wrapper.jar
git add -f gradle/wrapper/gradle-wrapper.properties
© www.soinside.com 2019 - 2024. All rights reserved.