9

升级到 JDK 8 后,jetty 9 不再能够扫描 spring 注释:我收到以下错误:

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 时它工作正常。

它尝试扫描的注释是 spring framework 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>

任何帮助深表感谢

谢谢苏雷什

4

2 回答 2

9

由于 spring mvc Java (8) 和 Jetty 中捆绑的 ASM 版本之间的版本差异,您遇到了您遇到的那种异常。

您需要通过下载 ASM 5.xx 并替换 Jetty 安装文件夹中的以下 2 个文件来使版本相互兼容:

  1. asm-4.x.jar 和 asm-5.xx.jar

  2. asm-commons-4.x.jar 和 asm-commons-5.xx.jar

于 2014-04-02T10:16:00.307 回答
3

使用 jetty-9.1.x、Java 8 和 Spring 4,Ginger Head 的答案是正确的。只是为了补充这个答案:

如果您使用 9.1.x 版本的jetty-runner,您可能会注意到它使用了捆绑版本的asm(捆绑在 jar 中)。为了让它与捆绑版本一起工作,我必须在classpath上添加 asm-jar ,在 jetty-runner-jar 之前,然后在没有 -jar 标志的情况下启动 jetty-runner,而是指出主类(org.eclipse. jetty.runner.Runner)。

所以,这有效的:

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
于 2014-05-09T06:22:43.740 回答