【发布时间】:2019-09-24 21:56:30
【问题描述】:
有没有办法将 OSGI 包用作 maven 依赖项,而无需将其中的所有包都放入它甚至不导出的类路径中?
问题的背景:我们刚刚将 org.apache.sling.xss 捆绑包作为 maven 依赖项添加到我们的项目中。如您所见in the pom.xml,它只是导出包org.apache.sling.xss,但将各种依赖项直接嵌入到它的jar 中作为Private-Package。虽然 OSGI 对其他包隐藏了这些东西,但 maven 没有。所以我们会遇到冲突:org.apache.sling.xss 嵌入例如commons-beanutils 1.7.0 版本,与我们一直在使用的较新版本的 commons-beanutils 不兼容,导致出现编译错误。
有没有什么好的解决方案——无论是从我们的角度还是从 org.apache.sling.xss 包的维护者的角度来看?理想情况下,如果您使用该捆绑包,您只会将导出的 org.apache.sling.xss 包放入类路径。因此,如果 org.apache.sling.xss 提供了一个单独的 API jar,只包含该类,那么也许一个好的解决方案是?有没有标准的方法来做到这一点,或者其他解决方案?我们能以某种方式告诉 maven 只将那个包包含到类路径中吗? (我知道 maven 有 dependency exclusion,但这在这里没有帮助,因为有问题的东西不是 sling.xss 的传递依赖,而是实际上包含在 org.apache.sling.xss jar 中。)
【问题讨论】:
-
解决冲突的一种方法是在项目 pom 中的
dependencyManagement下包含所需版本的冲突依赖项。 -
@awd 谢谢,但这不起作用:依赖项不包括从 sling.xss 传递,而是直接嵌入到 sling.xss jar 中。这不是 maven 控制的东西。
-
这是人们所做的非常糟糕的事情之一,只是将其他包着色/导入到自己的包中,这会阻止其他人将它们排除在外......
-
我认为主要问题是没有 API jar。由于 sling 是一个非常开放的社区,我可以想象我们可以改变它。
-
@khmarbaise 是的。不幸的是,如果您不希望/不能将依赖项部署为 OSGI 包,有时似乎甚至需要 OSGI。 :-( 但正如 ChristianSchneider 所说,这里真正的问题似乎是没有 API jar。
标签: java maven osgi osgi-bundle sling