无法找到或加载主 class org.gradle.wrapper.GradleWrapperMain
Could not find or load main class org.gradle.wrapper.GradleWrapperMain
我通过删除 ~/.gradle
、~/.m2
、~./android
和 ~/workspace/project/.gradle
等本地目录并在 Android 中选择 File -> Invalidate Caches / Restart...
来清理整个项目工作室。
现在执行命令 ./gradlew
会导致以下输出:
usr$ ./gradlew tasks
Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain
不用说了,我删的太多了,问题是怎么才能重新修复呢?你知道如何解决这个问题吗?
您的 gradle 包装丢失、损坏或损坏。
--
什么是gradle包装器:
gradlew
是 gradle 包装器可执行文件 - windows 上的批处理脚本和其他地方的 shell 脚本。调用包装器脚本时,会下载定义的 gradle 版本并执行它。通过在您的项目中分发包装器,任何人都可以使用它而无需事先安装 Gradle。更好的是,该版本的用户保证使用该版本设计使用的 Gradle 版本。
--
正在恢复 gradle 包装器:
过去,您需要向 build.gradle 添加一个 wrapper
任务以恢复 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 install gradle
on mac。请参阅更详细的说明 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
除了@RaGe 的回答之外,我遇到的情况可能是我有一个全局 git 忽略忽略了 .jar
文件,因此 gradle 包装器 jar 从未被坚定的。因此,在尝试 /var/lib/jenkins/my_project/gradlew build
之后,我在 Jenkins 服务器上收到了该错误。我必须明确地强制添加 jar 然后提交:
git add -f gradle/wrapper/gradle-wrapper.jar
您还可以将 gradlew.bat 复制到您的根文件夹中,并将 gradlew-wrapper 复制到 gradlew 文件夹中。
这对我有用。
@HankCa 也解决了我的问题。我决定将危险的 **/*.jar
忽略更改为像 src/**/lib/*.jar
这样不言自明的忽略,以避免将来出现此类问题。以 **/* 开头的忽略有点太危险了,至少对我来说是这样。仅仅通过查看 .gitignore 行就可以了解它背后的想法总是一个好主意。
在我的例子中(使用 windows 10)gradlew.bat 中有以下代码行:
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
APP_HOME 变量本质上是 gradle 项目的根文件夹,因此,如果它以某种方式搞砸了,您将得到:
Error: Could not find or load main class
org.gradle.wrapper.GradleWrapperMain
对我来说,这已经搞砸了,因为我的项目文件夹结构中有一个符号 (&)。例如 C:\Test&Dev\MyProject
因此,gradel 试图在 C:\Test 的根文件夹中找到 gradle-wrapper.jar 文件(剥离包括“&”在内的所有内容)
我是通过在上面的 set APP_HOME=%DIRNAME% 行下面添加以下行找到的。然后运行bat文件看效果
echo "%APP_HOME%"
还有一些其他 'special characters' 可能会破坏 path/directory。
在我的例子中,它是全局的 .gitignore
、。
我没有强行添加 jar(您需要记住在每个 Gradle 项目中执行此操作),而是在我的全局 .gitignore
中向 re-include 包装器 jar 添加了覆盖]:
*.jar
!gradle/wrapper/gradle-wrapper.jar
这对我很有用,因为我有很多项目使用 Gradle; Git 现在会提醒我添加包装罐。
只要不忽略 gradle-wrapper.jar
之上的目录(例如 gradle
和 wrapper
),此覆盖就会起作用 -- git will not descend in to ignored directories for performance reasons.
对我有用的是首先 运行:
gradle wrapper
成功构建后,我能够 运行
./gradlew assembleRelease
Note: To be able run gradle wrapper
first run brew install gradle
. If installation successful run gradle wrapper
from project root.
来源和致谢:http://gradle.org/docs/current/userguide/gradle_wrapper.html and https://whosebug.com/users/745574/rage
您的项目中目录 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 子文件夹并得到了同样的错误。
无法找到或加载主classorg.gradle.wrapper.GradleWrapperMain
如果从其他位置复制包装,请确保文件夹结构正确。
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
在我的例子中 gradle-wrapper.jar 在替换一堆文件后损坏了。恢复为原始版本解决了问题。
我在下一个修复中解决了这个问题(也许它会对某人有所帮助):
只需检查您的项目文件夹的父文件夹名称中是否包含空格或其他禁用字符。如果是 - 将其删除。
"C:\Users\someuser\Test Projects\testProj" - 在这种情况下 "Test Projects" 应该是 "TestProjects".
就我而言,我已经从项目中删除了 gradlew 和 gradle 文件夹。
通过 "Run Gradle Task" 从 Gradle 项目 window 在 intellij
中重新运行清理构建任务
当我 运行 进入这个时,我遵循了上面的答案。如果您遇到此问题,请务必强制推送 jar 和属性文件。在这两个之后,我不再遇到这个问题。
git add -f gradle/wrapper/gradle-wrapper.jar
git add -f gradle/wrapper/gradle-wrapper.properties
对于 Gradle 版本 5+,此命令解决了我的问题:
gradle wrapper
https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:adding_wrapper
我看到了同样的错误,但在我的例子中,这是一个全新的 Git 安装,没有安装 LFS。有问题的 repo 是用 LFS 设置的,gradle-wrapper.jar 在 LFS 中,所以它只包含一个指向 LFS 服务器的指针。解决方案很简单,只需 运行:
git lfs install
一个新的克隆成功了。我想 git lfs pull
或 git pull
也可能有所帮助,但有问题的人决定做一个新的克隆。
在 Gradle 5.x 我使用:
wrapper {
gradleVersion = '5.5.1'
}
我收到这个错误是因为我的应用程序位于一个具有阿拉伯名称的文件夹中,我通过将阿拉伯文件夹名称更改为英文名称来解决它并且它工作正常。
所以请确保您的应用程序的所有路径都是用英文编写的。
我卸载了 gradle 并重新安装了它,然后创建了一个新的包装器。
$ sudo apt remove gradle
$ sudo apt-get install gradle
$ gradle wrapper
我们的问题是 gradle-wrapper.jar
文件不断被 git 损坏。
我们必须添加一个 .gitattributes
文件,其中包含以下行:
*.jar binary
然后从 git 中删除 jar 并重新添加。奇怪的是,只有我们的一个回购协议需要它,而其他回购协议则不需要。
我刚刚在 OS X 中得到了这个并解决如下:
$ gradle wrapper
现在,您可以运行 build
命令,
$ ./gradlew build
问题陈述很简单,它无法找到可执行主 class 文件。
如果您在项目中使用 gradle 包装器,您应该具有如下结构
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
当你执行 ./gradlew 时,它会查找 classpath 并且根据 gradlew 或 gradlew.bat 中的代码,有一行将 gradle-wrapper.jar 添加到 classpath
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
如果您使用的是 MacOS,并且 ./gradle/wrapper/gradle-wrapper.jar
文件已经存在,但它仍然会抛出相同的错误,这可能是由于 MacOS 对 Documents 文件夹的 java 权限。
转到 System Preferences -> Security and Privacy -> Privacy Tab -> Files and Folders -> Java
,然后选中“文档文件夹”复选框(或任何其他可能出现在您的应用程序所在位置的复选框)。
我和这个东西战斗了几个小时所以我希望它对某人有用。
我刚刚从路径 /android/gradle/wrapper
的我之前的一个项目中复制 gradle-wrapper.jar
并粘贴到我的应用程序中相同的路径 /android/gradle/wrapper
并且它运行完美。
镇痛丸:)
- 从您的任一 运行 项目复制 Gradle 的文件夹。
- 在您当前的项目中替换它
然后重建
我希望你会发现工作顺利。
您也可能会失去对 gradle 文件夹的执行权限,因此
sudo chmod -R +x ./gradle
将有助于解决问题。
我通过删除 ~/.gradle
、~/.m2
、~./android
和 ~/workspace/project/.gradle
等本地目录并在 Android 中选择 File -> Invalidate Caches / Restart...
来清理整个项目工作室。
现在执行命令 ./gradlew
会导致以下输出:
usr$ ./gradlew tasks
Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain
不用说了,我删的太多了,问题是怎么才能重新修复呢?你知道如何解决这个问题吗?
您的 gradle 包装丢失、损坏或损坏。
--
什么是gradle包装器:
gradlew
是 gradle 包装器可执行文件 - windows 上的批处理脚本和其他地方的 shell 脚本。调用包装器脚本时,会下载定义的 gradle 版本并执行它。通过在您的项目中分发包装器,任何人都可以使用它而无需事先安装 Gradle。更好的是,该版本的用户保证使用该版本设计使用的 Gradle 版本。
--
正在恢复 gradle 包装器:
过去,您需要向 build.gradle 添加一个 wrapper
任务以恢复 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 install gradle
on mac。请参阅更详细的说明 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
除了@RaGe 的回答之外,我遇到的情况可能是我有一个全局 git 忽略忽略了 .jar
文件,因此 gradle 包装器 jar 从未被坚定的。因此,在尝试 /var/lib/jenkins/my_project/gradlew build
之后,我在 Jenkins 服务器上收到了该错误。我必须明确地强制添加 jar 然后提交:
git add -f gradle/wrapper/gradle-wrapper.jar
您还可以将 gradlew.bat 复制到您的根文件夹中,并将 gradlew-wrapper 复制到 gradlew 文件夹中。
这对我有用。
@HankCa 也解决了我的问题。我决定将危险的 **/*.jar
忽略更改为像 src/**/lib/*.jar
这样不言自明的忽略,以避免将来出现此类问题。以 **/* 开头的忽略有点太危险了,至少对我来说是这样。仅仅通过查看 .gitignore 行就可以了解它背后的想法总是一个好主意。
在我的例子中(使用 windows 10)gradlew.bat 中有以下代码行:
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
APP_HOME 变量本质上是 gradle 项目的根文件夹,因此,如果它以某种方式搞砸了,您将得到:
Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain
对我来说,这已经搞砸了,因为我的项目文件夹结构中有一个符号 (&)。例如 C:\Test&Dev\MyProject
因此,gradel 试图在 C:\Test 的根文件夹中找到 gradle-wrapper.jar 文件(剥离包括“&”在内的所有内容)
我是通过在上面的 set APP_HOME=%DIRNAME% 行下面添加以下行找到的。然后运行bat文件看效果
echo "%APP_HOME%"
还有一些其他 'special characters' 可能会破坏 path/directory。
在我的例子中,它是全局的 .gitignore
、
我没有强行添加 jar(您需要记住在每个 Gradle 项目中执行此操作),而是在我的全局 .gitignore
中向 re-include 包装器 jar 添加了覆盖]:
*.jar
!gradle/wrapper/gradle-wrapper.jar
这对我很有用,因为我有很多项目使用 Gradle; Git 现在会提醒我添加包装罐。
只要不忽略 gradle-wrapper.jar
之上的目录(例如 gradle
和 wrapper
),此覆盖就会起作用 -- git will not descend in to ignored directories for performance reasons.
对我有用的是首先 运行:
gradle wrapper
成功构建后,我能够 运行
./gradlew assembleRelease
Note: To be able run
gradle wrapper
first runbrew install gradle
. If installation successful rungradle wrapper
from project root.
来源和致谢:http://gradle.org/docs/current/userguide/gradle_wrapper.html and https://whosebug.com/users/745574/rage
您的项目中目录 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 子文件夹并得到了同样的错误。
无法找到或加载主classorg.gradle.wrapper.GradleWrapperMain
如果从其他位置复制包装,请确保文件夹结构正确。
├── build.gradle ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle
在我的例子中 gradle-wrapper.jar 在替换一堆文件后损坏了。恢复为原始版本解决了问题。
我在下一个修复中解决了这个问题(也许它会对某人有所帮助):
只需检查您的项目文件夹的父文件夹名称中是否包含空格或其他禁用字符。如果是 - 将其删除。
"C:\Users\someuser\Test Projects\testProj" - 在这种情况下 "Test Projects" 应该是 "TestProjects".
就我而言,我已经从项目中删除了 gradlew 和 gradle 文件夹。 通过 "Run Gradle Task" 从 Gradle 项目 window 在 intellij
中重新运行清理构建任务当我 运行 进入这个时,我遵循了上面的答案。如果您遇到此问题,请务必强制推送 jar 和属性文件。在这两个之后,我不再遇到这个问题。
git add -f gradle/wrapper/gradle-wrapper.jar
git add -f gradle/wrapper/gradle-wrapper.properties
对于 Gradle 版本 5+,此命令解决了我的问题:
gradle wrapper
https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:adding_wrapper
我看到了同样的错误,但在我的例子中,这是一个全新的 Git 安装,没有安装 LFS。有问题的 repo 是用 LFS 设置的,gradle-wrapper.jar 在 LFS 中,所以它只包含一个指向 LFS 服务器的指针。解决方案很简单,只需 运行:
git lfs install
一个新的克隆成功了。我想 git lfs pull
或 git pull
也可能有所帮助,但有问题的人决定做一个新的克隆。
在 Gradle 5.x 我使用:
wrapper {
gradleVersion = '5.5.1'
}
我收到这个错误是因为我的应用程序位于一个具有阿拉伯名称的文件夹中,我通过将阿拉伯文件夹名称更改为英文名称来解决它并且它工作正常。
所以请确保您的应用程序的所有路径都是用英文编写的。
我卸载了 gradle 并重新安装了它,然后创建了一个新的包装器。
$ sudo apt remove gradle
$ sudo apt-get install gradle
$ gradle wrapper
我们的问题是 gradle-wrapper.jar
文件不断被 git 损坏。
我们必须添加一个 .gitattributes
文件,其中包含以下行:
*.jar binary
然后从 git 中删除 jar 并重新添加。奇怪的是,只有我们的一个回购协议需要它,而其他回购协议则不需要。
我刚刚在 OS X 中得到了这个并解决如下:
$ gradle wrapper
现在,您可以运行 build
命令,
$ ./gradlew build
问题陈述很简单,它无法找到可执行主 class 文件。
如果您在项目中使用 gradle 包装器,您应该具有如下结构
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
当你执行 ./gradlew 时,它会查找 classpath 并且根据 gradlew 或 gradlew.bat 中的代码,有一行将 gradle-wrapper.jar 添加到 classpath
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
如果您使用的是 MacOS,并且 ./gradle/wrapper/gradle-wrapper.jar
文件已经存在,但它仍然会抛出相同的错误,这可能是由于 MacOS 对 Documents 文件夹的 java 权限。
转到 System Preferences -> Security and Privacy -> Privacy Tab -> Files and Folders -> Java
,然后选中“文档文件夹”复选框(或任何其他可能出现在您的应用程序所在位置的复选框)。
我和这个东西战斗了几个小时所以我希望它对某人有用。
我刚刚从路径 /android/gradle/wrapper
的我之前的一个项目中复制 gradle-wrapper.jar
并粘贴到我的应用程序中相同的路径 /android/gradle/wrapper
并且它运行完美。
镇痛丸:)
- 从您的任一 运行 项目复制 Gradle 的文件夹。
- 在您当前的项目中替换它
然后重建 我希望你会发现工作顺利。
您也可能会失去对 gradle 文件夹的执行权限,因此
sudo chmod -R +x ./gradle
将有助于解决问题。