我通过删除 ~/.gradle
、~/.m2
~./android
和 ~/workspace/project/.gradle
等本地目录并在 Android Studio 中选择 File -> Invalidate Caches / Restart...
来清理整个项目。现在执行命令 ./gradlew
会导致以下输出:
usr$ ./gradlew tasks
Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain
不用说,我删的太多了,问题是怎么才能再修复呢?你有任何想法如何解决这个问题吗?
gradle wrapper
以重新生成丢失的代码...这是假设您没有源代码控制设置。
除了@RaGe 的回答可能是我面临的情况,我有一个忽略 .jar
文件的全局 git ignore,因此 gradle wrapper jar 从未被提交。因此,在尝试 /var/lib/jenkins/my_project/gradlew build
后,我在 Jenkins 服务器上遇到了该错误。我必须明确强制添加 jar,然后提交:
git add -f gradle/wrapper/gradle-wrapper.jar
您的 gradle 包装器丢失、损坏或损坏。
-- 什么是 gradle 包装器:
gradlew
是 gradle 包装器可执行文件 - windows 上的批处理脚本和其他地方的 shell 脚本。调用包装脚本时,下载定义的 gradle 版本并执行它。通过将包装器与您的项目一起分发,任何人都可以使用它,而无需事先安装 Gradle。更好的是,构建的用户可以保证使用构建设计使用的 Gradle 版本。
-- 恢复 gradle 包装器:
过去,您需要将 wrapper
任务添加到 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 才能运行它。例如在 mac 上的 brew install gradle
。请参阅更详细的说明 here)
——为什么一开始就不见了?
OP 似乎删除了 gradle 包装器所依赖的东西。
但一个常见的原因是 .gitignore 条目会阻止包装器罐被检入 git。请注意,有效的 .gitignore 可能位于源文件夹中,也可能位于您的用户主文件夹或 git 全局配置中的全局文件夹中。在 .gitignore 中有一个 *.jar
条目是很常见的。
您可以在 .gitignore 中为 gradlew 的 jar 文件添加例外
*.jar
!gradle/wrapper/gradle-wrapper.jar
或强制将包装罐添加到 git
git add -f gradle/wrapper/gradle-wrapper.jar
--
参考:Gradle Wrapper
对我有用的是首先运行:
gradle wrapper
成功构建后,我能够运行
./gradlew assembleRelease
注意:为了能够运行 gradle wrapper,首先运行 brew install gradle。如果安装成功,从项目根目录运行 gradle wrapper。
来源和感谢:http://gradle.org/docs/current/userguide/gradle_wrapper.html 和 https://stackoverflow.com/users/745574/rage
Gradle->ProjectName->ProjectName->Tasks->build setup->wrapper
在我的例子中,它是一个全局 .gitignore
、as explained in @HankCa's answer。
我没有强制添加 jar(您需要记住在每个 Gradle 项目中执行此操作),而是添加了一个覆盖以将包装 jar 重新包含在我的全局 .gitignore
中:
*.jar
!gradle/wrapper/gradle-wrapper.jar
这对我很有用,因为我有很多使用 Gradle 的项目; Git 现在会提醒我包含 wrapper jar。
只要 gradle-wrapper.jar
之上的目录(例如 gradle
和 wrapper
)没有被忽略 - git will not descend in to ignored directories for performance reasons,此覆盖就会起作用。
就我而言,我在复制 gradle 文件夹时遗漏了 wrapper 子文件夹并得到了同样的错误。
无法找到或加载主类 org.gradle.wrapper.GradleWrapperMain
如果您从其他位置复制包装器,请确保您具有正确的文件夹结构。
├── build.gradle ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle
gradle wrapper
即可获得完全相同的结果;)
当我遇到这个问题时,我遵循了上面的答案。如果您遇到此问题,请确保强制推送 jar 和属性文件。在这两个之后,我不再遇到这个问题。
git add -f gradle/wrapper/gradle-wrapper.jar
git add -f gradle/wrapper/gradle-wrapper.properties
您的项目中的目录 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 --gradle-distribution-url https://myEnterpriseRepository:7070/gradle/distributions/gradle-2.3-bin.zip
可以找到所有详细信息this link
gradle/wrapper
目录的内容。如您所述,可以通过运行 gralde wrapper
来解决此问题。
Gradle->ProjectName->ProjectName->Tasks->build setup->wrapper
在我的情况下(使用 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%"
还有一些其他“特殊字符”可能会破坏路径/目录。
我看到了同样的错误,但在我的情况下,这是一个没有安装 LFS 的全新 Git 安装。有问题的 repo 是用 LFS 设置的,而 gradle-wrapper.jar 在 LFS 中,所以它只包含一个指向 LFS 服务器的指针。解决方案很简单,只需运行:
git lfs install
一个新的克隆就成功了。我想 git lfs pull
或只是一个 git pull
也可以提供帮助,但有问题的人决定做一个新的克隆。
问题陈述很简单,它无法找到可执行的主类文件。
如果您在项目中使用 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 中有一个条目为 *.jar ,它在第一次提交时也排除了 gradle-wrapper.jar 。
因此,要恢复文件,您必须执行以下任务
gradle wrapper
如果您没有使用最新的 gradle 版本,那么您必须在 build.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 从忽略的 jars 列表中排除,因为 *.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
我刚刚从路径 /android/gradle/wrapper
中的一个以前的项目中复制了 gradle-wrapper.jar
,并粘贴到同一路径 /android/gradle/wrapper
上的我的应用程序中,它运行良好。
清凉丸:)
您还可以将 gradlew.bat 复制到根文件夹中,并将 gradlew-wrapper 复制到 gradlew 文件夹中。
这对我有用。
如果您使用的是 MacOS,并且 ./gradle/wrapper/gradle-wrapper.jar
文件已存在,但仍会引发相同的错误,则可能是由于 MacOS 对 Documents 文件夹的 java 权限所致。
转到 System Preferences -> Security and Privacy -> Privacy Tab -> Files and Folders -> Java
,然后选中“文档文件夹”复选框(或任何其他可能出现在您保存应用程序的位置)。
我和这个东西打了几个小时,所以我希望它对某人有用。
@HankCa 也解决了我的问题。我决定将我危险的 **/*.jar
忽略更改为像 src/**/lib/*.jar
这样不言自明的忽略,以避免将来出现此类问题。以 **/* 开头的忽略有点太危险了,至少对我来说是这样。仅通过查看 .gitignore 行就可以了解其背后的想法总是一个好主意。
就我而言,gradle-wrapper.jar 在替换一堆文件后损坏了。恢复到原来的解决了这个问题。
我用下一个修复程序解决了这个问题(也许它会帮助某人):
只需检查项目文件夹的父文件夹的名称是否包含空格或其他禁止字符。如果是 - 删除它。
“C:\Users\someuser\Test Projects\testProj” - 在这种情况下,“Test Projects”应该是“TestProjects”。
就我而言,我已经从项目中删除了 gradlew 和 gradle 文件夹。通过 intellij 的 Gradle Projects 窗口中的“Run Gradle Task”重新运行干净的构建任务
https://i.stack.imgur.com/gg7p7.png
在 Gradle 5.x 上,我使用:
wrapper {
gradleVersion = '5.5.1'
}
我收到此错误是因为我的应用程序位于具有阿拉伯名称的文件夹中,我只需将阿拉伯文件夹名称更改为英文名称即可解决该问题,并且工作正常。
因此,请确保您的应用程序的所有路径都是用英文编写的。
我刚刚在 OS X 中解决了这个问题,如下所示:
$ gradle wrapper
现在,您可以运行 build
命令,
$ ./gradlew build
对于 Gradle 版本 5+,此命令解决了我的问题:
梯度包装器
https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:adding_wrapper
我卸载了 gradle 并重新安装了它,然后创建了一个新的包装器。
$ sudo apt remove gradle
$ sudo apt-get install gradle
$ gradle wrapper
我们的问题是 gradle-wrapper.jar
文件不断被 git 破坏。
我们必须添加一个带有以下行的 .gitattributes
文件:
*.jar binary
然后从 git 中删除 jar 并再次添加。奇怪的是,这只需要我们的一个回购而不是其他回购。
从任何正在运行的项目中复制 Gradle 的文件夹。在您当前的项目中替换它
然后重建我希望你会发现工作良好。
您也可能会失去对 gradle 文件夹的执行权限,所以
sudo chmod -R +x ./gradle
将有助于解决问题。
您可以通过从 /android/gradle/wrapper
文件夹下的先前项目复制 gradle-wrapper.jar
并将其放入当前项目的 /android/gradle/wrapper
文件夹来解决此错误。
如果需要,您还可以使用以下链接下载 gradle 包装文件。
https://drive.google.com/file/d/1j4jFWMr4P8FjhUtmGnwGe92givdRRKVe/view?usp=sharing
不定期副业成功案例分享