Java 为什么HK2要重新包装所有东西?

Java 为什么HK2要重新包装所有东西?,java,maven,dependency-management,jersey-2.0,hk2,Java,Maven,Dependency Management,Jersey 2.0,Hk2,我最近从泽西1号换到了泽西2号,因为我在做一些项目。Jersey 2给我带来的最大麻烦是它使用了HK2,出于某种原因,HK2重新打包了标准的Maven工件。为了避免潜在的恼人的调试问题,我尽量避免从不同的项目中引入相同的类。如果发生这种情况,我将使用Extra enforcer rules依赖项中的Maven enforcer规则来中断构建 根据前面提到的禁止重复类实施者规则,切换到Jersey 2在其工件和我以前使用的标准工件之间引入了以下冲突: hk2 Artifact

我最近从泽西1号换到了泽西2号,因为我在做一些项目。Jersey 2给我带来的最大麻烦是它使用了HK2,出于某种原因,HK2重新打包了标准的Maven工件。为了避免潜在的恼人的调试问题,我尽量避免从不同的项目中引入相同的类。如果发生这种情况,我将使用Extra enforcer rules依赖项中的Maven 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依赖项,例如验证API。其次,我的工件现在正在导出HK2重新打包的依赖项,而不是我希望导出的实际API类

最后,我的问题是:

  • 为什么HK2要重新包装所有东西?有什么好的理由吗
  • 什么是HK2实际重新打包,我可以只使用标准API版本吗?我怎么才能知道呢?我已经克隆了HK2项目,我在想从哪里开始发现这个问题时遇到了一些困难

  • 除了这些问题的实际答案,什么样的论坛才是联系HK2开发商的好论坛,这样我就可以直接提问了?我浏览了网站,虽然我找到了一些邮件列表,但我没有看到任何明显适合问这个问题的东西。

    HK2在OSGi环境下运行,用于GlassFish等产品。不幸的是,大多数标准JAR,如javax.inject、bean validator和aopalliance,都没有适当的OSGi头。因此,hk2需要使用OSGi头重新打包它们,以便它们在该环境中正常工作

    另外,由于GlassFish是Java EE的RI,因此对源代码的可用性有一定的法律要求,因此所做的一些重新打包是为了满足源代码的可用性要求


    也就是说,如果您不是在OSGi环境中运行,那么用标准版本替换这些JAR是安全的(尽管我自己没有尝试过)

    只要让HK2的人回答这个问题就可以了。我也不明白这种态度。正如我在问题中所说的,我的部分问题是我找不到一个好的论坛直接询问HK2的人。谢谢你的解释。对于类似org.glassfish.hk2.external:bean验证器的东西,它似乎在复制多个工件,我如何找出它正在替换的工件?除了它似乎复制的各种API工件之外,它是否添加了其他功能?我想我最好还是接受它将从标准API工件中复制内容,只是添加一些强制排除规则来忽略hk2和标准API之间的复制。@m.Justin最好看看源代码,它只是一个(有很好的文档记录的)pom.xml。有趣的部分可能在
    中,它定义了将被重新打包的依赖项。@kapep谢谢;我没注意到。源代码本身主要说明了重新打包的内容,尽管在私有包部分(classmate,jboss logging)中定义的一些内容没有在POM中显式调用(它们只是通过包名匹配)。@kapex到bean validator POM的链接断开了,新的一个没有