我对 OSGi 世界比较陌生,需要帮助来了解如何自动化我的构建过程。我熟悉了在 Eclipse 中使用 bndtool 并学会了如何解决依赖关系、运行、测试、调试和生成独立的 jar。我还浏览了 OSGi 官方网站上发布的基本和 Maven 教程。我的问题是如何自动化我的构建!所以,假设我有 SVN 中的代码。我需要能够检查代码,然后运行构建脚本/工具来生成我的包,然后我可以使用 Felix 或 Karaf 进行部署。基于 Maven 的官方教程(使用 OSGi enRoute)仅显示了如何生成我不感兴趣的独立 jar;我需要生成捆绑包。我阅读了有关 Maven Bundle Plugin 的信息,但我认为在使用它时,我将失去 Eclipse 提供的基于 UI 的 bndtools 的所有奢华。
4 回答
如果您使用带有 bndtools 的 maven 构建,那么您确实会失去一些好处。我有一个使用 maven 构建的完整项目的示例。请参阅osgi 聊天。它使用 bnd-maven-plugin 构建包,但您也可以使用 maven-bundle-plugin。在这两种情况下,您都使用 eclipse 中的标准 m2e 支持。然后 Bndtools 只涉及解析捆绑包和创建可运行的 jar。
我们在 apache 社区的许多项目中使用纯 maven 方法。这是在 apache karaf 上部署的行之有效的方法。如果您想部署到 karaf,那么 bndtools 将无济于事,因为它无法创建 karaf 功能。
如果您想要 bndtools 的所有 IDE 支持,则使用带有 bndtools 工作区(cnf 目录)的本机 bndtools 构建并使用它提供的 gradle 构建。
Bndtools 带有一个 gradle 插件,您可以使用它来导出可执行的 jar,但如果您只是运行构建,则 jar 将在每个项目的生成文件夹中可用。
您可以使用 runbundles 任务基于 .bndrun 文件导出捆绑包(这类似于生成可执行 jar,但只是创建一个包含捆绑包的文件夹)
我花了一些时间探索 bnd-maven-plugin。这是我能找到的混合 Eclipse、bnd-maven-plugin 和 bndtools 的最佳方式: 1. 使用 bndtools 解决需求并在 Eclipse 内的框架内运行包。2. 使用 bnd-maven-plugin 构建捆绑包 3. 使用“indexer”插件生成索引文件,用于 bndtools 的依赖解析。尽管此方法允许在 Eclipse 中运行包,但每次都需要“mvn install”,因为 bndtools 插件不知道如何从 Eclipse 工作区解析依赖关系。这种方法也使得无法在 Eclipse 中调试代码。有没有更好的选择?
谢谢
作为一个长期的 maven 用户,也因为我打算使用 karaf (jboss fuse),所以我听从了 Christian 的建议,花了一些时间探索 maven-bundle-plugin 并计划探索 bnd-maven-plugin。从关于 bnd-maven-plugin 的第一次阅读中,我发现它比 apache 插件有一些优势(直接从 bnd 而不是 pom 获取指令;预计与 bnd 更新并行的更新速度更快)。关于这个插件,我仍然需要了解一件事:它为哪个 OSGi 版本生成捆绑包?根据官方网站,我知道 maven-bundle-plugin 仅为 R4 生成,这是一个限制。那么 bnd-maven-plugin 呢?还有一个问题:哪些插件可用于生成 karaf kars,它们可以与 bnd-bundle-plugin 结合使用吗?非常感谢您的耐心等待!