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

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


当前回答

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

所以,grader试图在C:\Test的根文件夹中找到gradle-wrapper.jar文件(剥离后面的所有内容,包括'&')

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

echo "%APP_HOME%"

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

其他回答

在我的情况下gradle-wrapper.jar在替换了一堆文件后被损坏。回到原来的那个解决了这个问题。

我修复了这个问题的下一个修复(也许它会帮助别人):

只需检查项目文件夹的父文件夹名称中是否包含空格或其他禁止使用的字符。如果存在,请移除。

"C:\Users\someuser\Test Projects\testProj" -在本例中,"TestProjects"应该是"TestProjects"。

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

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

在Gradle 5上。x我使用:

wrapper {
    gradleVersion = '5.5.1'
}

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

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

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

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

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