NoClassDefFoundError: 无法初始化 org.codehaus.groovy.vmplugin.v7.Java7类

当我运行春季启动应用程序时,我得到了这个异常 java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7 and java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.reflection.ReflectionCache)

我正在使用下面的工具

STS 3.9.10版本
打开 JDK 1464位
Spring boot 2.2.5 < br/>

它在 oraclejdk 上运行得很好,但是在 openjdk 上运行失败。我不会用任何有趣的词汇。这是基于 Maven 的弹簧启动项目。

265694 次浏览

你正在使用一些带有 Org.codehaus.groovy依赖项的第三方库吗?如果是,您可以自己尝试用最新的版本替换所需的 groovy 依赖项。

对我来说是 Org.liquibase: liquibase-groovy-dsl, 所以我这么做了:

    <dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-groovy-dsl</artifactId>
<version>2.1.1</version>
<exclusions>
<exclusion>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
</exclusion>
<exclusion>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-sql</artifactId>
</exclusion>
</exclusions>
</dependency>


<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>3.0.3</version>
</dependency>


<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-sql</artifactId>
<version>3.0.3</version>
</dependency>

如何运行应用程序?这可能是因为您使用了 Gradle 作为构建系统和 JDK14,而 Gradle 版本已经过时了。 参考文献: < a href = “ https://github.com/gradle/gradle/questions/10248”rel = “ noReferrer”> https://github.com/gradle/gradle/issues/10248

如果你使用的是 Gradle Wrapper,请参考 $PROJECT_ROOT/gradle/wrapper/gradle-wrapper.properties。属性 distributionUrl应该是: distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-bin.zip

如果是旧版本,那么更改它,运行 ./gradlew clean build并再试一次。

检查您的项目是否使用 Java14运行,即使它是为 Java8准备的。

我的 IntelliJ 创意在尝试执行一个在 JDK 8命令行中完美运行的 Gradle 任务时也出现了同样的错误。不过,ItelliJ Ideas 项目默认的 JDK 是14。

我解决这个问题时,集成 Facebook 的 7.19.2和谷歌发挥游戏 0.10.09

在我的案例中,JDK 和 SDK 使用默认路径 Unity:

JDK

C:/ProgramFiles/Unity/Hub/Editor/2019.2.12f1/Editor/Data/PlaybackEngines/AndroidPlayer/Tools\OpenJDK\Windows

SDK

C:/Program Files/Unity/Hub/Editor/2019.2.12f1/Editor/Data/PlaybackEngines/AndroidPlayer\SDK

环境变量(System Proporites/Advanced)接下来:

查找(或单击“用户变量”下的新变量)

  • 并添加根 JDK 路径。

  • 并添加路径 JDK/bin

  • 并添加路径 JDK/lib

此外,在系统变量中将这些路径添加到变量“ Path”。

不要使用来自默认 Unity 的 SDK 和来自非 Unity 默认的 JDK

然后重启 Unity (和更好的 PC)。

然后在编辑器统一 -Assets/Play -> Service -> Resolve/Android -> Resolver/Force -> Resolve

一切正常。

Maven & SpringBoot 项目也有同样的问题,没有 Gradle 什么的。

Groovy 对 org.codehaus.groovy 的依赖可能是通过 spring-cloud-contact-verifier 传递的。

我通过将 spring-cloud-agreement-maven-plugin 版本升级到2.2.3-RELEASE 修复了这个问题

如果您使用 Android Studio 4.0或更高版本,并出现如下错误

    Cause: invalid type code: 17
Cause: invalid type code: fe
Cause: invalid type code: 13
java.lang.NoClassDefFoundError: Could not initialize class

或者

它说 JDK 出了问题,然后按照下面的步骤来解决这个错误。

步骤1 : 首先从项目目录中删除 。级。想法文件夹,然后重新启动 Android Studio。确保它从垃圾桶里出来。

步骤2 : 转到项目结构

Project Structure

步骤3: 从 Project Architecture 窗口的左侧面板中选择 SDK 位置

步骤4: 转到 JDK 位置,点击向下箭头,然后选择 JRE而不是 JDK

C:\Program Files\Android\Android Studio\jre

JDK Location

它将解决错误。重建项目

注意: jre 是安装在 android Studio 4上的,不确定旧版本是否安装。

这个解决方案对我有效。

转到 JDK 11,应该可以。

在我的例子中,组合是 IntelliJ 2020.2、 Kotlin 1.3.72、 Maven 3.6.1和 SpringBoot 2.2.1应用程序。在项目中根本没有使用格拉德尔。

不知何故,IntelliJ 转而使用 OpenJDK14——当恢复到 OpenJDK11时,一切又开始工作了。

在文件 android/gradle/wrapper/gradle-wrapper.properties中,确保 distributionUrl如下:

distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-bin.zip

注意: 如果您安装了 jdk14

在我的例子中,运行配置中使用的 JRE 版本与 pom.xml 中的目标 JDK 版本不同

SpringBoot_Run_Config

解决这个问题的方法是在 window = > 偏好设置 = > java = > installedJRE = >。

确保在环境变量中设置了 java _ home 变量

我通过编辑 格莱德文件夹中的 梯级包装纸,性能文件解决了这个问题。(不是:

将这一行改为:

distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip

致:

distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip

重建,一切都会好起来的。

如果你正在寻找类似于@Godsim share 的解决方案,但是针对 gradle 库插件,那么修改 build.gradle 中的配置部分,以排除库的常规依赖关系:

configurations {
...
liquibaseRuntime.exclude group: "org.codehaus.groovy"
}

然后在依赖项部分手动添加 groovy:

dependencies {
...
liquibaseRuntime('org.liquibase:liquibase-core:3.8.1')
liquibaseRuntime('org.codehaus.groovy:groovy-all:3.0.3')
liquibaseRuntime 'org.postgresql:postgresql'
liquibaseRuntime('org.liquibase:liquibase-groovy-dsl:2.1.2')
liquibaseRuntime('org.liquibase.ext:liquibase-hibernate5:3.10.2')
liquibaseRuntime('org.springframework.boot:spring-boot-starter-data-jpa')
liquibaseRuntime sourceSets.main.output
...
}

只有当我使用 minSdkVersion 19将 buildeSdkVersion 和 targetSdkVersion 更新为30时,这个问题才得到解决

在使用旧版本的 spotbugs-maven-plugin插件和相应的 spotbugs maven 依赖项时出错。

通过升级到 4.2.0固定。

我通过在 pom.xml 中添加 ApacheGroovy 2.4.7修复了这个问题

对于 Maven 用户,请按照以下步骤来解决这个问题

  1. 您应该在 pom.xml/build.gradle 中的 jUnit 依赖项声明之前放置 reassure,以确保使用了正确的 Hamcrest 版本。
  2. 将以下依赖项添加到 pom.xml
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>3.0.8</version>
<type>pom</type>
</dependency>
<!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy -->
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>3.0.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-json -->
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-json</artifactId>
<version>3.0.8</version>
</dependency>

希望这能解决你的问题。对我有用。步骤1中提到的说明复制自“放心”官方网站。谢谢

如果您使用 Windows 操作系统并使用 Android Studio,则应以管理员身份运行 Android Studio。

在我专业的 Spring Boot 项目中,我通过添加依赖项来解决这个问题:

        <!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy -->
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>3.0.8</version>
</dependency>

我只是把项目的渐变版本改成了更新的版本。

a screenshot of the upgrade

另外,我用 Kotlin

IntelliJ 中需要检查的4件事:

  • 您的项目结构-> 项目-> SDK 和语言级别
  • 设置-> 构建,执行,部署-> 构建工具-> 分级,看看 Gradle JVM
  • 设置-> 构建,执行,部署-> 编译器-> Java 编译器
  • Gradle,Java { source 兼容性和 targetCompatiability }

让他们在 JDK/语言级别上达成一致应该没问题

我遇到过类似的问题,但是我的错误消息并不完全相同。

我从 Tarmo 那里得到了一些想法,并检查了 gradle 版本、 eclipse 版本和它使用的 JDK。

我的错误消息是:

> Could not open cp_init generic class cache for initialization script 'D:\xxx\TestingEnv\Dev1\eclipse\.metadata\.plugins\org.eclipse.buildship.core\init.d\eclipsePlugin.gradle' (C:\Users\xxx\.gradle\caches\5.6\scripts\6a5krabdzij62jglcll542e66\cp_init\cp_init8a51e2ebf3f7f8302cfbbb80ea3d4b3d).
> Could not initialize class org.codehaus.groovy.classgen.Verifier

我有吸毒史 SpringToolSuite4 版本: 4.9.0. 发布 Build Id: 202012132054 for development。

我有两个项目,项目 A 和项目 B。

项目 A,运行良好,没有梯度问题 在这个项目下,gradle > wrapper > gradle-wrapper. properties 我的分销网址是: 分布/Url = https://services.gradle.org/distributions/gradle-4.8-bin.zip

后来,我有另一个项目 B 和设置是:

项目 B: 在这个项目下,gradle > wrapper > gradle-wrapper. properties 我的分销网址是: 分布/Url = https://services.gradle.org/distributions/gradle-5.6.2-bin.zip

当我在 IDE 中选择“刷新等级”时,项目 B 继续失败的构建并输出上面提到的错误。

在从塔莫那里找到答案之前,我对此毫无头绪。

我做过的事情:

  1. 尝试更改发行版/url = https://services.gradle.org/distributions/gradle-6.3-bin.zip - 错误消息改为其他。(似乎我们在正确的方式)
  2. 检查 JDK 版本,Eclipse 使用该版本来启动它自己。
  • 在菜单栏 > 帮助 > 关于 Spring 工具套件4 > 安装细节 > 按“配置”选项卡 > 搜索以 -vm 开始的行
  • 它最初指向 OpenJDK,然后我将它改为指向本地机器上的 JDK 1.8。由于旧版本的 JDK 不支持它,所以启动失败。
  1. 我下载了旧版本的 STS St-4.4.1. 释放
  • 现在,我再次导入项目,按“刷新分级”,它工作正常,分级任务在 IDE 中正确显示。
  1. 在 sts-4.4.1. RELEASE 文件夹中,向 SpringToolSuite4.ini 中添加一个条目,以指向在我的本地 PC 上使用 JDK 1.8。
C:/Program Files/Java/jdk1.8.0_301/bin/javaw.exe

- 如果没有指定,默认情况下它将使用 openjdk 启动。指定我们使用的版本是一个很好的实践。

附录 SpringToolSuite4.ini Https://wiki.eclipse.org/eclipse.ini

它是来找我的创意,并得到解决后,设置 JAVA _ HOME 在。Zhrc 和。Bash _ profile,找到这两个文件的源代码并重新启动创意。

export JAVA_HOME="<Path to JDK just above bin " # For e.g it was "/opt/homebrew/opt/openjdk@11" in my Mac machine could be /Contents/Home based on you have used homebrew or manually gunzipped

这种情况也可能发生,因为您忘记在新克隆的 Android 项目中通过 local.properties 指示您的 Android SDK。