2014-07-09 13 views
13

Abbiamo aggiornato il nostro progetto utilizzando la molla 3.2.9 a java 8. Una volta iniziato a utilizzare le funzioni di java 8, la molla non verrà più avviata (vedere la traccia dello stack di seguito).spring-core 3.2.9 + java 8

ho cercato di escludere i vecchi usi di ASM e comprendono le seguenti dipendenze:

<dependency> 
    <groupId>org.ow2.asm</groupId> 
    <artifactId>asm</artifactId> 
    <version>5.0.3</version> 
</dependency> 
<dependency> 
    <groupId>org.ow2.asm</groupId> 
    <artifactId>asm-util</artifactId> 
    <version>5.0.3</version> 
</dependency> 
<dependency> 
    <groupId>org.ow2.asm</groupId> 
    <artifactId>asm-commons</artifactId> 
    <version>5.0.3</version> 
</dependency> 

Tuttavia non risolve il problema. Qualcuno ha un'idea di come risolvere questo?

Purtroppo non è possibile eseguire l'aggiornamento a Spring 4 poiché vengono utilizzate alcune dipendenze che renderebbero questo aggiornamento abbastanza lungo.

Offending resource: class path resource [xxxx/context-test.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [xxxxx.class]; nested exception is java.lang.IllegalArgumentException: INVOKESPECIAL/STATIC on interfaces require ASM 5 
    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68) 
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85) 
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:256) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:207) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:192) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:139) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:108) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180) 
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125) 
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94) 
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) 
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451) 
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64) 
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91) 
    ... 23 more 
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [xxxxxxxxxxxxx.class]; nested exception is java.lang.IllegalArgumentException: INVOKESPECIAL/STATIC on interfaces require ASM 5 
    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:290) 
    at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:242) 
    at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84) 
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1438) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1428) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:195) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:139) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:108) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:250) 
    ... 43 more 
Caused by: java.lang.IllegalArgumentException: INVOKESPECIAL/STATIC on interfaces require ASM 5 
    at org.springframework.asm.MethodVisitor.visitMethodInsn(Unknown Source) 
    at org.springframework.asm.ClassReader.a(Unknown Source) 
    at org.springframework.asm.ClassReader.b(Unknown Source) 
    at org.springframework.asm.ClassReader.accept(Unknown Source) 
    at org.springframework.asm.ClassReader.accept(Unknown Source) 
    at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:64) 
    at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80) 
    at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:102) 
    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:266) 
    ... 58 more 
+0

Ho inviato una risposta a una domanda molto simile qui: http://stackoverflow.com/questions/30072135/spring-3-2-x-with-java-8/33936697#33936697 in pratica, il problema non si sta compilando in Java8 ma usando la nuova sintassi java 8 (come :: o ->) – BiAiB

risposta

0

Se la memoria non mi manca, 3.2.x Primavera non supporta Java 8, è necessario eseguire l'aggiornamento a Spring 4

+3

https://jira.spring.io/browse/SPR-11656 supportato dal 3.2.3 https://spring.io/ blog/2013/05/21/spring-framework-4-0-m1-3-2-3-disponibile – Andreas

+0

Grazie dal link Andreas. Informazioni sulle tue 3 dipendenze Maven per ** asm **, cosa succede se dichiari solo il primo? Quale aggiornamento di Java 8 stai usando? –

+0

Assicurati di creare nuovamente tutto il codice sorgente, ovviamente ora con Java 8. –

17

È necessario aggiornare a una versione 4.x primavera.

Spring 3.2.x supporta solo Java 8 runtime compilato su Java 7. Non è possibile utilizzare "interfacce statiche" come quello è un Java 8 feature e non verrà compilato contro Java 7.

Ecco un frammento di rilevante da alcune delle Spring 4 release notes, enfasi loro:

Insieme a 4.0 M1, abbiamo Ho rilasciato Spring Framework 3.2.3, contenente le correzioni per i problemi segnalati di recente, ma anche con il supporto per il runtime OpenJDK 8 . Spring Framework 3.2.x supporterà la distribuzione su JDK 8 runtime per le applicazioni compilate con JDK 7 (con -target 1.7) o precedente.

E dai loro commenti nella build.gradle file for spring-framework, hanno riconfezionare CGLIB come parte del loro rilascio e embed ASM into the project.

// As of Spring 4.0.3, spring-core includes asm 5.0 and repackages cglib 3.1, inlining 
// both into the spring-core jar. cglib 3.1 itself depends on asm 4+, and is therefore 
// further transformed by the JarJar task to depend on org.springframework.asm; this 
// avoids including two different copies of asm unnecessarily. 

Ecco un altro capitolo relativo alle note di rilascio 4.0.3 che mostra il modo in cui incorporare alcune di queste librerie e ciò che è supportato in primavera 4.0.3.

Sono lieto di annunciare che Spring Framework 4.0.3 è disponibile. Questa è la prima versione del framework dopo il lancio di Java 8 l'ultima settimana; ora è costruito con OpenJDK 8 GA e include l'ultimo ASM 5.0.1 (con supporto bytecode anche al livello JDK 8 GA, che sostituisce il fork ASM 4.2 personalizzato che stavamo usando in precedenza).

+0

Puoi spiegare per favore 'Spring 3.2.x supporta solo runtime Java 8 compilato su Java 7'? Spring 3.2.x sarebbe compatibile se avessi JDK 1.8 e JVM versione 1.7? –

+1

@VaibhavAgarwal Significa che il codice deve essere compilato per Java 7, ma può essere eseguito su una JVM Java 8. Cioè 'Il codice javac -source 1.7 -target 1.7' verrà eseguito con una versione 1.8 di JVM. – mkobit

+0

Grazie per la spiegazione. –