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

SeP*_*läm 140 gradle gradlew android-studio android-gradle-plugin

我通过删除本地目录等清洗整个项目~/.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
Run Code Online (Sandbox Code Playgroud)

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

Han*_*kCa 181

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

git add -f gradle/wrapper/gradle-wrapper.jar
Run Code Online (Sandbox Code Playgroud)

  • 这确实是问题所在.我没有意识到我有一个全球性的.gitignore. (16认同)
  • 我正在 GitHub Actions 中从事 CI/CD 工作,这就是我的目标。谢谢你! (2认同)

RaG*_*aGe 101

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

task wrapper(type: Wrapper) {
    gradleVersion = '4.1'
}
Run Code Online (Sandbox Code Playgroud)

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

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

ref:Gradle Wrapper

  • 运行`gradle wrapper`就可以了.谢谢! (13认同)
  • 导致此错误的另一个可能原因是gradle/wrapper/gradle-wrapper.jar文件不可执行,例如,如果您从Windows复制文件... (6认同)
  • 我总是很欣赏包含对正在发生的事情的正确解释的答案,而不仅仅是复制粘贴几行来解决问题。谢谢。 (2认同)

Ale*_*mer 38

就我而言,它是一个全球性的.gitignore,正如@ HankCa的回答所解释的那样.

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

*.jar
!gradle/wrapper/gradle-wrapper.jar
Run Code Online (Sandbox Code Playgroud)

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

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


小智 29

对我有用的是首先运行:

 gradle wrapper
Run Code Online (Sandbox Code Playgroud)

成功构建后,我能够运行

./gradlew assembleRelease
Run Code Online (Sandbox Code Playgroud)

来源和感谢:http://gradle.org/docs/current/userguide/gradle_wrapper.html/sf/users/52190211/

  • 如果此命令不起作用,在 AS 上右侧有 Gradle 面板。点击`Gradle->ProjectName->ProjectName->Tasks->build setup->wrapper` (5认同)

yan*_*taq 17

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

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

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

??? build.gradle
??? gradle
?   ??? wrapper
?       ??? gradle-wrapper.jar
?       ??? gradle-wrapper.properties
??? gradlew
??? gradlew.bat
??? settings.gradle


Ali*_*ram 14

我刚刚gradle-wrapper.jar从路径中复制了我以前的项目之一/android/gradle/wrapper,并将其​​粘贴到同一路径上的应用程序中/android/gradle/wrapper,并且效果完美。

镇静丸:)


小智 8

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

git add -f gradle/wrapper/gradle-wrapper.jar
git add -f gradle/wrapper/gradle-wrapper.properties
Run Code Online (Sandbox Code Playgroud)


Lun*_*ong 7

您的项目gradle-wrapper.jar目录下可能缺少文件gradle/wrapper

您需要通过以下build.gradle文件中的脚本来生成此文件,

task wrapper(type: Wrapper) {
   gradleVersion = '2.0' // version required
}
Run Code Online (Sandbox Code Playgroud)

并运行任务:

gradle wrapper
Run Code Online (Sandbox Code Playgroud)

使用gradle 2.4(或更高版本),您可以设置包装器,而无需添加专用任务:

gradle wrapper --gradle-version 2.3
Run Code Online (Sandbox Code Playgroud)

要么

gradle wrapper --gradle-distribution-url https://myEnterpriseRepository:7070/gradle/distributions/gradle-2.3-bin.zip
Run Code Online (Sandbox Code Playgroud)

所有详细信息都可以在此链接中找到


cb2*_*cb2 7

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

git lfs install
Run Code Online (Sandbox Code Playgroud)

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


San*_*ani 7

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

\n

如果您在项目中使用 gradle 包装器,则应该具有如下结构

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gradle\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wrapper\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gradle-wrapper.jar\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 gradle-wrapper.properties\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gradlew\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gradlew.bat\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

\n

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

\n

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

\n
gradle wrapper\n
Run Code Online (Sandbox Code Playgroud)\n

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

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

执行任务后,将下载 gradle-wrapper-4.8.jar 并将其放入 gradle/wrapper 文件夹中(如上面的树结构中所述)。将文件重命名为 gradle-wrapper.jar

\n

但是,由于 *.jar 被排除在 .gitignore 文件中,我仍然无法将其签入并存储在 github 中。

\n

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

\n
!gradle-wrapper.jar\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

请参考gradle和java

\n\n


Guy*_*Guy 5

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

这对我有用。


Nei*_*son 5

在我的情况下(使用 Windows 10) gradlew.bat 有以下几行代码:

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
Run Code Online (Sandbox Code Playgroud)

APP_HOME 变量本质上是项目的 gradles 根文件夹,因此,如果这以某种方式搞砸了,您将获得:

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

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

因此,gradel 试图在 C:\Test 的根文件夹中找到 gradle-wrapper.jar 文件(去掉包括“&”之后的所有内容)

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

echo "%APP_HOME%"
Run Code Online (Sandbox Code Playgroud)

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