Недавно я перешел с Джерси 1 на Джерси 2 для некоторых проектов, над которыми я работаю. Самое большое раздражение, с которым я столкнулся с Джерси 2, заключается в том, что он использует HK2, который по какой-то причине переупаковывает стандартные артефакты Maven. Чтобы избежать возможных неприятных для отладки проблем, я стараюсь не вытягивать одни и те же классы из разных проектов. Я использую Запретить повторяющиеся классы Правила соблюдения правил Maven из зависимых правил Extra Enforcer для разрыва сборки, если это происходит.
В соответствии с вышеупомянутым правилом принудительного дублирования правил запрета, переход на Jersey 2 ввел следующие конфликты между его артефактами и стандартными, которые я ранее использовал:
hk2 Artifact Conflicting Artifact
org.glassfish.hk2.external:aopalliance-repackaged:2.3.0-b07 aopalliance:aopalliance:1.0
org.glassfish.hk2.external:bean-validator:2.3.0-b07 com.fasterxml:classmate:0.8.0 (used by org.hibernate:hibernate-validator:5.0.0.Final)
org.glassfish.hk2.external:bean-validator:2.3.0-b07 javax.validation:validation-api:1.1.0.Final
org.glassfish.hk2.external:bean-validator:2.3.0-b07 org.hibernate:hibernate-validator:5.0.0.Final
org.glassfish.hk2.external:bean-validator:2.3.0-b07 org.jboss.logging:jboss-logging:3.1.0.GA
org.glassfish.hk2.external:javax.inject:2.3.0-b07 javax.inject:javax.inject:1
Мое решение состояло в том, чтобы исключить стандартные артефакты из зависимостей, которые транзитивно вытягивают их, и поэтому используют только артефакты hk2. Я считаю, что это безопаснее: я не знаю, что еще артефакты hk2 тянут, что я мог бы отсутствовать, если бы я их исключил (например, артефакт bean -validator, похоже, переупаковывает не менее четырех артефактов). Недостатком этого является то, что во-первых, у меня тонна исключений, забивающих мои зависимости, которые приводили к другим безобидным зависимостям API, таким как validation-api. Во-вторых, мои артефакты теперь экспортируют переупакованные зависимости HK2, а не фактические классы API, которые я бы предпочел экспортировать.
В конечном счете, мои вопросы:
- Почему HK2 переупаковывает все? Есть ли веские основания для этого?
- Что такое HK2 на самом деле переупаковка, и могу ли я просто использовать стандартные версии API? Как бы я понял это? Я клонировал проект HK2, и у меня была небольшая проблема, когда я выяснил, где это узнать.
Запрет на фактический ответ на эти вопросы, что будет хорошим форумом для общения с разработчиками позади HK2, чтобы я мог задать вопрос напрямую? Я просмотрел веб-сайт, и пока я нашел списки рассылки, я не вижу ничего подходящего для того, чтобы задать этот вопрос.