领先一步
VMware 提供培训和认证,以快速提升您的进度。
了解更多在之前的博客中,Ben 介绍了 Bundlor,其背后的概念以及如何从命令行以及 ANT 和 Maven 中使用它。在这篇文章中,我将展示如何在 Eclipse 环境中使用 Bundlor。
在开发基于 OSGi 的应用程序时,一些用户不想花费时间不断更新他们的MANIFEST.MF文件,而是希望专注于应用程序组件中的实际业务逻辑:在这种情况下,Bundlor Eclipse 集成将确保该MANIFEST.MF文件反映项目中代码工件表达的实际依赖关系,并消除了在 Eclipse 中手动管理类路径设置的需要。此外,BundlorEclipse 可以通过在 Eclipse 中引入 *仅测试* 源文件夹和第二个名为TEST.MF的清单文件来帮助清晰地分离运行时依赖项和测试依赖项,以指定单元测试类的依赖项。
如果 Bundlor 在 Eclipse 中运行,它将使用基于使用Eclipse JDT 创建的抽象语法树的源代码扫描来处理 Java 源文件。这允许 Bundlor 在没有现有项目类路径的情况下以及从非编译的、部分 Java 代码创建清单文件。此外,Bundlor 支持的所有其他资源(目前是 Spring 配置文件、Hibernate 和 JPA 映射文件)也在 Eclipse 中处理。
在 Eclipse 中使用时,Bundlor 支持清单文件的增量创建和更新。这在开发过程中非常有用,此时只有一组源代码工件发生了更改。然后,Bundlor 将只更新属于已更改资源的那些标题值,而不是重新处理整个项目。
如果您不想让 Bundlor 在后台运行以自动更新资源更改时的清单,或者您想更精确地控制何时应更新清单,则 Eclipse 集成提供了一个按需启动 Bundlor 的操作。
除了生成主要的MANIFEST.MFMANIFEST.MF 文件之外,BundlorEclipse 还能够为纯测试依赖项创建一个TEST.MFTEST.MF 文件。为了支持这一点,Eclipse Java 项目中的源文件夹可以标记为 *仅测试*。然后,Bundlor 将处理这些 *仅测试* 文件夹并将检测到的依赖项添加到TEST.MF.
BundlorEclipse 可以用于任何具有 *SpringSource OSGi Bundle* 项目性质的 Eclipse Java 项目。请注意,这不需要使用 *Bundle Classpath Container*。
要测试 Bundlor,您可以使用 *新建 Bundle 项目向导* 创建一个新项目。向导将确保满足运行 Bundlor 的所有前提条件。如果您想在现有项目上使用或测试 Bundlor,请按照以下步骤操作
BundlorEclipse 可以与 dm Server Tools 中的 Bundle Classpath Container 结合使用。类路径容器可以从任何 OSGi bundle 项目的上下文菜单中启用和禁用。在此设置中,当MANIFEST.MFMANIFEST.MFTEST.MF文件已被 Bundlor 更改时,容器将自动更新类路径。典型的开发人员工作流程如下所示
只有在从源代码工件添加或删除依赖项或源代码工件本身已被删除/移动时,步骤 4 到 6 才会执行。
当然,BundlorEclipse 可以与任何其他类路径容器(例如 Maven Classpath Container)一起使用:如果您想使用 Maven 插件,如 m2eclipse 或 Q4E,您可以删除 *Bundle Classpath Container*(*Spring Tools -> 禁用 Bundle Classpath Container*)并为项目启用 Maven 支持。在这种 Artifact-First 方法中,Bundlor 将只管理MANIFEST.MFMANIFEST.MF 文件;类路径将由 Maven 插件控制。
请注意,在此阶段,Bundlor 在检测到的依赖项、MANIFEST.MFMANIFEST.MF 文件和之间没有任何同步功能:Bundlor 不会自动将检测到的依赖项添加到和pom.xml 文件中。这在产品待办事项列表中,很可能在以后的版本中得到解决。
BundlorEclipse 作为 dm Server Tools 1.1.3.M1 的一部分提供,其许可证为 Eclipse Public License v1.0。您可以从我们的综合更新站点安装 dm Server Tools:
http://www.springsource.org/update/e3.4
如果您遇到任何问题,请随时在Bundlor 项目中打开一个JIRA。由于 Bundlor 和 BundlorEclipse 是新产品,我们很乐意在我们的 dm Server Tools社区论坛中讨论这些问题。