为什么HK2要重新包装所有东西?
我最近从泽西岛1号切换到泽西岛2号,用于我从事的一些项目。我在泽西岛2中遇到的最大烦恼是它使用了HK2,由于某种原因,它重新包装了标准的Maven工件。为了避免潜在的烦人的调试问题,我尽量避免从不同的项目中提取相同的类。如果发生这种情况,我使用“额外执行者规则”依赖项中的“禁止重复类 Maven 执行器”规则来中断生成。
根据前面提到的“禁止重复类”执行器规则,切换到 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依赖项,例如verition-api。其次,我的工件现在正在导出HK2重新打包的依赖项,而不是我想要导出的实际API类。
最终,我的问题是:
- 为什么HK2要重新包装所有东西?这有什么好的理由吗?
- HK2 实际上什么是重新打包,我可以只使用标准 API 版本吗?我怎么知道呢?我已经克隆了HK2项目,我有点难以弄清楚从哪里开始发现这个问题。
除了这些问题的实际答案之外,有什么好论坛可以联系HK2背后的开发人员,这样我就可以直接提出问题了?我已经浏览了网站,虽然我发现了一些邮件列表,但我没有看到任何明显适合问这个问题的东西。