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

时间:2015-04-22 18:06:20

标签: android-studio gradle android-gradle gradlew

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

毋庸置疑,我删除了太多,问题是如何再次修复?你有任何想法如何解决这个问题?

24 个答案:

答案 0 :(得分:160)

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

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

答案 1 :(得分:83)

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

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

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

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

参考:Gradle Wrapper

答案 2 :(得分:30)

就我而言,它是全球.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

就会有效。

答案 3 :(得分:15)

对我有用的是先跑:

 gradle wrapper

成功构建后,我能够运行

./gradlew assembleRelease

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

答案 4 :(得分:15)

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

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

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

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

答案 5 :(得分:6)

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

OR

gradle wrapper --gradle-distribution-url https://myEnterpriseRepository:7070/gradle/distributions/gradle-2.3-bin.zip

可以找到所有详细信息this link

答案 6 :(得分:4)

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

这对我有用。

答案 7 :(得分: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%"

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

答案 8 :(得分:2)

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

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

答案 9 :(得分:1)

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

答案 10 :(得分:1)

我通过下一个修复解决了这个问题(也许会对某人有所帮助):

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

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

答案 11 :(得分:1)

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

答案 12 :(得分:1)

我看到了相同的错误,但在我的情况下,这是一个全新的Git安装,没有安装LFS。有问题的存储库是使用LFS设置的,并且gradle-wrapper.jar位于LFS中,因此它仅包含指向LFS服务器的指针。解决方案很简单,只需运行:

git lfs install

然后是一个新鲜的克隆。我想git lfs pull或只是git pull也会有帮助,但是有问题的人决定改做一个新的克隆。

答案 13 :(得分:1)

在Gradle 5.x上,我使用:

wrapper {
    gradleVersion = '5.5.1'
}

答案 14 :(得分:1)

我收到此错误是因为我的应用程序位于一个具有阿拉伯名称的文件夹中,我只需将阿拉伯文件夹名称更改为英文名称即可解决该问题,并且运行正常。

因此请确保您的应用程序的所有路径都是用英文编写的。

答案 15 :(得分:0)

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

enter image description here

答案 16 :(得分:0)

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

  

渐变包装器

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

答案 17 :(得分:0)

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

检查是否可以正常运行

答案 18 :(得分:0)

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

Menu

答案 19 :(得分:0)

我们的问题是 gradle-wrapper.jar 文件不断被 git 破坏。

我们必须添加一个带有以下行的 .gitattributes 文件:

*.jar binary

然后从 git 中取出 jar 并再次添加。奇怪的是,这仅适用于我们的一个存储库,而其他存储库不需要。

答案 20 :(得分:0)

我刚刚在 OS X 中遇到了这个问题并解决如下:

$ gradle wrapper

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

 $ ./gradlew build 

答案 21 :(得分:0)

问题描述很简单,就是找不到可执行的主类文件。

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

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

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

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

现在在我的情况下,.gitignore 中有一个条目为 *.jar,它在第一次提交时也排除了 gradle-wrapper.jar。

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

gradle wrapper

如果你没有使用最新的 gradle 版本,那么你必须在 build.gradle 中有一个包装任务,如下所示。这定义了将在包装器中捆绑的 gradle 版本。对于最新版本的 gradle,wrapper 任务是隐式的。

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 从忽略的 jars 列表中排除。

!gradle-wrapper.jar

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

gradle和java请参考

答案 22 :(得分:0)

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

转到 System Preferences -> Security and Privacy -> Privacy Tab -> Files and Folders -> Java,然后选中“文档文件夹”复选框(或任何其他可能出现在您保存应用程序的位置)。

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

答案 23 :(得分:0)

我刚刚从路径 gradle-wrapper.jar 中我之前的一个项目中复制了 /android/gradle/wrapper,并粘贴到我的应用程序中的同一路径 /android/gradle/wrapper 中,并且效果很好。

冷静丸:)