sdkman установил grails 4.0.4, теперь grails не работает и не запускается - PullRequest
0 голосов
/ 03 августа 2020

У меня установлена ​​более старая версия grails (3.3.8), и я попытался использовать sdkman для установки более новой версии (4.0.4). Установка прошла успешно, но теперь grails полностью не работает. Я также обновил java до 14 из dmg с сайта oracle. В основном grails теперь полностью сломан. Есть идеи, как исправить?

ma c 10.14.4

$ sdk version
  SDKMAN 5.7.3+337

$ sdk current java
  Not using any version of java

$ java -version
  java version "14.0.2" 2020-07-14
  Java(TM) SE Runtime Environment (build 14.0.2+12-46)
  Java HotSpot(TM) 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)

$ sdk current
  Using:
  groovy: 2.5.8

$ grails --version
  | Grails Version: 3.3.8
  | Groovy Version: 2.4.15
  | JVM Version: 14.0.2

$ sdk install grails
Downloading: grails 4.0.4
In progress...
######################################################################## 100.0%
Installing: grails 4.0.4
Done installing!
Setting grails 4.0.4 as default.

$ sdk current
 Using:
 groovy: 2.5.8

 $ grails --version
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)

Я не вижу простого способа удалить java 14 или go назад во времени.

echo $PATH
/Users/xx/.sdkman/candidates/groovy/current/bin:/Users/xx/.sdkman/candidates/grails/current/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Appz/apache-jmeter-5.3/bin:/usr/local/go/bin:/usr/local/share/dotnet:/opt/X11/bin:~/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Users/xx/go/bin:/Users/xx/dev/grails-3.3.8/bin:/Users/xx/dev/flutter/bin:/Users/xx/dev/gradle-5.1.1/bin:/appz/cassandra/bin

Думаю, я могу попробовать взломать путь et c, чтобы исправить.

Это мой текущий .bash_profile:

vi .bash_profile

export JAVA_HOME=`/usr/libexec/java_home`
export GRAILS_HOME=/Users/xx/dev/grails-3.3.8

export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
export PATH=$PATH:$GRAILS_HOME/bin

# Setting PATH for Python 3.7
# The original version is saved in .bash_profile.pysave
export GRADLE_HOME=/Users/xx/dev/gradle-5.1.1
PATH="/Library/Frameworks/Python.framework/Versions/3.7/bin:${PATH}"
PATH="${PATH}:/Users/xx/dev/flutter/bin"
PATH=$PATH:$GRADLE_HOME/bin


# Cassandra
if [ -d "/appz/cassandra" ]; then
    export PATH="$PATH:/appz/cassandra/bin"
fi

export PATH

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/Users/simonh/.sdkman"
[[ -s "/Users/xx/.sdkman/xx/sdkman-init.sh" ]] && source "/Users/xx/.sdkman/bin/sdkman-init.sh"
~                                       

Это Странно, почему grails home по-прежнему 3.3.8, когда sdkman установил и сделал 4.0.4 текущей? Почему он не отредактировал путь? Какую версию мне следует установить в Gradle? Как мне go вернуться к java 8, если я думаю, что в java 14 есть ошибки, которые вызывают проблемы с grails?

1 Ответ

0 голосов
/ 03 августа 2020

ОК, разобрался.

Сначала пришлось вручную поправить версию java.

Для этого go на

 $ /usr/libexec
 $ ./java_home -V

Это выводит одну или несколько версий:

14.0.2, x86_64: "Java SE 14.0.2"    /Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/Contents/Home
1.8.0_131, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

Теперь отредактируйте наш .bash_profile и замените строку JAVA_HOME нужной версией, либо целиком (1.8.0_131), либо только основным (1.8), таким образом:

 export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

Теперь, когда вы открываете новое окно и выполняете «java -version», вы получаете 1.8, а когда вы выполняете «grails -version», я наконец получаю 4.0.4.

Ура!

Странно то, что простое изменение JAVA_HOME не должно влиять на то, что находится на пути, но кажется, что это так. т.е. просто установка JAVA_HOME не должна влиять на то, какая версия java запускается, когда я набираю «java», но это так. т.е. в muy bash_profile нет такой строки, как «PATH = $ PATH: $ JAVA_HOME / bin.

...