我通过删除~/这样的本地目录来清理整个项目。gradle ~ /。m2 ~。~/workspace/project/。gradle和选择文件-> Invalidate Caches / Restart…在Android Studio。 现在执行./gradlew命令会得到以下输出:

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

不用说,我删掉的太多了,问题是怎样才能重新修复呢?你有什么解决办法吗?


当前回答

@HankCa也解决了我的问题。我决定将危险的**/*.jar忽略改为src/**/lib/*.jar,以避免将来出现此类问题。忽略以**/*开头的内容有点太危险了,至少对我来说是这样。通过观察得到。gitignore row背后的想法总是一个好主意。

其他回答

除了@RaGe的答案可能是我所面临的情况,我有一个全局git忽略忽略。jar文件,所以gradle包装器jar永远不会被提交。因此,在尝试/var/lib/jenkins/my_project/gradlew构建后,我在Jenkins服务器上得到了这个错误。我必须显式地强制添加jar,然后提交:

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

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

去系统首选项->安全和隐私->隐私选项卡->文件和文件夹-> Java,并检查“文档文件夹”复选框(或任何其他可能出现在你的应用程序)。

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

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

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

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

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

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

如果你在你的项目中使用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 as *.jar中有一个条目,当第一次提交时,它也排除了gradle-wrapper。jar。

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

gradle wrapper

如果你没有使用最新的gradle版本,那么你必须在构建中有一个包装任务。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从被忽略的jar列表中排除,因为*.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包装丢失,损坏或损坏。

-- 什么是gradle包装:

Gradlew是gradle包装可执行的批处理脚本在Windows和shell脚本在其他地方。包装器脚本在被调用时,下载已定义的gradle版本并执行它。通过将包装器与项目一起分发,任何人都可以使用它,而不需要事先安装Gradle。更好的是,构建的用户可以保证使用该构建设计用于工作的Gradle版本。

-- 恢复gradle包装:

过去,您需要向构建中添加包装器任务。恢复Gradle包装器及其所有依赖项。例如在build.gradle中:

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

或者在build.gradle.kts中:

    tasks.register<Wrapper>("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上安装gradle。在这里查看更详细的说明)

-- 为什么它一开始就不见了?

OP似乎删除了一些gradle wrapper依赖的东西。

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

-- 参考:Gradle包装