40

Java 1.8 にアップグレードしたため、GGTS (Eclipse) で grails アプリケーションを実行する際に問題が発生しました。

スタックは次で始まります。

Mar 05, 2015 3:51:31 PM org.springsource.loaded.jvm.JVM copyMethod
SEVERE: Problems copying method. Incompatible JVM?
java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor91.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springsource.loaded.jvm.JVM.copyMethod(JVM.java:134)
    at org.springsource.loaded.ri.OriginalClassInvoker.createJavaMethod(OriginalClassInvoker.java:68)
    at org.springsource.loaded.ri.ReflectiveInterceptor.jlClassGetDeclaredMethods(ReflectiveInterceptor.java:151)
    at org.codehaus.groovy.reflection.CachedClass$3$1.run(CachedClass.java:84)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:81)
...
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1270)
    at org.codehaus.groovy.grails.cli.support.GrailsStarter.rootLoader(GrailsStarter.java:236)
    at org.codehaus.groovy.grails.cli.support.GrailsStarter.main(GrailsStarter.java:264)
Caused by: java.lang.IllegalArgumentException: Can not copy a non-root Method
    at java.lang.reflect.Method.copy(Method.java:151)
    ... 280 more

Java 1.7 で同じアプリケーションを実行していました。同僚が 1.8 にアップグレードしたところ、実行できなくなりました。

SUN JDK でテストしましたが、現在は OpenJDK を再度使用していますが、現在の JDK openjdk バージョン "1.8.0_40"は役に立ちません。

JAVA_HOME、JAVA_PATH、およびその他の変数は、正しい JDK インストールを指しているようです。以前のものをすべて削除しました(JDK 1.6および1.7をOSから削除して、それらへの参照がないことを確認しました)。

何らかの理由で、GGTS はまだ間違った JVM について不平を言っています。このエラーは、1.8 でファイルをコンパイルしようとしているコンパイラ 1.7 に関連している可能性があることは理解していますが、この参照が Eclipse のどこから来ているのかはわかりません。

私のEclipseインストール情報には、Javaの下に次のものがリストされています。

-vm
/usr/lib64/jvm/jre-1.8.0-openjdk/bin/java
eclipse.home.location=file:/home/arb/dev/applications/ggts-3.6.3.SR1/
eclipse.launcher=/home/arb/dev/applications/ggts-3.6.3.SR1/GGTS
eclipse.launcher.name=GGTS
eclipse.p2.data.area=@config.dir/../p2
eclipse.p2.profile=DefaultProfile
eclipse.product=org.springsource.ggts.ide
eclipse.startTime=1425566898624
eclipse.stateSaveDelayInterval=30000
eclipse.vm=/usr/lib64/jvm/jre-1.8.0-openjdk/bin/java
eclipse.vmargs=-Dgrails.console.enable.interactive=false
-Dgrails.console.enable.terminal=false
-Djline.terminal=jline.UnsupportedTerminal
-Dgrails.console.class=grails.build.logging.GrailsEclipseConsole
-Dosgi.requiredJavaVersion=1.6
-Xms60m
-Xmx1024m
4

10 に答える 10

19

スプリングロードされた jar をバージョン 1.2.4.BUILD-SNAPSHOT (1.2.1 から) に更新し、問題を解決しました。(最新バージョンはSpring リポジトリにあります)

  1. ローカルの Grails lib ディレクトリに移動して、スプリングロードされた jar を見つけます。私にとってはそうでした/usr/local/Cellar/grails/2.4.4/libexec/lib/org.springframework/springloaded/jars/
  2. 既存の 1.2.1 jar を削除します (pom ファイルも削除しましたが、必須ではありません)。
  3. 最新のスプリングロードされた jar をダウンロードし、サブディレクトリに配置しjarsます。 wget http://repo.spring.io/libs-snapshot-local/org/springframework/springloaded/1.2.4.BUILD-SNAPSHOT/springloaded-1.2.4.BUILD-SNAPSHOT.jar

それをした後、すべてが機能します。(以前の回答から使用された手がかり: https://github.com/spring-projects/spring-loaded/issues/98 )

于 2015-03-30T16:46:09.750 に答える
11

ステップ 1 : このjar をダウンロードする

ステップ 2 : grails フォルダーに入れます: grails-2.4.1/lib/org.springframework/springloaded/jars

十分なはずです。IDEを再起動してください

于 2015-11-27T09:23:47.077 に答える
4

私は Grails 2.4.3 を実行していますが、jdk1.8.0_31 から jdk1.8.0_40 への移行にも問題があり、jdk1.8.0_31 に戻る必要がありました。

Loading Grails 2.4.3
...
SEVERE: Problems copying method. Incompatible JVM?
java.lang.reflect.InvocationTargetException
...
Caused by: java.lang.IllegalArgumentException: Can not copy a non-root Method
at java.lang.reflect.Method.copy(Method.java:151)
于 2015-03-06T16:42:02.593 に答える
1

それを機能させるための2つのステップ

1. JDK 下位バージョンをダウンロードします。リンクhttp://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html#jdk-8u25-oth-JPR から jdk1.8.0_25 をインストールします。grails は上位バージョンをサポートしていないため、JDK の下位バージョンです。多分彼らはこれを最新バージョンにすぐに含めるでしょう。

2. 環境変数の設定: jdk の環境変数を変更することを忘れないでください。パス変数と JavaHome 変数を「C:\Program Files\Java\jdk1.8.0_'LatestVersion'」から「C 」に編集するだけです。 :\Program Files\Java\jdk1.8.0_25" .

于 2016-04-12T18:04:56.853 に答える
0

このトピックに 2 ペンスの価値を追加する必要があると思いました。最近、古いアプリを 2.4.4 にアップグレードしようとして同じ問題に遭遇しました。私の投稿の理由は、上記の手順はすべて少し古くなっているためであり、ほとんどの場合はうまくいくように見えるかもしれません. mysql ドライバーを導入した瞬間、上記のすべてのバージョンのスプリング ロードで、データベースをトリガーしようとしたときに非互換性と非ルートに関する新しい問題が発生しました。

JDK 1.8_065 で ggts が完全に動作するようになりました。それを機能させるには、springloaded-1.2.5.RELEASE.jarを取得します。これをgrails-2.4.4/lib/org.springframework/springloaded/jars/フォルダーに入れます。ggts-bundle フォルダー内に ggts をインストールすると、grails-2.4.4 になります。そのため、ggts-bundle フォルダー内の上記の場所にファイルを配置します。構成を変更していない限り。
何年もかけてGGTSを再起動し、手順を更新する必要があると考えました。

また、私が問題に遭遇したもう1つのことは、私のアップグレードでgrails 2.4.4の下でフォークし、最終的に設定することでした

grails.project.fork = []

私のBuildConfig.groovyでは

于 2015-12-21T19:20:34.483 に答える