DropWizard (с Jetty) выдает NoClassDefFoundError в "org / eclipse / jetty / util / thread / ExecutionStrategy $ Factory" с maven - PullRequest
1 голос
/ 22 апреля 2020

У нас есть модуль, который использует 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, которую извлекает другой модуль) попадает в путь к классам, и она пытается использовать интерфейс Factory в интерфейсе ExecutionStrategy. Интерфейс ExecutionSrategy находится внутри артефакта jetty-util. И есть 2 версии этого артефакта (9.4.18 и 9.3.19, более новая версия не имеет этот интерфейс Factory в ExecutionStrategy.

Результат mnv: dependency - Перевернутый модуль, в котором была выдана ошибка: результат команды mvn

Я действительно не знаю, как решить эту проблему, дерево maven выглядит хорошо, из чего используются хорошие зависимости Я вижу

1 Ответ

0 голосов
/ 22 апреля 2020

Не смешивайте несколько версий Jetty одновременно.

Возможно, было бы неплохо полагаться на jetty-bom, чтобы все зависимости Jetty были специфицированной c версией, независимо от того, переходные зависимости, откуда они берутся. (в ссылках с прямыми ссылками не используются функции 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>
...