Gradle包装器 NoClassDefFoundError

27

当我运行 ./gradlew 时,出现以下错误:

主线程中发生异常java.lang.NoClassDefFoundError: org/gradle/wrapper/GradleWrapperMain 原因是: java.lang.ClassNotFoundException: org.gradle.wrapper.GradleWrapperMain    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at  java.security.AccessController.doPrivileged(Native Method)  at  java.net.URLClassLoader.findClass(URLClassLoader.java:190)    at  java.lang.ClassLoader.loadClass(ClassLoader.java:306)     at  sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)    at   java.lang.ClassLoader.loadClass(ClassLoader.java:247)

我的项目在使用Android Studio编译时可以成功,但命令行编译后失败了。


一种同时绕过这个问题的方法是: 使用brew install gradle安装gradle, 然后运行gradle build而不是./gradlew - Gal Bracha
你尝试过运行 ./gradlew build 吗? - Opal
2
尝试使用Gal的技巧下载Gradle并运行gradle wrapper以重新生成您的wrapper。也许有些东西被错误地删除了。 - Mark Vieira
2
请确保你在项目目录下 gradle/wrapper/ 中拥有 gradle-wrapper.jar 文件。 - dmahapatro
4个回答

49

可能出现了一些问题。解决方案:

  1. 安装gradle: brew install gradle
  2. 重新生成包装器: gradle wrapper

如果这个方法有效,那么您可以通过点击勾选来将其接受为“已接受的答案”,@MohammadRafayAleem。 - NecipAllef

11

1
谢谢,这也是我的问题。如果没有你的提示,我可能会无休止地搜索。 - Harold L. Brown
在这种情况下,您可能需要将*.jar!gradle/wrapper/gradle-wrapper.jar都添加到您的.gitignore文件中。 - diogo

1

当我尝试通过命令行构建我的应用程序时,遇到了与此相同或类似的问题,但是会抛出一个“java.lang.ClassNotFoundException: com.sun.tools.javac.util.Context”的异常,而在Android Studio内部构建时不会发生这种情况。我发现AS带有自己的JRE,并通过将'JAVA_HOME'设置为AS JRE路径来解决了这个问题。在我的情况下,它变成了:

$ JAVA_HOME=/opt/android-studio/jre ./gradlew build

您可以在“文件” -> “项目结构” -> “SDK位置”下找到此路径,参见截图。

enter image description here


1

当我有一个带有冒号的目录(没有引号,只是一个冒号)时,我遇到了这个问题。

这是在Linux机器上发生的。

之前:

"my:directory"

例如

/Users/me/projects/project1/my:directory/

然后我把它重命名为:
/Users/me/projects/project1/my_directory/

并且错误消失了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接