【问题标题】:java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7java.lang.NoClassDefFoundError:无法初始化类 org.codehaus.groovy.vmplugin.v7.Java7
【发布时间】:2020-08-01 00:10:59
【问题描述】:

我在运行 Spring Boot 应用程序时收到此异常 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 14 64 位
Spring Boot 2.2.5

它在 oracle jdk 上运行良好,但在 openjdk 上运行失败。我没有使用任何 groovy 库。这是基于 Maven 的 Spring Boot 项目。

【问题讨论】:

  • 你应该明确你正在使用的构建工具。

标签: java spring-boot


【解决方案1】:

您是否使用了一些引入 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>

【讨论】:

    【解决方案2】:

    您如何运行应用程序?这可能是因为您使用 Gradle 作为构建系统和 JDK14 并且 Gradle 版本较旧。 参考: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 并重试。

    【讨论】:

    • 非常感谢,我尝试了很多方法来让 React Native 在我的机器上运行。这成功了!
    • 为了跟进这个问题,我正在使用 maven 和 brew 最近将我升级到 OpenJDK 14,所以我开始收到此错误。从这个答案到 gradle 问题的链接中,我发现了这个 groovy 问题:issues.apache.org/jira/browse/GROOVY-9211,它已在 Groovy 2.5.10 中得到修复——所以请确保将你的 groovy 版本升级到该版本或更高版本。为我解决了这个问题!
    • And use gradle-7.0-bin.zip for Java 16 -- "从 Gradle 7.0 开始,运行 Gradle 本身和使用 Java 构建 JVM 项目 16 完全支持。” docs.gradle.org/7.0/release-notes.html
    • 以下是 Gradle 6.3 版本的亮点: 1) Java 14 支持。 2) 改进了意外失败的错误消息。更多详情见docs.gradle.org/6.3/release-notes.html
    • 有关最新可用的 gradle 版本,请参见此处-gradle.org/install
    【解决方案3】:

    检查您的项目是否使用 Java 14 运行,即使它是为 Java 8 准备的。

    我的 IntelliJ Idea 在尝试执行使用 JDK 8 在命令行中完美运行的 Gradle 任务时给出了相同的错误。不过,ItelliJ Idea 项目的默认 JDK 为 14。

    【讨论】:

      【解决方案4】:

      我在集成 Facebook 7.19.2 和 Google play Games 0.10.09 时解决了这个问题。

      在我的情况下,JDK 和 SDK 使用(以及 Edit/Preferences/External -&gt; Tools-Android 中的其他)默认路径 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
      

      在环境变量(系统属性/高级)中添加了下一个:

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

      • JAVA_HOME 并添加根 JDK 路径。

      • JAVA_BIN并添加路径JDK/bin

      • JAVA_LIB并添加路径JDK/lib

      另外,将系统变量中的这些路径添加到变量“路径”中。

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

      然后重新启动 Unity(以及更好的 PC)。

      然后在 Unity 编辑器中 - Assets/Play -&gt; Service -&gt; Resolve/Android -&gt; Resolver/Force -&gt; Resolve

      一切正常。

      【讨论】:

        【解决方案5】:

        在 Maven 和 SpringBoot 项目中遇到了同样的问题,没有 Gradle。

        对 org.codehaus.groovy 的依赖可能通过 spring-cloud-contract-verifier 传递。运行mvn dependency:tree查看整个依赖树。

        我通过将 spring-cloud-contract-maven-plugin 版本升级到 2.2.3-RELEASE 来修复它

        【讨论】:

          【解决方案6】:

          如果您使用 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有问题然后按照以下步骤解决错误。

          第一步:首先从项目目录中删除.gradle.idea文件夹,然后重启Android Studio。确保它已从回收站中消失。

          第 2 步:转到项目结构

          第 3 步:从 Project Structure 窗口的左侧面板中选择 SDK Location

          第 4 步:转到 JDK Location 并单击向下箭头,然后选择 jre 而不是 jdk

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

          它会解决错误。重建项目

          注意: jre 自带 android studio 4 安装不确定旧版本。

          这个解决方案对我有用。

          【讨论】:

            【解决方案7】:

            迁移到 JDK 11,它应该可以工作。

            【讨论】:

              【解决方案8】:

              就我而言,组合是 IntelliJ 2020.2、Kotlin 1.3.72、Maven 3.6.1 和 SpringBoot 2.2.1 应用程序。项目中根本没有使用 Gradle。

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

              【讨论】:

              • 恢复意外提升的 JDK 版本对我来说也很有效。
              【解决方案9】:

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

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

              注意:如果你安装了 jdk 14

              【讨论】:

                【解决方案10】:

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

                【讨论】:

                • 这绝对是我的问题的范围。不过对我来说,我只需要将 JRE 从我安装的任何一个更改为简单的“捆绑”。 CMIIW,但似乎我已经使用mvn clean install 正确安装了项目,然后可能捆绑意味着我只是使用我安装的包而不是我机器上安装的 JRE/JDK。但真的是CMIIW。这对我有用。
                【解决方案11】:

                我通过在窗口中选择 Installed JRE path => preferences => java => installed JRE => remve existing & select from local directory 解决了这个问题。

                确保在环境变量中设置了 java_home 变量

                【讨论】:

                  【解决方案12】:

                  我通过编辑 gradle 文件夹中的 gradle-wrapper.properties 文件解决了这个问题。 (不是 .gradle):

                  更改此行,来自:

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

                  到:

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

                  重新编译就可以了。

                  【讨论】:

                    【解决方案13】:

                    如果您正在寻找与 @godsim 共享的类似解决方案,但对于 gradle liquabase 插件,请修改 build.gradle 中的配置部分以排除 liquabase 的 groovy 依赖项:

                    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
                        ...
                    }
                    

                    【讨论】:

                      【解决方案14】:

                      仅当我使用 minSdkVersion 19 将 compileSdkVersion 和 targetSdkVersion 更新为 30 时,此问题才为我解决

                      【讨论】:

                        【解决方案15】:

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

                        通过将两者都升级到 4.2.0 来修复。

                        【讨论】:

                          【解决方案16】:

                          我通过在 pom.xml 中添加 Apache Groovy 2.4.7 解决了这个问题

                          【讨论】:

                          • 非常感谢!这节省了我一些时间!我无法让它在非常特定的环境中工作,并且 - 尝试了此处提到的所有解决方案,以及各种版本组合,并且即将打破某些东西
                          【解决方案17】:

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

                          1. 您应该在 pom.xml / build.gradle 中的 JUnit 依赖声明之前放置 rest-assured,以确保使用正确版本的 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 步中提到的说明来自 Rest Assured 官方网站。谢谢

                          【讨论】:

                            【解决方案18】:

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

                            【讨论】:

                            • 这与安卓无关。此外,“以管理员身份运行 XYZ”之类的提示通常没有帮助。
                            【解决方案19】:

                            在我的maven 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>
                            

                            【讨论】:

                              【解决方案20】:

                              我只是将项目的 gradle 版本更改为较新的版本。

                              PS。我用科特林

                              【讨论】:

                              • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
                              猜你喜欢
                              • 2020-12-17
                              • 2021-02-08
                              • 2012-10-10
                              • 2013-08-08
                              • 2020-09-27
                              • 2012-08-26
                              • 2015-10-29
                              相关资源
                              最近更新 更多