java - Jetty lanza NoClassDefFoundError: org/eclipse/jetty/util/FutureCallback en el cierre
shutdown (6)
Lo arreglé en 9.2.3. Consulte el informe de errores bugs.eclipse.org/bugs/show_bug.cgi?id=438500
Nuestra compilación maven arroja al final de la compilación del cierre de Jetty un NoClassDefFoundError que no entiendo. ¿Alguien tiene una idea de dónde viene esto y cómo solucionarlo?
Aquí están las dependencias del archivo pom:
<dependencies>
<dependency>
<groupId>com.restfuse</groupId>
<artifactId>com.eclipsesource.restfuse</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easytesting</groupId>
<artifactId>fest-assert</artifactId>
<version>1.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.pe-international</groupId>
<artifactId>bom.model</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.restassured</groupId>
<artifactId>rest-assured</artifactId>
<version>2.3.4</version>
</dependency>
<dependency>
<groupId>com.jayway.restassured</groupId>
<artifactId>json-path</artifactId>
<version>2.3.4</version>
</dependency>
<dependency>
<groupId>com.jayway.restassured</groupId>
<artifactId>xml-path</artifactId>
<version>2.3.4</version>
</dependency>
</dependencies>
Embarcadero conf:
<!-- Start Jetty -->
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.2.v20140723</version>
<configuration>
<war>${basedir}/target/bla.war</war>
<httpConnector>
<port>8088</port>
</httpConnector>
<webApp>
<contextPath>/bla</contextPath>
</webApp>
<systemProperties>
<systemProperty>
<name>config.dir</name>
<value>${basedir}/target/config.dir</value>
</systemProperty>
</systemProperties>
<stopKey>fooStopBla</stopKey>
<stopPort>8089</stopPort>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>process-test-resources</phase>
<goals>
<goal>deploy-war</goal>
</goals>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
<daemon>true</daemon>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Aquí está la dependencia mvn: árbol
[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
Aquí está nuestro stacktrace:
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
Y a veces el stacktrace varía y esto surge:
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)
Me enfrenté al mismo problema y estaba usando la versión 9.4.12.v20180830 de Jetty. Luego, cambié la versión a la versión 9.4.12.RC2 y todo funcionó bien
Parece que tienes 2 versiones de Jetty en tu entorno al mismo tiempo.
Su mvn dependency:tree
muestra lo siguiente en sus mvn dependency:tree
<scope>compile</scope>
.
[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
Hay 2 preocupaciones aquí.
Primero, es que restfuse
parece ser viejo, muy viejo y quiere Jetty 6.1.26. (Esta versión de Jetty fue EOL / Fin de vida en 2007)
En segundo lugar, es que esta versión podría estar afectando el comportamiento de su aplicación cuando se esté ejecutando jetty-maven-plugin
.
Agregue una exclusión para Jetty 6, y pruébelo.
<dependency>
<groupId>com.restfuse</groupId>
<artifactId>com.eclipsesource.restfuse</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-j2se6</artifactId>
</exclusion>
</exclusions>
</dependency>
Pero tenga en cuenta que restfuse 1.0.0 podría no funcionar con Jetty 9. Si es así, querrá buscar una versión más reciente de restfuse que se haya actualizado para Jetty 9.
Recibí este error porque el directorio "target / classes" no existía. Una forma rápida de resolver esto es simplemente crear una carpeta src / main / java, y luego crear cualquier clase (incluso una clase vacía) allí.
Tenga en cuenta que algunos ejemplos de descanso le harán agregar una dependencia de maven a jersey-container-jetty-http
, que incluye una versión probablemente más antigua de jetty http. Elimine esa dependencia si ya tiene un dep. en tu archivo pom
Tuve un problema similar utilizando el plugin eclipse Jetty. Se resuelve agregando dependencias adecuadas. Para obtener más detalles, visite: http://eclipse-jetty.github.io/faq.html