2016-08-01 5 views
0

В моем проекте я вынужден использовать эти пакеты:Различные варианты в переходных зависимостей в Gradle

  • com.sparkjava:spark-core:2.3, который заканчивается использованием jetty-server:9.3.2.v20150730
  • org.apache.spark:spark-core_2.10:1.2.0, который заканчивается использованием jetty-server:8.1.14.v20131031

Обратите внимание, что com.sparkjava и org.apache.spark не имеют никакого отношения друг к другу. Они называются как искры funnily.

Проблема здесь в том, что обе версии пристаней несовместимы, поэтому, если я заставляю jetty 8.X системные сбои, если я заставляю jetty 9.X система падает снова, я получаю в одном случае и java.lang.NoClassDefFoundError: org/eclipse/jetty/server/bio/SocketConnector в другой java.lang.NoClassDefFoundError: org/eclipse/jetty/server/ServerConnector.

Что я должен делать в такой ситуации?

Примечание: я попытался затенять причал, но менеджер зависимостей разрешает только один (9.X по умолчанию, или 8.X, если я его заставляю), а затем он его тень, поэтому он действительно не помогает.

ответ

1

Было бы чрезвычайно трудно решить эту ситуацию.

Jetty 8.1 - это около 4 основных версий позади Jetty 9.3, что представляет собой множество сотен выпусков разницы.

Примечание: Управление версиями Jetty [servlet_support]. [Major_ver]. [Minor_ver].

Причал 8.x является сервлетов 3.0, в то время как Причал 9.x является сервлетов 3.1

Архитектура соединителей развивалась чрезвычайно в тот период времени, от того, старая школа не блокирующих сокетов в Jetty 8, чтобы не полностью блокируя разъемы на Jetty 9, а Jetty 9 нуждается в разработке разъемов для поддержки функций в TLS/1.2 и ALPN для правильной поддержки HTTP/2 и внутренней обработки ввода-вывода для поддержки нового сервлета 3.1 Async I/O.

Решения # 1:

Вы не будете в состоянии иметь оба версий, работающие в одной и ту же виртуальной машине без какого-то изоляций загрузчика, и осторожная конфигурация, чтобы они не претендуют на одни и те же ресурсы (порты прослушивания , временные файлы и т.д.)

Решение # 2:

Upgrade (или понижение) один или другой искровой зависимость, пока вы попали общую версию пристани. (Spark_2.11/2.0.0 seems to support Jetty 9.2.x)

Решение # 3:

Apache Спарк с открытым исходным кодом, перейдите представить патч, который обновляет его использование Причала для 9.3 (это может быть трудно, как Apache Спарк не готова к использованию Java-еще , что является обязательным требованием для Jetty 9.3)

+0

Спасибо, похоже, что я немного в этом стесняюсь. Тогда я избавлюсь от искрявы. – Marc

+0

Только для записи. Я закончил удаление кода, использующего «sparkjava» и заставляя другую netty-версию в build.gradle через теневой плагин. – Marc

Смежные вопросы