Почему HK2 переупаковывает все?

Недавно я перешел с Джерси 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, чтобы я мог задать вопрос напрямую? Я просмотрел веб-сайт, и пока я нашел списки рассылки, я не вижу ничего подходящего для того, чтобы задать этот вопрос.

Ответ 1

HK2 работает в среде OSGi для таких продуктов, как GlassFish. К сожалению, большинство стандартных банок, таких как javax.inject, bean -validator и aopalliance, не имеют соответствующих заголовков OSGi. Поэтому hk2 необходимо переупаковать их с заголовками OSGi, чтобы они нормально работали в этой среде.

Кроме того, поскольку GlassFish является RI для Java EE, существуют определенные юридические требования, которые предъявляются к доступности исходного кода, поэтому некоторые из переупаковки, которые выполняются, должны удовлетворять требованиям к исходному коду.

Если вы не работаете в среде OSGi, можно заменить эти банки стандартными версиями (хотя я сам этого не пробовал)