JVM incompatibile in GGTS (Eclipse) e JAVA 1.8

Avere qualche problema con l’esecuzione di un’applicazione Grails in GGTS (eclipse) a causa dell’aggiornamento a Java 1.8.

Lo stack inizia con:

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 

Ho usato per eseguire la stessa applicazione in Java 1.7. I miei colleghi sono passati a 1.8 e non sono più in grado di eseguirlo.

Ho provato con SUN JDK e ora sono di nuovo su OpenJDK e questo non aiuta la versione corrente di JDK openjdk “1.8.0_40”

JAVA_HOME, JAVA_PATH e qualsiasi altra variabile sembra puntare all’installazione JDK corretta. Ho rimosso tutto il precedente (JDK 1.6 e 1.7 dal sistema operativo per essere sicuro che non ci sia riferimento a loro).

Per qualche motivo GGTS lamenta ancora una JVM sbagliata. Capisco che l’errore potrebbe essere correlato a un compilatore 1.7 che tenta di compilare i file in 1.8, ma non sono sicuro di dove questo riferimento provenga da in eclipse.

Le informazioni di installazione di My Eclipse elencano quanto segue in 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 [email protected]/../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 

È un problema relativo a jdk8u40, torna a jdku31. Funziona in quella versione. Sto incontrando lo stesso problema sia in ambiente Windows che Linux.

La versione 1.8.0_40 e 1.8.0_45 ha gli ultimi aggiornamenti con i graal. Spring non può copiare metodi non-root.

Dal momento della pubblicazione iniziale è stata sviluppata una soluzione alternativa.

aclement ha commentato il 5 marzo Ecco la build: http://repo.spring.io/libs-snapshot-local/org/springframework/springloaded/1.2.2.BUILD-SNAPSHOT/springloaded-1.2.2.BUILD-SNAPSHOT. jar

Per testarlo sotto Grails, quello che faccio è entrare nella cartella Grails: grails-2.5.0 / lib / org.springframework / springloaded / jar

Quindi rinominare il jar caricato a molla che si trova lì e inserire un collegamento simbolico al jar sopra. In passato era ansible modificare lo script startGrails in modo che punti alla nuova versione, ma ora, a causa del biforcarsi, trovo che devi fare la cosa symlink. Oppure rilascia questo jar in questa cartella e rinominalo in modo che corrisponda alle aspettative di Grails (rinominalo da springloaded-1.2.2.BUILD-SNAPSHOT.jar a springloaded-1.2.0.RELEASE.jar)

Se invece vuoi eseguire il rollback

Grails è supportato nativamente in 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

Una volta che hai una versione java compatibile, pulisci il tuo progetto Grails. Assicurarsi che le variabili del percorso java siano impostate in modo da puntare alla versione prevista.

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

Ho aggiornato il mio jar springloaded alla versione 1.2.4.BUILD-SNAPSHOT (dalla 1.2.1) e questo ha risolto il problema. (L’ultima versione può essere trovata nel repository Spring )

  1. Vai alla tua directory lib Grails locale per trovare jar jar caricato a molla. Per me era /usr/local/Cellar/grails/2.4.4/libexec/lib/org.springframework/springloaded/jars/
  2. rimuovere i file jar 1.2.1 esistenti (ho rimosso anche il file pom, ma non necessario)
  3. scarica l’ultimo jar caricato a molla e posizionalo nella sottodirectory jars : wget http://repo.spring.io/libs-snapshot-local/org/springframework/springloaded/1.2.4.BUILD-SNAPSHOT/springloaded-1.2.4.BUILD-SNAPSHOT.jar

Dopo averlo fatto, tutto funziona. (Indizi utilizzati dalla risposta precedente: https://github.com/spring-projects/spring-loaded/issues/98 )

Passaggio 1: scarica questo jar

passo 2: mettilo nella cartella Grails: grails-2.4.1 / lib / org.springframework / springloaded / jar

dovrebbe essere sufficiente, riavviare IDE

Root cause, work-arounds e notizie sulle correzioni qui: https://github.com/spring-projects/spring-loaded/issues/98

Sto eseguendo Grails 2.4.3 e ho anche avuto problemi a passare da jdk1.8.0_31 a jdk1.8.0_40 e ho dovuto tornare a 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) 

Da https://github.com/spring-projects/spring-loaded/issues/98 e lavorato a me

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

Due passi per farlo funzionare

1. Scarica la versione inferiore di JDK: Installa jdk1.8.0_25 dal link http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html#jdk-8u25-oth-JPR . È la versione inferiore di JDK come grails non supporta la versione superiore. Forse lo includeranno presto nell’ultima versione.

2. Impostare le variabili di ambiente: non dimenticare di modificare le variabili di ambiente per jdk, devi solo modificare variabili di percorso e variabile JavaHome da “C: \ Programmi \ Java \ jdk1.8.0_’LatestVersion” “a ” C : \ Programmi \ Java \ jdk1.8.0_25 “ .

Ho pensato che dovrei aggiungere i miei due pence a questo argomento. Recentemente ho riscontrato lo stesso problema cercando di aggiornare un’app antica alla 2.4.4. Il motivo del mio post è perché tutte le istruzioni sopra riportate sono un po ‘obsolete e, nella maggior parte dei casi, potrebbe sembrare che funzioni. Nel momento in cui si introducono i driver mysql tutte le versioni sopra menzionate di spring loaded hanno riscontrato un nuovo problema relativo all’incompatibilità e Non-root quando si tenta di triggersre il database.

Ho ottenuto ggts completamente funzionante con JDK 1.8_065. Per farlo funzionare , apri springloaded-1.2.5.RELEASE.jar Metti questo in grails-2.4.4/lib/org.springframework/springloaded/jars/ folder. Quando installi ggts nella cartella ggts-bundle è grails-2.4.4. Quindi metti il ​​file nella posizione sopra all’interno della cartella ggts-bundle. A meno che tu non abbia cambiato la configurazione.
Riavvia GGTS Ho trascorso anni su di esso e ho pensato di aggiornare le istruzioni.

Inoltre, l’altra cosa che ho colpito è stata la forchetta sotto il graal 2.4.4 con il mio uprade e ho finito con l’impostazione

 grails.project.fork = [] 

Nel mio BuildConfig.groovy

Cambiare la versione springloaded nel mio pom.xml ha fatto il trucco.

  org.springframework springloaded 1.2.6.RELEASE  

Quando ho riscontrato il problema la mia versione springloaded era 1.2.1.RELEASE