GGTS(Eclipse)和JAVA 1.8中不兼容的JVM

2022-09-01 02:56:47

由于升级到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,以确保没有引用它们)。

由于某种原因,GGTS仍然抱怨错误的JVM。我知道这个错误可能与编译器1.7试图在1.8中编译文件有关,但我不确定这个引用在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

答案 1

版本 1.8.0_40 和 1.8.0_45 具有带有圣杯的突破性更新。Spring不能复制非Root方法。

自最初发布以来,已经开发了一个解决方法。

aclement评论了3月5日这里是构建:http://repo.spring.io/libs-snapshot-local/org/springframework/springloaded/1.2.2.BUILD-SNAPSHOT/springloaded-1.2.2.BUILD-SNAPSHOT.jar

为了在圣杯下测试它,我所做的是进入圣杯文件夹:grails-2.5.0/lib/org.springframework/springloaded/jars

然后,我重命名了弹簧加载的罐子,并放入与上面的罐子的符号链接。过去,您可以修改startGrails脚本以指向新版本,但现在由于分叉,我发现您需要执行符号链接。或者将该jar放入此文件夹并重命名以符合grails的期望(将其从springloaded-1.2.2.BUILD-SNAPSHOT重命名.jar为springloaded-1.2.0.RELEASE.jar)

如果要改为回滚

Grails 在 1.8.0_25、1.8.0_31 中原生支持

http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html#jdk-8u25-oth-JPR

一旦你有一个兼容的java版本,清理你的圣杯项目。确保将 Java 路径变量设置为指向预期版本。

set JAVA_HOME=C:\java\jdk1.8.0_25
set PATH=%JAVA_HOME%\bin;%PATH%;

答案 2

这是一个与jdk8u40相关的问题,回到jdku31。它适用于该版本。我在Windows和Linux环境中都遇到了同样的问题。


推荐