3

我已经阅读了 Grails 4.X 文档,该文档似乎没有指出它可以使用的 Java 版本,只是说它不再适用于 java 7。

在安装 Grails 4.0.3 之前,您至少需要安装 1.8 或更高版本的 Java 开发工具包 (JDK)。

-- http://docs.grails.org/latest/guide/gettingStarted.html

我正在使用 sdk-man 在我的 Mac 上安装 14.0.1+7 运行。当我尝试构建现有的 grails 项目或创建新项目时,它会失败并出现错误。

重现步骤:

  1. 使用 sdk-man 安装 jdk 14sdk install java 14.0.1-open

  2. 安装 Grailssdk install grails 4.0.3

  3. 创建 Grails 项目grails create-app MyApp

  4. 结果

$ grails create-app testJDK14
java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7
        at org.codehaus.groovy.vmplugin.VMPluginFactory.<clinit>(VMPluginFactory.java:43)
        at org.codehaus.groovy.reflection.GroovyClassValueFactory.<clinit>(GroovyClassValueFactory.java:35)
        at org.codehaus.groovy.reflection.ClassInfo.<clinit>(ClassInfo.java:107)
        at org.codehaus.groovy.reflection.ReflectionCache.getCachedClass(ReflectionCache.java:95)
        at org.codehaus.groovy.reflection.ReflectionCache.<clinit>(ReflectionCache.java:39)
        at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerMethods(MetaClassRegistryImpl.java:209)
        at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:107)
        at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:85)
        at groovy.lang.GroovySystem.<clinit>(GroovySystem.java:36)
        at org.codehaus.groovy.runtime.InvokerHelper.<clinit>(InvokerHelper.java:86)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.bitwiseNegate(ScriptBytecodeAdapter.java:842)
        at org.grails.config.NavigableMap.<clinit>(NavigableMap.groovy)
        at org.grails.cli.GrailsCli.<clinit>(GrailsCli.groovy:77)
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.reflection.ReflectionCache
        at org.codehaus.groovy.runtime.dgmimpl.NumberNumberMetaMethod.<clinit>(NumberNumberMetaMethod.java:33)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
        at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:124)
        at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:346)
        at java.base/java.lang.Class.newInstance(Class.java:604)
        at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.createMetaMethodFromClass(MetaClassRegistryImpl.java:257)
        at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:110)
        at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:85)
        at groovy.lang.GroovySystem.<clinit>(GroovySystem.java:36)
        at org.codehaus.groovy.runtime.InvokerHelper.<clinit>(InvokerHelper.java:86)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.bitwiseNegate(ScriptBytecodeAdapter.java:842)
        at org.grails.config.NavigableMap.<clinit>(NavigableMap.groovy)
        at org.grails.cli.GrailsCli.<clinit>(GrailsCli.groovy:77)

我发现Grails 附带的 jdk 14 和 gradle 5.1.1的相关问题建议将 gradle 升级到 6.3+。它不是特定于 Grails 的。

因此,我使用 gradle-wrapper.properties 文件在我的 Grails 项目中升级了 gradle,但仍然收到相同的结果,尽管这对许多使用 Gradle 的人来说是清除了它,但不是 Grails。

是否有已知可与 Grails 4.X 一起使用的 JDK 列表?

4

1 回答 1

4

grails 4.0.x 不支持的 JDK14。使用 LTS 版本,例如 Java 11 或 8。等到 grails 更新到最新版本

Grails 所基于的 Spring-boot最近增加了对 JDK 14的支持。Grails 4.1.x 系列可能会支持 JDK 14。

于 2020-05-21T15:52:35.707 回答