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

由于升级到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进行了testing,现在我又在OpenJDK上了,这并没有帮助当前的JDK openjdk版本“1.8.0_40”

JAVA_HOME,JAVA_PATH和其他任何variables似乎指向正确的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 

这是与jdk8u40有关的问题,请回到jdku31。 它在那个版本中工作。 我在Windows和Linux环境中遇到了同样的问题。

版本1.8.0_40和1.8.0_45已经与grails更新。 Spring不能复制非Root方法。

自从最初发布一个解决方法已经开发。

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

要在grails下testing它,我要做的是进入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项目。 确保您的javapathvariables设置为指向您的预期版本。

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

我更新了我的弹簧加载的jar版本1.2.4.BUILD-SNAPSHOT(从1.2.1),并解决了这个问题。 (最新版本可以在Spring回购中find)

  1. 去你当地的Grails lib目录find弹簧加载的jar。 对我来说那是/usr/local/Cellar/grails/2.4.4/libexec/lib/org.springframework/springloaded/jars/
  2. 删除现有的1.2.1jar(我也删除了POM文件,但不是必要的)
  3. 下载最新的弹簧加载jar并放入jars subdir: 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 )

根源,解决方法和新闻在这里修复: https : //github.com/spring-projects/spring-loaded/issues/98

第1步:下载这个jar子

第2步:把它放到grails文件夹中:grails-2.4.1 / lib / org.springframework / springloaded / jars

应该够了,重启IDE

我正在运行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) 

https://github.com/spring-projects/spring-loaded/issues/98和工作给我;

wget repo.spring.io/libs-snapshot-local/org/springframework/springloaded/1.2.3.BUILD-SNAPSHOT/springloaded-1.2.3.BUILD-SNAPSHOT.jar -O ~/.gvm/grails/2.4.4/lib/org.springframework/springloaded/jars/springloaded-1.2.1.RELEASE.jar

两步工作

1.下载JDK Lower Version:从链接http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html#jdk-8u25-oth-JPR安装jdk1.8.0_25。; 这是JDK的较低版本,因为grails不支持更高版本。 也许他们很快就会把它包含在最新版本中。

2.设置环境variables:不要忘记更改jdk的Enviromentalvariables,只需要将Pathvariables和JavaHomevariables从“C:\ Program Files \ Java \ jdk1.8.0_'LatestVersion”编辑为“C :\ Program Files \ Java \ jdk1.8.0_25“

我想我应该在这个话题上加上我的两便士。 最近我遇到同样的问题,试图将一个古老的应用程序升级到2.4.4。 我的post的原因是因为所有上述说明都是过时的,而在大多数情况下,它似乎工作。 在你介绍mysql驱动程序的那一刻,上面提到的所有弹簧加载版本在尝试触发数据库时遇到了不兼容问题和Non-root问题。

我已经完全使用JDK 1.8_065。 使其工作得到springloaded-1.2.5.RELEASE.jar把它放到grails-2.4.4/lib/org.springframework/springloaded/jars/文件夹中。 当你在ggts-bundle文件夹中安装ggts的时候是grails-2.4.4。 所以把这个文件放在ggts-bundle文件夹的上面的位置。 除非你改变了configuration。
重新启动GGTS我花了很多年,并认为我应该更新说明。

另外我遇到的问题是在grails 2.4.4下用uprade分叉,最后设置

 grails.project.fork = [] 

在我的BuildConfig.groovy

改变我的pom.xml中的springloaded版本的窍门。

 <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.6.RELEASE</version> </dependency> 

当我遇到这个问题我的springloaded版本是1.2.1.RELEASE