如何在 Eclipse PDE 中表达项目间依赖关系

2022-09-04 01:56:24

我正在寻找处理混合项目类型之间项目间依赖关系的最佳实践,其中一些项目是eclipse插件/ OSGI捆绑项目(RCP应用程序),而其他项目只是普通的旧java项目(Web服务模块)。很少有 eclipse 插件依赖于 Java 项目。

我的问题是,至少就我所见过的,在Eclipse PDE环境中没有办法清晰地表达这种依赖性。我可以让插件项目依赖于其他插件项目(via或 manifest headers),但不能依赖于普通的java项目。Import-PackageRequire-Bundle

我似乎能够让项目声明对工作区中另一个项目的jar的依赖关系,但是这些jar文件不会通过导出或启动配置来获取(尽管java代码编辑可以看到库很好)。

“Java项目”用于构建要部署在J2EE容器(目前为JBoss 4.2.2)上的服务,并在某些情况下生成多个jar - 一个用于部署到JBoss耳朵,另一个用于客户端代码(RCP应用程序)。

我们现在“解决”这个问题的方式是,我们还有2个外部工具启动器配置 - 一个用于构建所有jar,另一个用于将这些jar复制到插件项目。这有效(某种程度上),但是“整个构建”和“复制jars”目标会产生相当大的构建步骤,绕过整个eclipse增量构建功能,并通过复制jar而不是仅仅引用项目,我正在分离依赖关系信息并请求相当大的工作区刷新,这占用了开发时间,就像糖果一样。

我希望有一个更“自然”的工作区设置,它将管理项目之间的依赖关系,并仅在需要时请求增量重建,能够在RCP应用程序插件中使用服务库中的客户端代码,并能够在需要时启动RCP应用程序的所有必要类。

所以我可以把我的蛋糕吃得太;)

注意

需要明确的是,目前这与其说是关于依赖关系管理和模块管理,不如说是关于Eclipse PDE配置。

我很清楚像[Maven],[Ivy]和[Buckminster]这样的产品,它们解决了一个完全不同的问题(一旦我解决了工作空间配置问题,这些产品实际上可以派上用场来实现工作空间和构建产品)


答案 1

Eclipse 项目通过项目属性(依赖项目?)中的复选框相互依赖,这就是 Eclipse 决定构建哪个项目的方式。您可以自己设置,但通常在更改 Java 构建路径时进行设置。它将数据存储在.project文件IIRC中,因此一旦您浏览了GUI并查看了哪些更改,就可以更灵活地应用其他文件。

但是,听起来您想混合搭配 Jars 和 Bundles。要做到这一点,最简单的方法就是把所有项目都当成Java项目。在PDE项目中,您实际上可以进入并调整Java构建路径;它会抱怨并说这不是正确的方法,但它将允许你有一个PDE项目依赖于Java项目,而没有那么蓬松的JARing。话虽如此,如果这种方法存在运行时问题,我也不会感到惊讶 - PDE运行时可能不会这样认为。

另一种方法是使 JAR 本身成为 PDE/OSGi 捆绑包。毕竟,OSGi捆绑包只不过是一个在清单中具有一些额外垃圾的JAR,它将允许您使用自动依赖关系管理轻松开发和组装项目。这可能是最简单的一个,即使你并不需要清单出现在你的捆绑包中。但这样做将意味着您的PDE应用程序可以使用更加模块化的方法,而不是根据需要在每个插件中嵌入库。

所以,PDE可以生成OSGi捆绑包,这只是JAR + Manifest的另一个名字。您可以在其他环境中以完全相同的方式使用 JAR(例如,用于 EAR 或其他客户端使用),并且可以利用应用程序中的 OSGi 层。考虑到您正在谈论的混合捆绑包的类型,真的没有理由不这样做。


答案 2

我从来没有这样做过,所以这是一个理论方法。但我会尝试像ivy或maven2这样的依赖管理系统。

由于maven2的功能要多得多,那么只是依赖管理,在这种情况下,我建议使用ivy。


推荐