2015-01-27 16 views
15

Unser Maven Build wirft am Ende des Builds des Shutdowns von Anlegestelle ein NoClassDefFoundError, das ich nicht verstehe. Hat jemand eine Idee, woher das kommt und wie man es beheben kann?Jetty wirft NoClassDefFoundError: org/eclipse/jetty/util/FutureCallback beim Herunterfahren

Hier sind ist 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 MVN Abhängigkeit: 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 unsere Stacktrace ist:

Und manchmal ist die Stacktrace variiert und dies kommt:

2015-01-28 10:12:55.630:WARN:oejuc.AbstractLifeCycle:ShutdownMonitor: FAILED org.eclipse.jetty.servlet.Ser[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) 
+0

Führen Sie 'mvn Abhängigkeit: Baum' und veröffentlichen Sie die Ergebnisse. –

+0

Ich habe sie dem Beitrag über –

+1

hinzugefügt. Siehe @ Jan's Antwort. Ich hatte vor einiger Zeit eine Bug-Anfrage eingereicht (https://bugs.eclipse.org/bugs/show_bug.cgi?id=438500) und ich kann bestätigen, dass dies mit einem Upgrade von Jetty aufhört. – carlspring

Antwort

4

ich in 9.2.3 dass fixiert. Sehen Sie den Fehlerbericht https://bugs.eclipse.org/bugs/show_bug.cgi?id=438500

+2

Ich habe auf 9.2.7.v20150116 aktualisiert, aber leider bekomme ich immer noch eine Ausnahme (siehe oben): [email protected]: java.lang.NoClassDefFoundError: org/eclipse/jetty/util/LazyList \t bei org.eclipse.jetty.servlet.ServletHandler.doStop (ServletHandler.java:266 –

+0

Jede andere Idee, wie Sie dieses Problem lösen? –

+0

Ich bekomme dies auch mit der neuesten Version (und ich versuchte mit der älteren 9.2. 3 Version auch, aber das hat das Problem nicht gelöst.) Ich bekomme es anscheinend nur auf Travis, nicht auf meiner eigenen Maschine .. – ksclarke

5

Sieht aus, als ob Sie 2 Versionen von Jetty in Ihrer Umgebung gleichzeitig haben.

Ihre mvn dependency:tree zeigt die folgenden 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 2 Bedenken hier.

Erstens ist das restfuse scheint alt zu sein, sehr alt, und will Jetty 6.1.26. (Diese Version von Jetty war EOL/End-of-Life zurück in 2007)

Zweitens ist, dass diese Version das Verhalten Ihrer Anwendung beeinflussen könnte, wenn jetty-maven-plugin ausgeführt wird.

Fügen Sie einen Ausschluss für Jetty 6, und es und versuchen Sie es.

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

Aber bedenken Sie, dass 1.0.0 restfuse möglicherweise nicht mit Jetty arbeiten 9. Wenn ja, werden Sie eine neuere Version von restfuse jagen wollen, die für Jetty wurde aktualisiert 9.

+1

Vielen Dank für Ihre Antwort. Ich habe restfuse ganz als Abhängigkeit entfernt, aber immer noch die gleiche Ausnahme: NoClassDefFoundError: org/eclipse/jetty/util/FutureCallback –

+0

Irgendeine andere Idee, wie man dieses Problem löst? –

20

Seien Sie vorsichtig, da einige Rest-Beispiele dazu führen, dass Sie eine Maven-Abhängigkeit zu jersey-container-jetty-http hinzufügen, die eine wahrscheinlich ältere Version von Jetty http enthält. Entfernen Sie diese Abhängigkeit, wenn Sie bereits eine jetty-server dep haben. in deiner Pom-Datei.

+0

Danke, das war das Problem, das ich in meinem eigenen Projekt hatte (nun, eines, das ich geerbt hatte). Ich frage mich immer mehr, ob npm's selbstverschuldete Abhängigkeit in JavaScript von dieser Art von Inlining in Java inspiriert wurde. – kungphu

+0

Ich hatte ein verwandtes Problem mit einem anderen Satz von Abhängigkeiten und musste "jetty-util" anstelle von "jetty-http" ausschließen. – Mack

1

Ich habe diesen Fehler erhalten, weil das Verzeichnis "target/classes" nicht existiert. Ein schneller Weg, dies zu lösen, besteht darin, einfach einen src/main/java-Ordner zu erstellen und dann dort irgendeine Klasse (auch eine leere Klasse) zu erstellen.

+1

In der Jetty-9.3-Serie wurde dieser Fehler (Fehler, wenn kein Ziel/Klassen) mit dem Jetty-Maven-Plugin eingeführt, als wir zu Java-Natio Path-Klassen wechselten. Dies wurde in Jetty-9.3.12 behoben (momentan nur noch als Momentaufnahme). Siehe Fehler https://github.com/eclipse/jetty.project/issues/785. – Jan