2014-04-01 44 views
8

升級到JDK 8後,碼頭9不再能夠掃描Spring註解:我收到以下錯誤:碼頭9 + JDK 8 +彈簧4註解

MultiException[java.lang.RuntimeException: Error scanning file ApplicationInitializer.class, java.lang.RuntimeException: Error scanning file HibernateConfig.class, java.lang.RuntimeException: Error scanning file MailConfig.class, java.lang.RuntimeException: Error scanning file ServicesConfig.class, java.lang.RuntimeException: Error scanning file WebAppConfig.class] 
at org.eclipse.jetty.annotations.AnnotationConfiguration.scanForAnnotations(AnnotationConfiguration.java:530) 
at org.eclipse.jetty.annotations.AnnotationConfiguration.configure(AnnotationConfiguration.java:441) 
at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:466) 
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1342) 
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:745) 
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492) 
at org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:282) 
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:117) 
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:99) 
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:60) 
at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:154) 
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 

這是工作正常,當我使用jdk 7。

它試圖掃描的註解彈簧框架4級的註解一樣的東西:

@Configuration 
@EnableWebMvc 
@ComponentScan("com.cityrentals.rentahouse") 
@Import({ HibernateConfig.class, ServicesConfig.class, MailConfig.class }) 
public class WebAppConfig extends WebMvcConfigurerAdapter { 

會出現錯誤,不論如果javaassist依賴性存在或不存在

<dependency> 
    <groupId>org.javassist</groupId> 
    <artifactId>javassist</artifactId> 
    <version>3.18.1-GA</version> 
    </dependency> 

任何幫助非常感謝

謝謝 Suresh

回答

9

由於spring mvc Java(8)和Jetty捆綁的ASM版本之間的版本差異,您會遇到您遇到過的那些異常情況。

你需要通過下載ASM 5.XX和更換以下2個文件Jetty的安裝文件夾內,使互相兼容版本:

  1. ASM-4.x.jar與ASM-5 .xx.jar

  2. ASM-公地4.x.jar與ASM-公地5.xx.jar

+1

問題似乎被固定在碼頭-9.2.2(或許更早) –

3

使用碼頭-9.1.x,Java的8和Spring 4答案通過姜頭是正確的。如果您使用的是碼頭亞軍與版本9.1.x,它採用ASM(在JAR捆綁)的捆綁版本,你可能會注意到

:只是來補充答案。爲了使它與捆綁版本一起工作,我不得不在類路徑上添加asm-jar,在jetty-runner-jar之前,然後啓動沒有-jar標誌的jetty-runner,而是指出主類(org .eclipse.jetty.runner.Runner)。

所以,這IS工作:

java -cp lib/asm-5.x.jar:lib/asm-commons-5.x.jar:lib/asm-tree-5.x.jar:lib/jetty-runner.jar org.eclipse.jetty.runner.Runner foo.war 

以下是工作:

java -cp -jar lib/jetty-runner.jar foo.war 
or 
java -cp lib/asm-5.x.jar:lib/asm-commons-5.x.jar:lib/asm-tree-5.x.jar -jar lib/jetty-runner.jar foo.war 
+3

快速更新時,此問題現在已在Jetty的更高版本(或更具體地在9.2.0.v20140526版本中)中得到解決。新版本不需要特別處理Java 8,Jetty 9和Spring 4的asm-jar,它應該可以直接使用。 – wassgren