我可以使用 Apache Felix Maven Bundle Plugin 声明像私有包这样的依赖项吗?

Posted

技术标签:

【中文标题】我可以使用 Apache Felix Maven Bundle Plugin 声明像私有包这样的依赖项吗?【英文标题】:Can I declare a dependency like private package using Apache Felix Maven Bundle Plugin? 【发布时间】:2017-06-28 09:35:52 【问题描述】:

由于传递依赖的版本不同,我想避免 NoClassDefFoundException。

在Apache Felix Maven Bundle Plugin documentation 之后,我可以看到<Private-Package>org.apache.felix.log.impl</Private-Package>,但在该示例中,声明为私有的依赖项是一个自己的类。

我不知道该语句是否可以与依赖项一起使用。

【问题讨论】:

【参考方案1】:

您可以将 Private-Package 用于位于依赖项中的包。结果将是包的内容嵌入到您的包中。

请小心,因为这将导致此包中所有类的所有导入的 Import-Package 语句。因此实际上会使您的情况变得更糟。

【讨论】:

感谢您的回复。我是这么想的,但我想知道 Eclipse 如何解决这个问题。也许 Eclipse 使用类似BND 的东西?在这种情况下,BND 是否与 OSGi 捆绑包兼容? Eclipse 是什么意思? Eclipse RCP 还是 IDE 的插件透视图?它目前不使用 bnd。 Eclipse 解决了这个问题,如果你查看 pom.xml 文件中的 Dependency 部分,你可以看到 Eclipse 将传递依赖替换为其他依赖提供的最新依赖。你明白吗? 现在我明白你的意思了。这是maven或eclipse中m2e插件的逻辑。在 OSGi 中,这些依赖关系是不相关的。您可以使用带有包和版本范围的 Import-Package 来表达您的依赖关系。这就是在运行时决定哪个包可以提供这样的包。 OSGi 还将使用适合导入版本范围的最高版本号。 我会这样做,我希望它有效。以后我会告诉你的。谢谢你的帮助! ;)

以上是关于我可以使用 Apache Felix Maven Bundle Plugin 声明像私有包这样的依赖项吗?的主要内容,如果未能解决你的问题,请参考以下文章

关于eclipse上运行maven项目的错误。java.lang.RuntimeException

如何从代码中启动和使用 Apache Felix?

OSGi 容器 - Equinox 与 Apache Karaf 中的 Apache Felix

未指定 Maven 插件版本

如何将 web 应用程序部署到 Apache Felix?

Apache Felix 和 Glassfish V2