我通过删除~/这样的本地目录来清理整个项目。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

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


当前回答

我顺着上面的答案发现了这个。如果你有这个问题,一定要强制推送jar和属性文件。这两期之后,我就不再看这期了。

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

其他回答

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

如果你在你的项目中使用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

我顺着上面的答案发现了这个。如果你有这个问题,一定要强制推送jar和属性文件。这两期之后,我就不再看这期了。

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

您可能在项目的gradle/wrapper目录下丢失了gradle-wrapper.jar文件。

您需要在构建中通过此脚本生成此文件。Gradle文件如下,

task wrapper(type: Wrapper) {
   gradleVersion = '2.0' // version required
}

并运行task:

gradle wrapper

使用gradle 2.4(或更高版本),你可以在不添加专用任务的情况下设置一个包装器:

gradle wrapper --gradle-version 2.3

OR

gradle wrapper --gradle-distribution-url https://myEnterpriseRepository:7070/gradle/distributions/gradle-2.3-bin.zip

所有细节都可以在这个链接中找到

在我的例子中,它是一个全局的。gitignore,正如@HankCa的回答所解释的那样。

我没有在每个Gradle项目中强制添加jar,而是在全局的.gitignore中重新包含了包装器jar:

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

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

只要gradle-wrapper.jar上面的目录(比如gradle和wrapper)没有被忽略,这个重写就可以工作——出于性能原因,git不会进入被忽略的目录。

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

我们必须添加一个.gitattributes文件:

*.jar binary

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