Bắt NoClassDefFoundError: Không thể khởi chạy lớp org.codehaus.groovy.vmplugin.v7.Java7

Aug 29 2020

Tôi gặp lỗi sau khi khởi động ứng dụng Spring Boot của mình.

java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.reflection.ReflectionCache
    at org.codehaus.groovy.runtime.dgmimpl.NumberNumberMetaMethod.<clinit>(NumberNumberMetaMethod.java:33) ~[groovy-2.5.8.jar:2.5.8]
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) ~[na:na]
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481) ~[na:na]
    at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.createMetaMethodFromClass(MetaClassRegistryImpl.java:258) ~[groovy-2.5.8.jar:2.5.8]
    at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:111) ~[groovy-2.5.8.jar:2.5.8]
    at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:86) ~[groovy-2.5.8.jar:2.5.8]
    at groovy.lang.GroovySystem.<clinit>(GroovySystem.java:36) ~[groovy-2.5.8.jar:2.5.8]
    at org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader.<init>(GroovyBeanDefinitionReader.java:150) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
    at org.springframework.boot.BeanDefinitionLoader.<init>(BeanDefinitionLoader.java:85) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
    at org.springframework.boot.SpringApplication.createBeanDefinitionLoader(SpringApplication.java:738) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
    at org.springframework.boot.SpringApplication.load(SpringApplication.java:681) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
    at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:392) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
    at pizzainthecloud.pizzaplace.Application.main(Application.java:23) ~[main/:na]

Sau nhiều lần tìm kiếm, tôi đã tìm thấy một số trường hợp này bao gồm java.lang.NoClassDefFoundError: Không thể khởi tạo lớp org.codehaus.groovy.vmplugin.v7.Java7 , nhưng hầu hết là các bài đăng cũ hơn trên các phiên bản cũ hơn của gradle và groovy hoặc chúng có liên quan đến android.

Đây là thông tin phiên bản của tôi:

$ gradle -version

------------------------------------------------------------
Gradle 6.6.1
------------------------------------------------------------

Build time:   2020-08-25 16:29:12 UTC
Revision:     f2d1fb54a951d8b11d25748e4711bec8d128d7e3

Kotlin:       1.3.72
Groovy:       2.5.12
Ant:          Apache Ant(TM) version 1.10.8 compiled on May 10 2020
JVM:          14.0.2 (Oracle Corporation 14.0.2+12-46)
OS:           Linux 5.4.0-42-generic amd64

Tôi không thực hiện bất kỳ điều kỳ lạ nào ngoài các bài kiểm tra đơn vị của tôi hoàn toàn phức tạp / spock và tôi đang sử dụng gradle cho công cụ xây dựng của mình.

Làm theo chỉ dẫn tôi đã tìm thấy, tôi đã tiếp tục và thay đổi gradle-wrapper.propertiestệp của mình thành

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

nó là 6,5-bin.

Dự án này đang chạy tốt trên máy tính cũ của tôi với Java 8. Tôi đã chuyển nó sang máy trạm mới của mình và đang cố gắng chuyển sang open JDK 14, và đó là khi vấn đề mới bắt đầu.

Tự hỏi nơi để đi từ đây.

Trả lời

2 VladUlshin Aug 29 2020 at 01:23

Từ https://github.com/gradle/gradle/issues/10248

Có vẻ như GROOVY-9211 sẽ không được hỗ trợ lại thành 2.5.x. Vì vậy, có vẻ như Gradle sẽ cần phải nâng cấp lên Groovy 3.x khi nó ra mắt để hỗ trợ JDK 14.

Bạn sẽ cần sử dụng JDK 13 cho đến khi Gradle sử dụng Groovy 3.x.

EdorLinus Nov 03 2020 at 23:24

Tôi đã gặp vấn đề tương tự khi sử dụng maven 3.2. và JDK 1.8. Nâng cấp lên JDK 11 đã giải quyết được vấn đề này.