Android studio 无法找到或加载主类org.gradle.wrapper.GradleWrapperMain
我通过删除本地目录清理了整个项目,如android Studio中的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 不用说,我删除的太多了,问题是怎样才能
~/.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