Ottenere NoClassDefFoundError: impossibile inizializzare la classe org.codehaus.groovy.vmplugin.v7.Java7
Ricevo il seguente errore quando avvio la mia applicazione Spring Boot.
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]
Dopo molte ricerche, ho trovato diverse istanze di questo tra cui java.lang.NoClassDefFoundError: Impossibile inizializzare la classe org.codehaus.groovy.vmplugin.v7.Java7 , ma la maggior parte sono vecchi post su versioni precedenti di gradle e groovy o sono correlati a Android.
Ecco le informazioni sulla mia versione:
$ 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
Non sto facendo alcun groovy a parte i miei test unitari che sono interamente groovy / spock e sto usando gradle per il mio motore di costruzione.
Seguendo le indicazioni che ho trovato, sono andato avanti e ho cambiato il mio gradle-wrapper.propertiesfile in
distributionUrl=https\://services.gradle.org/distributions/gradle-6.6-bin.zip
era 6,5 bidoni.
Questo progetto stava funzionando bene sul mio vecchio computer con Java 8. L'ho spostato sulla mia nuova workstation e sto cercando di passare a open JDK 14, ed è allora che è iniziato il nuovo problema.
Chiedendosi dove andare da qui.
Risposte
A partire dal https://github.com/gradle/gradle/issues/10248
Sembra che GROOVY-9211 non sarà sottoposto a backport a 2.5.x. Quindi sembra che Gradle dovrà aggiornare a Groovy 3.x una volta uscito per supportare JDK 14.
Dovrai usare JDK 13 finché Gradle non utilizzerà Groovy 3.x.
Ho avuto lo stesso problema usando Maven 3.2. e JDK 1.8. L'aggiornamento a JDK 11 lo ha risolto.