10

我有一组使用 Maven 构建的 OSGi 包,我想知道是否有可用的 Maven 插件允许我执行以下操作:

  1. 指定要包含在分发中的捆绑包集和/或指定单个捆绑包并解析依赖项。
  2. 构建一个完整的框架分布。我的意思是一个包含所有需要的包的单个 zip 文件,加上正确的 felix 目录结构,以便用户可以简单地解压缩文件并键入“java -jar bin/felix.jar”。

我做了一些谷歌搜索,除了 appassembler 之外,我没有发现任何很有希望的东西。你们有没有人想出一个好的解决方案?

更新 这是我要完成的工作的说明。

example-parent\
               bundle-one
               bundle-two
               bundle-three
               assembly-one
               assembly-two

其中assembly-one将包括bundle-one并且将包括bundle-two和或它们的任何组合。然后,当您构建项目时,您将获得两个 zip 文件,一个用于,一个用于在自包含的 felix 安装中包含适当的包。例如:assembly-twobundle-twobundle-threeassembly-oneassembly-two

assembly-one.zip\
                 bin\felix.jar
                 bundle\bundle-one, bundle-two, plus bare min felix bundles
                 conf\any configuration files I need

希望这可以提供有关我要完成的工作的更多信息。我想这有点类似于 Eclipse 执行 feature.xml 的方式,但当然不使用 Eclipse。

4

4 回答 4

6

Sling Launchpad 插件 [1] 创建一个可运行的 jar 文件或嵌入 OSGi 框架的 war 文件和一个可定制的捆绑包列表,这可能是您所需要的。有了它,您甚至不必解压缩生成的 jar 文件,只需启动它就足够了。

[1] http://sling.apache.org/site/maven-launchpad-plugin.html

于 2012-02-17T16:48:28.677 回答
3

Fred 建议使用程序集插件来打包一个可以压缩的独立发行版,这是一个很好的建议。如果您正在寻找构建文件如何工作的示例,Apache Aries 博客示例源使用 maven 包和程序集插件。

另一种方法是创建应用程序工件。(目前)还没有一个单一的 OSGi 标准,但是有几个项目提供了一种将捆绑包组合成超级捆绑包的方法。这与您用程序集描述的不太像,因为不包括 OSGi 框架,但它类似于 Eclipse feature.xmls。查看 Apache Aries eba(企业捆绑归档)应用程序、Virgo 计划文件或 Karaf 功能。在大多数这些捆绑包中,您会获得一个包含一些捆绑包的存档,和/或描述应用程序内容的元数据文件。可以从存储库中提供未包含在存档中的捆绑包。对于 Aries,还有一个 eba maven 打包,它将生成 .eba 存档,其中包含 APPLICATION.MF 文件和包含的捆绑包。

我们在 Enterprise OSGi in Action ( http://www.manning.com/enterpriseosgiinaction ) 的第 4 章中对此进行了更多介绍,或者快速 google 搜索 eba、Virgo 计划或 karaf 功能应该会找到更多。您的用例的缺点是应用程序需要部署到运行时并预先安装适当的技术,因为它们都不是核心 OSGi。

另一个让部署更容易的项目是 Felix 文件安装。这允许您将捆绑包拖放到受监视的目录中,从而不必编写配置文件。

于 2012-02-17T02:24:22.217 回答
2

也许这可以帮助您实现目标?

我不确定,但也许值得一试?

http://maven.apache.org/plugins/maven-assembly-plugin/

也可能是以下?:

http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

这将需要一些阅读/研究,但我认为它可能有用。如果不是,那么也许我没有正确理解您的目标,我很抱歉。

于 2012-02-16T23:18:18.287 回答
0

如果您使用 OSGi v4+ 并使用 Maven 构建,请使用pax-ops4j。它使用起来非常方便,使 OSGi 开发变得轻而易举。

于 2012-02-17T16:57:23.790 回答