it-swarm.com.de

Jetty wirft NoClassDefFoundError: org/Eclipse/jetty/util/FutureCallback beim Herunterfahren

Unser Maven Build wirft am Ende des Builds das Herunterfahren des Bootsanlegers NoClassDefFoundError, den ich nicht verstehe. Hat jemand eine Idee, woher das kommt und wie man es reparieren kann?

Hier sind die Abhängigkeiten von der POM-Datei:

<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>

Jetty 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>

Hier ist die Abhängigkeit von MVN: Baum

[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

Hier ist unser Stacktrace:

2015-01-27 13:04:57.810:WARN:oejuc.AbstractLifeCycle:Thread-1: FAILED [email protected]: 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

Und manchmal variiert der Stacktrace und das kommt auf:

2015-01-28 10:12:55.630:WARN:oejuc.AbstractLifeCycle:ShutdownMonitor: FAILED [email protected]: 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)
16

Beachten Sie, dass einige Restbeispiele dazu führen, dass Sie jersey-container-jetty-http eine Maven-Abhängigkeit hinzufügen, die eine wahrscheinlich ältere Version von Jetty http enthält. Entfernen Sie diese Abhängigkeit, wenn Sie bereits einen jetty-server dep haben. in deiner POM-Datei.

21
Sebas

Sieht aus, als hätten Sie zwei Versionen von Jetty gleichzeitig in Ihrer Umgebung.

Ihr mvn dependency:tree zeigt Folgendes in Ihren <scope>compile</scope>-Abhängigkeiten.

[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

Es gibt hier zwei Bedenken.

Erstens, restfuse scheint alt, sehr alt zu sein und möchte Jetty 6.1.26 . (Diese Version von Jetty war 2007 EOL/End-of-Life)

Zweitens kann diese Version das Verhalten Ihrer Anwendung beeinflussen, wenn jetty-maven-plugin ausgeführt wird.

Fügen Sie einen Ausschluss für Jetty 6 hinzu, und probieren Sie es aus.

<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>

Denken Sie jedoch daran, dass restfuse 1.0.0 möglicherweise nicht mit Jetty 9 funktioniert. In diesem Fall sollten Sie eine neuere Version von restfuse jagen, die für Jetty 9 aktualisiert wurde.

6
Joakim Erdfelt

Ich habe das in 9.2.3 behoben. Siehe Fehlerbericht https://bugs.Eclipse.org/bugs/show_bug.cgi?id=438500

4
Jan

Ich hatte ein ähnliches Problem mit dem Eclipse Jetty-Plugin. Es wurde gelöst, indem richtige Abhängigkeiten hinzugefügt wurden. Weitere Informationen finden Sie unter - http://Eclipse-jetty.github.io/faq.html

1
Sushil Mahajan

Ich habe diese Fehlermeldung erhalten, weil das Verzeichnis "Ziel/Klassen" nicht vorhanden ist. Um dies zu lösen, können Sie schnell einen src/main/Java-Ordner erstellen und dort eine beliebige Klasse (auch eine leere Klasse) erstellen. 

1
user64141

ich hatte das gleiche Problem und habe die Jetty-Version 9.4.12.v20180830 verwendet. Danach habe ich die Version auf 9.4.12.RC2 geändert und alles hat gut funktioniert

0
rajat