ChatGPT解决这个技术问题 Extra ChatGPT

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

不用说,我删的太多了,问题是怎么才能再修复呢?你有任何想法如何解决这个问题吗?

您应该能够再次运行 gradle wrapper 以重新生成丢失的代码...这是假设您没有源代码控制设置。
你的机器上安装了 gradle 吗?您可以尝试调用常规 gradle 而不是 gradlew,也应该恢复 gradle 包装器。
有趣的是,我在印地语中更改项目文件夹名称时遇到了这个错误。
尝试使用本地 gradle home 而不是自己项目

H
HankCa

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

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

R
RaGe

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

-- 什么是 gradle 包装器:

gradlew 是 gradle 包装器可执行文件 - 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 才能运行它。例如在 mac 上的 brew install gradle。请参阅更详细的说明 here

——为什么一开始就不见了?

OP 似乎删除了 gradle 包装器所依赖的东西。

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

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

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

或强制将包装罐添加到 git

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

--
参考:Gradle Wrapper


此错误的另一个可能原因是 gradle/wrapper/gradle-wrapper.jar 文件不可执行,例如,如果您从 Windows 复制文件...
我遇到了这种情况,并最终在没有参数的情况下执行了 gradlew.bat 来修复它。不知道为什么,但值得一试。
拯救了我的一天!我用“* .jar”忽略了 gradle-wrapper.jar,所以我在管道上构建失败并出现同样的问题。
我总是很欣赏一个答案,其中包括对正在发生的事情的正确解释,而不仅仅是复制粘贴几行来解决问题。谢谢。
你把它钉牢了。这正是我的情况
f
fahmy

对我有用的是首先运行:

 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


如果此命令不起作用,在 AS 上右侧有 Gradle 面板。点击Gradle->ProjectName->ProjectName->Tasks->build setup->wrapper
为我工作。
是的,我在 IntelliJ IDE 上的 springBoot 项目上遇到了同样的问题,这个建议解决了这个问题。谢谢@niklasingvar
它对我有用,我可以从 Eclipse IDE 执行任务包装器。从控制台没有工作。谢谢!!
A
Alex Palmer

在我的例子中,它是一个全局 .gitignoreas explained in @HankCa's answer

我没有强制添加 jar(您需要记住在每个 Gradle 项目中执行此操作),而是添加了一个覆盖以将包装 jar 重新包含在我的全局 .gitignore 中:

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

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

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


是的,这与我的情况相同
y
yantaq

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

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

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

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

你为什么要复制包装?只需执行 gradle wrapper 即可获得完全相同的结果;)
@Xerus,在某些企业环境中存在网络限制,您无法免费下载软件包。在这种情况下,您必须复制/移动。
L
LarsTech

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

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

Y
Yuri

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

您需要通过 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


“gradle wrapper --gradle-distribution-url myEnterpriseRepository:7070/gradle/distributions/…”在 Windows 10 上出现很多错误
是的,问题是缺少 gradle/wrapper 目录的内容。如您所述,可以通过运行 gralde wrapper 来解决此问题。
如果此命令不起作用,在 AS 上右侧有 Gradle 面板。点击Gradle->ProjectName->ProjectName->Tasks->build setup->wrapper
N
Neil Watson

在我的情况下(使用 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 文件(剥离所有内容,包括 '&')

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

echo "%APP_HOME%"

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


解决方法是什么?我试图避免移动我的项目。谢谢!
嘎嘎。这是我的问题。非常感谢这个答案!
c
cb2

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

git lfs install

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


也正是这里发生的事情;-)
S
Sanjay Bharwani

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

如果您在项目中使用 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,包装器任务是隐式的。

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 从忽略的 jars 列表中排除,因为 *.jar。

!gradle-wrapper.jar

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

gradle和java请参考

https://github.com/github/gitignore/blob/master/Gradle.gitignore

https://github.com/github/gitignore/blob/master/Java.gitignore


路径图很有用。这让我意识到我错过了 gradle-wrapper.jar 文件,该文件在 git 中被忽略了——就像你的解释一样。
@TylerForsythe 如果这对您有所帮助,我很高兴。谢谢!
A
Ali Akram

我刚刚从路径 /android/gradle/wrapper 中的一个以前的项目中复制了 gradle-wrapper.jar,并粘贴到同一路径 /android/gradle/wrapper 上的我的应用程序中,它运行良好。

清凉丸:)


G
Guy

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

这对我有用。


A
Alejandro Núñez

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

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

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


佚名

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


N
NeeK

就我而言,gradle-wrapper.jar 在替换一堆文件后损坏了。恢复到原来的解决了这个问题。


Hey@Neek 欢迎来到 Stack Overflow,请就新问题给出答案,这个问题已经接受了 4 个以上的答案,所以请专注于那部分。
当然!以上所有接受的答案都没有帮助我,所以我把帮助我的东西拿出来。
I
Ihor Khomiak

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

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

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


S
Saurabh

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

https://i.stack.imgur.com/gg7p7.png


G
Guilherme Biff Zarelli

在 Gradle 5.x 上,我使用:

wrapper {
    gradleVersion = '5.5.1'
}

M
Mohamed Reda

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

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


A
Arefe

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

$ gradle wrapper

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

 $ ./gradlew build 

R
Raymond Chenon

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

梯度包装器

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


J
Jonathan R

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

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

O
Oliver Metz

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

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

*.jar binary

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


s
sherkhan

从任何正在运行的项目中复制 Gradle 的文件夹。在您当前的项目中替换它

然后重建我希望你会发现工作良好。


M
Martin Braun

您也可能会失去对 gradle 文件夹的执行权限,所以

sudo chmod -R +x ./gradle

将有助于解决问题。


C
Codemaker

您可以通过从 /android/gradle/wrapper 文件夹下的先前项目复制 gradle-wrapper.jar 并将其放入当前项目的 /android/gradle/wrapper 文件夹来解决此错误。

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

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