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

Al-*_*unk 40 java eclipse ggts

由于升级到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
Run Code Online (Sandbox Code Playgroud)

我曾经在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
Run Code Online (Sandbox Code Playgroud)

pen*_*uin 23

版本1.8.0_40和1.8.0_45使用grails进行了更新.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 .罐

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

然后我重命名那里的弹簧加载的jar并将符号链接放到上面的jar中.过去,您可以修改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版本清理你的grails项目.确保将java路径变量设置为指向预期版本.

set JAVA_HOME=C:\java\jdk1.8.0_25
set PATH=%JAVA_HOME%\bin;%PATH%;
Run Code Online (Sandbox Code Playgroud)


小智 20

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


dus*_*ine 19

我将我的springloaded jar更新到版本1.2.4.BUILD-SNAPSHOT(从1.2.1开始)并解决了这个问题.(最新版本可在Spring回购中找到)

  1. 转到当地的Grails lib目录以查找springloaded jar.对我来说就是这样/usr/local/Cellar/grails/2.4.4/libexec/lib/org.springframework/springloaded/jars/
  2. 删除现有的1.2.1罐子(我也删除了pom文件,但没有必要)
  3. 下载最新的springloaded 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)

  • 有用.但不要忘记:a.将新JAR重命名为旧JAR的文件名(例如:springloaded-1.2.1.RELEASE.jar)b.清理你的项目 (5认同)
  • 我也确认:springloaded-1.2.5 (2认同)

Hus*_*ri' 10

第1步:下载此jar

第2步:将它放入grails文件夹:grails-2.4.1/lib/org.springframework/springloaded/jars

应该够了,重新启动IDE


小智 6

根本原因,解决方法和修复新闻:https: //github.com/spring-projects/spring-loaded/issues/98