GGTS (Eclipse) 和 JAVA 1.8 中不兼容的 JVM
Incompatible JVM in GGTS (Eclipse) and JAVA 1.8
由于升级到 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.run(CachedClass.java:84)
at java.security.AccessController.doPrivileged(Native Method)
at org.codehaus.groovy.reflection.CachedClass.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 安装。我已经删除了之前的所有内容(OS 中的 JDK 1.6 & 1.7 以确保没有对它们的引用)。
出于某种原因,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
版本 1.8.0_40 和 1.8.0_45 对 grails 进行了重大更新。
Spring不能复制非Root方法。
自最初发布以来,已经制定了解决方法。
aclement commented on Mar 5
Here is the build:
http://repo.spring.io/libs-snapshot-local/org/springframework/springloaded/1.2.2.BUILD-SNAPSHOT/springloaded-1.2.2.BUILD-SNAPSHOT.jar
To test it under grails, what I do is go into the grails folder:
grails-2.5.0/lib/org.springframework/springloaded/jars
I then rename the spring loaded jar that is there and put in a symlink
to the jar above. It used to be that you could just modify the
startGrails script to point to the new version, but now due to the
forking I find you need to do the symlink thing. Or drop that jar into
this folder and rename it to match the expectations of grails (rename
it from springloaded-1.2.2.BUILD-SNAPSHOT.jar to
springloaded-1.2.0.RELEASE.jar)
如果您想回滚
1.8.0_25、1.8.0_31
原生支持 Grails
一旦你有了兼容的 java 版本,清理你的 grails 项目。
确保您的 java 路径变量设置为指向您的预期版本。
set JAVA_HOME=C:\java\jdk1.8.0_25
set PATH=%JAVA_HOME%\bin;%PATH%;
是jdk8u40相关的问题,回jdku31。它适用于该版本。
我 运行 在 windows 和 linux 环境中遇到同样的问题。
我是 运行 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
我将我的 springloaded jar 更新到版本 1.2.4.BUILD-SNAPSHOT(从 1.2.1 开始)并解决了这个问题。 (最新版本可以在Spring repo中找到)
- 转到您本地的 Grails lib 目录以查找 springloaded jar。对我来说那是
/usr/local/Cellar/grails/2.4.4/libexec/lib/org.springframework/springloaded/jars/
- 删除现有的 1.2.1 jar(我也删除了 pom 文件,但不是必需的)
- 下载最新的 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)
来自 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 步:下载此 jar
第2步:放入grails文件夹:grails-2.4.1/lib/org.springframework/springloaded/jars
应该够了,重启IDE
我想我应该在这个话题上加两便士。最近我在尝试将一个古老的应用程序升级到 2.4.4 时遇到了同样的问题。我的 post 的原因是因为上面的所有说明都有点过时了,而在大多数情况下它似乎可以工作。在您引入 mysql 驱动程序的那一刻,所有上述 spring 版本的驱动程序在尝试触发数据库时遇到了一个关于不兼容和非 root 的新问题。
我让 ggts 完全与 JDK 1.8_065 一起工作。要使其正常工作,请将 springloaded-1.2.5.RELEASE.jar 放入 grails-2.4.4/lib/org.springframework/springloaded/jars/
文件夹中。
当你安装 ggts 里面的 ggts-bundle 文件夹是 grails-2.4.4。所以将文件放在 ggts-bundle 文件夹中的上述位置。除非你更改了配置。
重新启动 GGTS
我花了很长时间,认为我应该更新说明。
我遇到的另一件事是在升级后在 grails 2.4.4 下分叉并最终设置
grails.project.fork = []
在我的BuildConfig.groovy
两步让它发挥作用
1.下载JDK低版本:
从 link http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html#jdk-8u25-oth-JPR 安装 jdk1.8.0_25。它是 JDK 的较低版本,因为 grails 不支持较高版本。也许他们很快就会将其包含在最新版本中。
2。设置环境变量:
不要忘记更改 jdk 的环境变量,您只需将路径变量和 JavaHome 变量从 "C:\Program Files\Java\jdk1.8.0_'LatestVersion'" 编辑为 "C:\Program Files\Java\jdk1.8.0_25" 。
在我的 pom.xml 中更改 springloaded 版本就成功了。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.6.RELEASE</version>
</dependency>
当我遇到这个问题时,我的 springloaded 版本是 1.2。1.RELEASE
由于升级到 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.run(CachedClass.java:84)
at java.security.AccessController.doPrivileged(Native Method)
at org.codehaus.groovy.reflection.CachedClass.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 安装。我已经删除了之前的所有内容(OS 中的 JDK 1.6 & 1.7 以确保没有对它们的引用)。
出于某种原因,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
版本 1.8.0_40 和 1.8.0_45 对 grails 进行了重大更新。 Spring不能复制非Root方法。
自最初发布以来,已经制定了解决方法。
aclement commented on Mar 5 Here is the build: http://repo.spring.io/libs-snapshot-local/org/springframework/springloaded/1.2.2.BUILD-SNAPSHOT/springloaded-1.2.2.BUILD-SNAPSHOT.jar
To test it under grails, what I do is go into the grails folder: grails-2.5.0/lib/org.springframework/springloaded/jars
I then rename the spring loaded jar that is there and put in a symlink to the jar above. It used to be that you could just modify the startGrails script to point to the new version, but now due to the forking I find you need to do the symlink thing. Or drop that jar into this folder and rename it to match the expectations of grails (rename it from springloaded-1.2.2.BUILD-SNAPSHOT.jar to springloaded-1.2.0.RELEASE.jar)
如果您想回滚
1.8.0_25、1.8.0_31
原生支持 Grails一旦你有了兼容的 java 版本,清理你的 grails 项目。 确保您的 java 路径变量设置为指向您的预期版本。
set JAVA_HOME=C:\java\jdk1.8.0_25
set PATH=%JAVA_HOME%\bin;%PATH%;
是jdk8u40相关的问题,回jdku31。它适用于该版本。 我 运行 在 windows 和 linux 环境中遇到同样的问题。
我是 运行 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
我将我的 springloaded jar 更新到版本 1.2.4.BUILD-SNAPSHOT(从 1.2.1 开始)并解决了这个问题。 (最新版本可以在Spring repo中找到)
- 转到您本地的 Grails lib 目录以查找 springloaded jar。对我来说那是
/usr/local/Cellar/grails/2.4.4/libexec/lib/org.springframework/springloaded/jars/
- 删除现有的 1.2.1 jar(我也删除了 pom 文件,但不是必需的)
- 下载最新的 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)
来自 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 步:下载此 jar
第2步:放入grails文件夹:grails-2.4.1/lib/org.springframework/springloaded/jars
应该够了,重启IDE
我想我应该在这个话题上加两便士。最近我在尝试将一个古老的应用程序升级到 2.4.4 时遇到了同样的问题。我的 post 的原因是因为上面的所有说明都有点过时了,而在大多数情况下它似乎可以工作。在您引入 mysql 驱动程序的那一刻,所有上述 spring 版本的驱动程序在尝试触发数据库时遇到了一个关于不兼容和非 root 的新问题。
我让 ggts 完全与 JDK 1.8_065 一起工作。要使其正常工作,请将 springloaded-1.2.5.RELEASE.jar 放入 grails-2.4.4/lib/org.springframework/springloaded/jars/
文件夹中。
当你安装 ggts 里面的 ggts-bundle 文件夹是 grails-2.4.4。所以将文件放在 ggts-bundle 文件夹中的上述位置。除非你更改了配置。
重新启动 GGTS
我花了很长时间,认为我应该更新说明。
我遇到的另一件事是在升级后在 grails 2.4.4 下分叉并最终设置
grails.project.fork = []
在我的BuildConfig.groovy
两步让它发挥作用
1.下载JDK低版本: 从 link http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html#jdk-8u25-oth-JPR 安装 jdk1.8.0_25。它是 JDK 的较低版本,因为 grails 不支持较高版本。也许他们很快就会将其包含在最新版本中。
2。设置环境变量: 不要忘记更改 jdk 的环境变量,您只需将路径变量和 JavaHome 变量从 "C:\Program Files\Java\jdk1.8.0_'LatestVersion'" 编辑为 "C:\Program Files\Java\jdk1.8.0_25" 。
在我的 pom.xml 中更改 springloaded 版本就成功了。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.6.RELEASE</version>
</dependency>
当我遇到这个问题时,我的 springloaded 版本是 1.2。1.RELEASE