【问题标题】:DropWizard (with Jetty) throws NoClassDefFoundError on "org/eclipse/jetty/util/thread/ExecutionStrategy$Factory" with mavenDropWizard(使用 Jetty)使用 maven 在“org/eclipse/jetty/util/thread/ExecutionStrategy$Factory”上抛出 NoClassDefFoundError
【发布时间】:2020-08-05 09:32:57
【问题描述】:

我们有一个模块使用 DropWizard 和 Jetty,它在启动时失败并出现错误:“org/eclipse/jetty/util/thread/ExecutionStrategy$Factory”

java.lang.NoClassDefFoundError: org/eclipse/jetty/util/thread/ExecutionStrategy$Factory
    at org.eclipse.jetty.io.SelectorManager.<init>(SelectorManager.java:52)
    at org.eclipse.jetty.server.ServerConnector$ServerConnectorManager.<init>(ServerConnector.java:497)
    at org.eclipse.jetty.server.ServerConnector.newSelectorManager(ServerConnector.java:229)
    at org.eclipse.jetty.server.ServerConnector.<init>(ServerConnector.java:221)
    at io.dropwizard.jetty.HttpConnectorFactory.buildConnector(HttpConnectorFactory.java:562)
    at io.dropwizard.jetty.HttpConnectorFactory.build(HttpConnectorFactory.java:539)
    at io.dropwizard.server.DefaultServerFactory.buildAppConnectors(DefaultServerFactory.java:234)
    at io.dropwizard.server.DefaultServerFactory.buildRoutingHandler(DefaultServerFactory.java:194)
    at io.dropwizard.server.DefaultServerFactory.build(DefaultServerFactory.java:172)
    at io.dropwizard.cli.ServerCommand.run(ServerCommand.java:49)
    at io.dropwizard.cli.EnvironmentCommand.run(EnvironmentCommand.java:44)
    at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:87)
    at io.dropwizard.cli.Cli.run(Cli.java:78)
    at io.dropwizard.Application.run(Application.java:93)

这个项目中有多个模块,项目中有2个不同的jetty-io工件,一个版本为:9.3.20和9.4.18(这是SelectorManager所在的位置,它尝试使用不存在的界面)。 由于某种原因,它似乎像旧版本(9.3.20,由另一个模块拉取)进入类路径,并尝试在 ExecutionStrategy 接口中使用 Factory 接口。 ExecutionSrategy 接口位于 jetty-util 工件中。该工件也有 2 个版本(9.4.18 和 9.3.19,较新的版本没有在 ExecutionStrategy 中有这个 Factory 接口。

抛出错误的模块的mnv:dependency -Dverbose的结果: result of mvn command

我真的不知道如何解决这个问题,maven 树看起来不错,我所看到的正在使用良好的依赖项

【问题讨论】:

  • 欢迎来到stackoverflow。

标签: java maven jetty classpath dropwizard


【解决方案1】:

不要同时混合使用多个版本的 Jetty。

依赖jetty-bom 来强制所有码头依赖项成为特定版本可能是一个好主意,无论它们来自何处的传递依赖项。 (直接引用的依赖不会使用bom特性)

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-bom</artifactId>
        <version>9.4.28.v20200408</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

【讨论】:

    猜你喜欢
    • 2015-03-26
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多