Jetty在关机时抛出NoClassDefFoundError:org / eclipse / jetty / util / FutureCallback

我们的maven构建在jetty关闭的构建结束时抛出一个我不明白的NoClassDefFoundError。 有没有人知道这是从哪里来的,以及如何解决它?

以下是pom文件中的依赖项:

  com.restfuse com.eclipsesource.restfuse 1.0.0   commons-io commons-io 2.4   org.slf4j jcl-over-slf4j 1.7.7 test   org.easytesting fest-assert 1.4 test   com.pe-international bom.model test   com.jayway.restassured rest-assured 2.3.4   com.jayway.restassured json-path 2.3.4   com.jayway.restassured xml-path 2.3.4   

Jetty conf:

   org.eclipse.jetty jetty-maven-plugin 9.2.2.v20140723  ${basedir}/target/bla.war  8088   /bla    config.dir ${basedir}/target/config.dir   fooStopBla 8089    start-jetty process-test-resources  deploy-war   0 true    stop-jetty post-integration-test  stop       

这是mvn依赖:tree

 [INFO] com.company:our.endpoint.test:jar:1.0.0-SNAPSHOT [INFO] +- com.restfuse:com.eclipsesource.restfuse:jar:1.0.0:compile [INFO] | +- org.mortbay.jetty:jetty-j2se6:jar:6.1.26:compile [INFO] | | \- org.mortbay.jetty:jetty:jar:6.1.26:compile [INFO] | | +- org.mortbay.jetty:jetty-util:jar:6.1.26:compile [INFO] | | \- org.mortbay.jetty:servlet-api:jar:2.5-20081211:compile [INFO] | \- com.sun.jersey:jersey-bundle:jar:1.9.1:compile [INFO] | \- javax.ws.rs:jsr311-api:jar:1.1.1:compile [INFO] +- commons-io:commons-io:jar:2.4:compile [INFO] +- org.slf4j:jcl-over-slf4j:jar:1.7.7:test [INFO] | \- org.slf4j:slf4j-api:jar:1.7.7:test [INFO] +- org.easytesting:fest-assert:jar:1.4:test [INFO] | \- org.easytesting:fest-util:jar:1.1.6:test [INFO] +- com.company:our.model:jar:1.0.0-SNAPSHOT:test [INFO] | +- org.jscience:jscience:jar:4.3.1:test [INFO] | | \- org.javolution:javolution:jar:5.2.3:test [INFO] | +- org.jvnet.jaxb2_commons:jaxb2-basics-runtime:jar:0.6.5:test [INFO] | +- org.springframework:spring-beans:jar:4.1.1.RELEASE:test [INFO] | | \- org.springframework:spring-core:jar:4.1.1.RELEASE:test [INFO] | +- org.springframework:spring-context:jar:4.1.1.RELEASE:test [INFO] | | +- org.springframework:spring-aop:jar:4.1.1.RELEASE:test [INFO] | | | \- aopalliance:aopalliance:jar:1.0:test [INFO] | | \- org.springframework:spring-expression:jar:4.1.1.RELEASE:test [INFO] | \- com.google.guava:guava:jar:15.0:test [INFO] +- com.jayway.restassured:rest-assured:jar:2.3.4:compile [INFO] | +- org.codehaus.groovy:groovy:jar:2.3.6:compile [INFO] | +- org.codehaus.groovy:groovy-xml:jar:2.3.6:compile [INFO] | +- org.apache.httpcomponents:httpclient:jar:4.3.5:compile [INFO] | | +- org.apache.httpcomponents:httpcore:jar:4.3.2:compile [INFO] | | +- commons-logging:commons-logging:jar:1.1.3:compile [INFO] | | \- commons-codec:commons-codec:jar:1.6:compile [INFO] | +- org.apache.httpcomponents:httpmime:jar:4.3.5:compile [INFO] | +- org.hamcrest:hamcrest-core:jar:1.3:compile [INFO] | +- org.hamcrest:hamcrest-library:jar:1.3:compile [INFO] | \- org.ccil.cowan.tagsoup:tagsoup:jar:1.2.1:compile [INFO] +- com.jayway.restassured:json-path:jar:2.3.4:compile [INFO] | +- org.codehaus.groovy:groovy-json:jar:2.3.6:compile [INFO] | \- com.jayway.restassured:rest-assured-common:jar:2.3.4:compile [INFO] +- com.jayway.restassured:xml-path:jar:2.3.4:compile [INFO] | \- org.apache.commons:commons-lang3:jar:3.3.2:compile [INFO] +- junit:junit:jar:4.11:test [INFO] \- org.mockito:mockito-all:jar:1.9.5:test 

这是我们的堆栈跟踪:

 2015-01-27 13:04:57.810:WARN:oejuc.AbstractLifeCycle:Thread-1: FAILED org.eclipse.jetty.maven.plugin.JettyServer@6dd82486: java.lang.NoClassDefFoundError: org/eclipse/jetty/util/FutureCallback java.lang.NoClassDefFoundError: org/eclipse/jetty/util/FutureCallback at org.eclipse.jetty.server.AbstractConnector.shutdown(AbstractConnector.java:284) at org.eclipse.jetty.server.AbstractNetworkConnector.shutdown(AbstractNetworkConnector.java:108) at org.eclipse.jetty.server.ServerConnector.shutdown(ServerConnector.java:298) at org.eclipse.jetty.maven.plugin.MavenServerConnector.shutdown(MavenServerConnector.java:140) at org.eclipse.jetty.server.Server.doStop(Server.java:397) at org.eclipse.jetty.util.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:89) at org.eclipse.jetty.util.thread.ShutdownThread.run(ShutdownThread.java:132) Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.util.FutureCallback at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50) at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:235) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:227) at org.eclipse.jetty.server.AbstractConnector.shutdown(AbstractConnector.java:284) at org.eclipse.jetty.server.AbstractNetworkConnector.shutdown(AbstractNetworkConnector.java:108) at org.eclipse.jetty.server.ServerConnector.shutdown(ServerConnector.java:298) at org.eclipse.jetty.maven.plugin.MavenServerConnector.shutdown(MavenServerConnector.java:140) at org.eclipse.jetty.server.Server.doStop(Server.java:397) at org.eclipse.jetty.util.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:89) at org.eclipse.jetty.util.thread.ShutdownThread.run(ShutdownThread.java:132) Exception in thread "Thread-1" java.lang.NoClassDefFoundError: org/eclipse/jetty/util/FutureCallback at org.eclipse.jetty.server.AbstractConnector.shutdown(AbstractConnector.java:284) at org.eclipse.jetty.server.AbstractNetworkConnector.shutdown(AbstractNetworkConnector.java:108) at org.eclipse.jetty.server.ServerConnector.shutdown(ServerConnector.java:298) at org.eclipse.jetty.maven.plugin.MavenServerConnector.shutdown(MavenServerConnector.java:140) at org.eclipse.jetty.server.Server.doStop(Server.java:397) at org.eclipse.jetty.util.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:89) at org.eclipse.jetty.util.thread.ShutdownThread.run(ShutdownThread.java:132) Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.util.FutureCallback at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50) at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:235) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:227) ... 7 more 

有时堆栈跟踪会有所不同,这就出现了:

 2015-01-28 10:12:55.630:WARN:oejuc.AbstractLifeCycle:ShutdownMonitor: FAILED org.eclipse.jetty.servlet.ServletHandler@3accac55: java.lang.NoClassDefFoundError: org/eclipse/jetty/util/LazyList java.lang.NoClassDefFoundError: org/eclipse/jetty/util/LazyList at org.eclipse.jetty.servlet.ServletHandler.doStop(ServletHandler.java:266) at org.eclipse.jetty.util.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:89) at org.eclipse.jetty.util.component.ContainerLifeCycle.stop(ContainerLifeCycle.java:143) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStop(ContainerLifeCycle.java:162) at org.eclipse.jetty.server.handler.AbstractHandler.doStop(AbstractHandler.java:73) at org.eclipse.jetty.security.SecurityHandler.doStop(SecurityHandler.java:411) at org.eclipse.jetty.security.ConstraintSecurityHandler.doStop(ConstraintSecurityHandler.java:457) at org.eclipse.jetty.util.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:89) at org.eclipse.jetty.util.component.ContainerLifeCycle.stop(ContainerLifeCycle.java:143) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStop(ContainerLifeCycle.java:162) at org.eclipse.jetty.server.handler.AbstractHandler.doStop(AbstractHandler.java:73) at org.eclipse.jetty.server.session.SessionHandler.doStop(SessionHandler.java:127) at org.eclipse.jetty.util.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:89) at org.eclipse.jetty.util.component.ContainerLifeCycle.stop(ContainerLifeCycle.java:143) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStop(ContainerLifeCycle.java:162) at org.eclipse.jetty.server.handler.AbstractHandler.doStop(AbstractHandler.java:73) at org.eclipse.jetty.server.handler.ContextHandler.doStop(ContextHandler.java:835) at org.eclipse.jetty.servlet.ServletContextHandler.doStop(ServletContextHandler.java:215) at org.eclipse.jetty.webapp.WebAppContext.doStop(WebAppContext.java:529) at org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStop(JettyWebAppContext.java:388) at org.eclipse.jetty.util.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:89) at org.eclipse.jetty.util.component.ContainerLifeCycle.stop(ContainerLifeCycle.java:143) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStop(ContainerLifeCycle.java:162) at org.eclipse.jetty.server.handler.AbstractHandler.doStop(AbstractHandler.java:73) at org.eclipse.jetty.util.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:89) at org.eclipse.jetty.util.component.ContainerLifeCycle.stop(ContainerLifeCycle.java:143) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStop(ContainerLifeCycle.java:162) at org.eclipse.jetty.server.handler.AbstractHandler.doStop(AbstractHandler.java:73) at org.eclipse.jetty.util.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:89) at org.eclipse.jetty.util.component.ContainerLifeCycle.stop(ContainerLifeCycle.java:143) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStop(ContainerLifeCycle.java:162) at org.eclipse.jetty.server.handler.AbstractHandler.doStop(AbstractHandler.java:73) at org.eclipse.jetty.server.Server.doStop(Server.java:456) at org.eclipse.jetty.util.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:89) at org.eclipse.jetty.server.ShutdownMonitor$ShutdownMonitorRunnable.stopLifeCycles(ShutdownMonitor.java:273) at org.eclipse.jetty.server.ShutdownMonitor$ShutdownMonitorRunnable.run(ShutdownMonitor.java:172) 

请注意,一些其他示例将使您向jersey-container-jetty-http添加maven依赖项,其中包括可能的旧版本的jetty http。 如果您已经拥有jetty-server dep,请删除该依赖项。 在你的pom文件中。

看起来您的环境中同时有两个版本的Jetty。

您的mvn dependency:treecompile依赖项中显示以下内容。

 [INFO] com.company:our.endpoint.test:jar:1.0.0-SNAPSHOT [INFO] +- com.restfuse:com.eclipsesource.restfuse:jar:1.0.0:compile [INFO] | +- org.mortbay.jetty:jetty-j2se6:jar:6.1.26:compile [INFO] | | \- org.mortbay.jetty:jetty:jar:6.1.26:compile [INFO] | | +- org.mortbay.jetty:jetty-util:jar:6.1.26:compile [INFO] | | \- org.mortbay.jetty:servlet-api:jar:2.5-20081211:compile 

这里有两个问题。

首先, restfuse似乎是旧的,非常古老,并且想要Jetty 6.1.26。 (这个版本的Jetty在2007年回归EOL / End-of-Life)

其次,当jetty-maven-plugin运行时,此版本可能会影响应用程序的行为。

为Jetty 6添加一个排除项,然后尝试一下。

  com.restfuse com.eclipsesource.restfuse 1.0.0   org.mortbay.jetty jetty-j2se6    

但请记住,restfuse 1.0.0可能不适用于Jetty 9.如果是这样,你会想要追逐已为Jetty 9更新的更新版本的restfuse。

我在9.2.3修正了这个问题。 请参阅错误报告https://bugs.eclipse.org/bugs/show_bug.cgi?id=438500

我收到此错误,因为目录“target / classes”不存在。 解决这个问题的一种快速方法是简单地创建一个src / main / java文件夹,然后在那里创建任何类(甚至是一个空类)。

我有使用eclipse Jetty插件的类似问题。 通过添加适当的依赖项解决了它。 有关更多详细信息,请访问 – http://eclipse-jetty.github.io/faq.html