web-dev-qa-db-ja.com

JettyがNoClassDefFoundErrorをスローする:シャットダウン時にorg / Eclipse / jetty / util / FutureCallback

私たちのMavenビルドは、jettyのシャットダウンのビルドの最後に、私には理解できないNoClassDefFoundErrorをスローします。誰がこれがどこから来て、それを修正する方法を知っていますか?

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>

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>

Mvn依存関係は次のとおりです。

[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)
17

残りの例では、jersey-container-jetty-httpにmaven依存関係を追加することに注意してください。これには、古いバージョンのjetty httpが含まれます。既にjetty-server depがある場合は、その依存関係を削除します。あなたのpomファイルに。

21
Sebas

環境内に同時に2つのバージョンのJettyがあるようです。

きみの 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

ここには2つの懸念事項があります。

まず、restfuseは古く、非常に古く、Jetty 6.1.26を必要としているということです。 (このバージョンのJettyは2007年にEOL/End-of-Lifeでした)

第二に、このバージョンは、jetty-maven-plugin が走っています。

Jetty 6の除外を追加して、試してみてください。

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

ただし、restfuse 1.0.0はJetty 9では動作しない可能性があることに注意してください。その場合、Jetty 9用に更新された新しいバージョンのrestfuseを追跡する必要があります。

7
Joakim Erdfelt

9.2.3で修正しました。バグレポートを参照してください https://bugs.Eclipse.org/bugs/show_bug.cgi?id=4385

4
Jan

Eclipse Jettyプラグインを使用して同様の問題が発生しました。適切な依存関係を追加して解決しました。詳細については、- http://Eclipse-jetty.github.io/faq.html をご覧ください。

1
Sushil Mahajan

ディレクトリ「target/classes」が存在しなかったため、このエラーを受け取りました。これを解決する簡単な方法は、src/main/Javaフォルダーを作成し、そこに任意のクラス(空のクラスも含む)を作成することです。

1
user64141

同じ問題に直面し、jettyバージョン9.4.12.v20180830を使用していた後、バージョンをバージョン9.4.12.RC2に変更し、すべて正常に動作しました

0
rajat