【问题标题】:Using OSGI bundles with sbt or maven将 OSGI 包与 sbt 或 maven 一起使用
【发布时间】:2013-05-18 13:56:53
【问题描述】:

我很久以前就有这个疯狂的想法,所以最后决定问一下。是否有一些项目可以将捆绑包直接集成到构建过程中,而无需明确地做额外的工作,包括一个 osgi 容器和添加捆绑包等。所以在 build.sbt 或 pom.xml 中的基本思想,你只需像往常一样指定你的依赖项做而不是获取 jars,sbt 或 mvn 为您的依赖项获取捆绑包(如果可用)。在构建项目时,将下载您选择的容器并自动将包(和罐子)添加到其中?就像一个童话故事。

编辑:在最后一部分中,我的意思是类似于 felix gogo 的内容,它将创建一个脚本,用于添加捆绑包以使用它们运行容器。虽然要求太多了,但是在构建之后我可以运行一个脚本,我的整个项目将在一个没有 jar 地狱的 osgi 容器上运行。

【问题讨论】:

    标签: maven osgi sbt


    【解决方案1】:

    今天已经可以使用了。您只需使用maven bundle plugin 在构建过程中创建代码包。 maven central 中的许多罐子已经是捆绑包。因此,您只需将它们指定为普通依赖项即可。

    我不确定你想在最后一部分中实现什么。下载容器并添加捆绑包。构建过程只是创建 jar。为什么要加载容器?

    如果您想出于测试目的执行此操作,那么您可以搜索 pax exam。它完全符合您对单元测试的描述。它会下载一个容器,添加你的包并在容器中部署和运行你的测试。

    【讨论】:

    • 很抱歉,如果我不正确 maven bundle 插件只会捆绑您的项目。 bundleall 已被弃用。其他不是捆绑包的依赖项呢?,是否应该手动从它们中制作捆绑包?
    • 今天,您的大多数依赖项实际上都可以作为捆绑包找到。例如,servicemix 项目创建了我需要的大多数库的捆绑包(请参阅search.maven.org/…)。对于要内联类的情况,捆绑插件允许将外部类定义为私有包。在这种情况下,它会自动将这些添加到您的 jar 中。在 Apache Karaf 中,您还可以使用 wrap 协议将普通 jar 部署为包。见fusesource.com/docs/esb/4.2/deploy_osgi/DeployJar-Wrap.html
    • 这真的很好..但我没有看到大多数人的最新版本。虽然我同意有一种意识并且人们正在部署为捆绑包但不是每个人..你认为有可能将整个 maven 依赖包装为一个捆绑包只是 oob 吗?这有意义吗?
    • 最后一个问题我没看懂。您的意思是将所有依赖项打包到一个包中吗?一般来说,我建议将所有内容分开,因为如果将许多 jar 打包到一个包中,可能会遇到奇怪的类加载问题。
    • 好吧,举例来说,考虑到我的项目有依赖“org.apache.hbase”%“hbase”%“0.90.6-cdh3u5”,现在可以说我在任何地方都找不到这个包。因此,如果我为我的项目创建一个包,则此依赖项提取的所有 jar 都将作为类路径添加到我的包清单文件中,这使我回到了第一个问题。因此,我想问是否有一种简单的方法可以为我的项目包所依赖的这种依赖项创建一个包。
    猜你喜欢
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 2014-06-02
    • 2017-04-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    相关资源
    最近更新 更多