我正在寻找处理混合项目类型之间项目间依赖关系的最佳实践,其中一些项目是 eclipse 插件/OSGI 捆绑项目(RCP 应用程序),而其他项目只是普通的旧 java 项目(Web 服务模块)。很少有 Eclipse 插件依赖于 Java 项目。
我的问题是,至少据我所知,没有办法在 Eclipse PDE 环境中清楚地表达这种依赖关系。我可以让插件项目依赖于其他插件项目(通过Import-Package
or Require-Bundle
清单头),但不是普通的 java 项目。
我似乎能够让项目声明对工作区中另一个项目的 jar 的依赖关系,但导出或启动配置都不会拾取这些 jar 文件(尽管 java 代码编辑可以很好地看到这些库)。
“Java 项目”用于构建要部署在 J2EE 容器(目前是 JBoss 4.2.2)上的服务,并在某些情况下生成多个 jar - 一个用于部署到 JBoss Ear,另一个供客户端代码使用( RCP 应用程序)。
我们现在“解决”这个问题的方法是,我们有另外 2 个外部工具启动器配置 - 一个用于构建所有 jar,另一个用于将这些 jar 复制到插件项目。这是可行的(某种程度上),但是“整个构建”和“复制 jars”目标会产生相当大的构建步骤,绕过整个 eclipse 增量构建功能,并通过复制 jars 而不是仅仅引用我正在解耦依赖信息的项目并要求进行相当大的工作空间刷新,这就像糖果一样消耗了开发时间。
我想要的是一个更加“自然”的工作空间设置,它可以管理项目之间的依赖关系,并仅在需要时请求增量重建,能够在 RCP 应用程序插件中使用服务库中的客户端代码,并且能够启动 RCP 应用程序以及所需的所有必要类。
那么我可以鱼与熊掌兼得吗;)
NOTE
需要明确的是,目前与其说是关于依赖管理和模块管理,不如说是关于 Eclipse PDE 配置。
我很了解像 [Maven]、[Ivy] 和 [Buckminster] 这样的产品,它们解决了一个完全不同的问题(一旦我解决了工作区配置问题,这些产品实际上可以派上用场来实现工作区和构建产品)
Eclipse 项目通过项目属性中的复选框(依赖项目?)相互依赖,这就是 Eclipse 决定构建哪个项目的方式。您可以自己设置它,但它通常是在更改 Java 构建路径时设置的。它将数据存储在 .project 文件 IIRC 中,因此一旦您浏览完 GUI 并看到了哪些变化,您就可以更灵活地应用其他内容。
然而,听起来您想混合搭配罐子和捆绑包。最简单的方法是将所有项目都视为 Java 项目。在 PDE 项目中,您实际上可以进入并调整 Java 构建路径;它会抱怨并说这不是正确的方法,但它允许您拥有一个依赖于 Java 项目的 PDE 项目,而无需进行所有那些蓬松的 JARing。话虽如此,如果这种方法存在运行时问题,我也不会感到惊讶 - PDE 运行时可能不会那样看。
另一种方法是使 JAR 本身成为 PDE/OSGi 包。毕竟,OSGi 包只不过是一个在清单中添加了一些额外内容的 JAR,它可以让您使用自动依赖管理轻松地开发和组装您的项目。这可能是最容易实现的,即使您并不真正需要清单出现在您的捆绑包中。但这样做意味着您的 PDE 应用程序可以采用更加模块化的方法来交付,而不是根据需要将库嵌入到每个插件中。
因此,PDE 可以生成 OSGi 包,这只是 JAR + Manifest 内容的另一个名称。您可以在其他环境中以完全相同的方式使用 JAR(例如,用于 EAR 或其他客户端使用),并且可以在应用程序中利用 OSGi 层。考虑到您所讨论的混合捆绑类型,确实没有理由不这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)