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

Android studio 无法找到或加载主类org.gradle.wrapper.GradleWrapperMain,android-studio,gradle,android-gradle-plugin,gradlew,Android Studio,Gradle,Android Gradle Plugin,Gradlew,我通过删除本地目录清理了整个项目,如android Studio中的~/.gradle,~/.m2~/.android和~/workspace/project/.gradle并选择文件->使缓存失效/重新启动…。 现在,执行命令/gradlew将产生以下输出: usr$ ./gradlew tasks Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain 不用说,我删除的太多了,问题是怎样才能

我通过删除本地目录清理了整个项目,如android Studio中的
~/.gradle
~/.m2
~/.android
~/workspace/project/.gradle
并选择
文件->使缓存失效/重新启动…
。 现在,执行命令
/gradlew
将产生以下输出:

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

不用说,我删除的太多了,问题是怎样才能再次修复?你有办法解决这个问题吗

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

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

还原渐变包装器:
过去,您需要在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才能运行此操作。
brew安装gradle
例如在mac上。请参阅更多详细说明)

为什么它一开始就不见了?
OP似乎删除了gradle包装器所依赖的内容

但一个常见的原因是.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

ref:

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

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

您还可以将gradlew.bat复制到根文件夹中,并将gradlew包装复制到gradlew文件夹中


这对我来说很有用。

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

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

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

在我的例子中,它是一个全局的
.gitignore

您需要记住在每个Gradle项目中都必须添加jar,而不是强制添加jar,我添加了一个覆盖以在我的全局
.gitignore
中重新包含包装器jar:

*.jar
!gradle/wrapper/gradle-wrapper.jar
这对我很有用,因为我有许多使用Gradle的项目;Git现在会提醒我包括包装器jar


只要不忽略
gradle wrapper.jar
(例如
gradle
wrapper
)上面的目录,此覆盖就可以工作--.

对我有效的方法是首先运行:

 gradle wrapper
成功构建后,我能够运行

./gradlew assembleRelease
注意:要能够运行
gradle包装器
第一次运行
brew安装gradle
。如果安装成功,请从项目根目录运行
gradle wrapper


来源和感谢:并且

您的项目中可能缺少目录
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子文件夹,得到了相同的错误

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

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

├── build.gradle ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle ├── 格雷德尔先生 ├── 格拉德尔 │ └── 包装纸 │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── 格拉德卢 ├── 格拉德勒蝙蝠 └── 格雷德尔酒店
在我的例子中,gradle-wrapper.jar在替换了一堆文件后损坏了。恢复到原来的解决方案解决了问题。

我通过下一个解决方案解决了此问题(可能会对某人有所帮助):

恰克 ├── build.gradle ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle
git add -f gradle/wrapper/gradle-wrapper.jar
git add -f gradle/wrapper/gradle-wrapper.properties
git lfs install
wrapper {
    gradleVersion = '5.5.1'
}
*.jar binary
$ gradle wrapper
 $ ./gradlew build 
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
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.jar