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

2024-01-24

我正在寻找处理混合项目类型之间项目间依赖关系的最佳实践,其中一些项目是 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(使用前将#替换为@)

如何在 Eclipse PDE 中表达项目间依赖关系 的相关文章

随机推荐

  • 查询Windows显示缩放比例

    I want to query the Windows display scaling setting programmatically In this case I want it to return 125 since I config
  • 如何使用斯坦福 CoreNLP 对预标记文本进行 NER 和 POS 标记?

    我在我的应用程序中使用斯坦福大学的 CoreNLP 命名实体识别器 NER 和词性 POS 标记器 问题是我的代码预先标记了文本 然后我需要对每个标记进行 NER 和 POS 标记 但是 我只能找到如何使用命令行选项来执行此操作 而不能以编
  • 没有冲突的合并是否等于没有冲突的rebase?

    这是正确的吗git merge当且仅当相应的git rebase会在没有冲突的情况下成功吗 不 事实上有一个简单的情况 合并工作正常 但变基却不行 o A lt mainline B C C lt branch where C是一个与以下冲
  • 数据绑定错误 - 找不到访问器

    我用谷歌搜索但仍然没有找到适合我的解决方案 这是我的 xml
  • 带标志的数组

    假设我有一个布尔标志数组 它会根据条件设置为 true 或 false 假设索引 1 2 6 已设置 所有其他标志均未设置 我需要调用functionA 如果索引 2 3 5 已设置并且所有其他标志未设置 我需要调用functionB 除了
  • 如何使角度组件与窗口的实际尺寸全屏显示

    我正在使用 Angular 在我的 app component html 中我有一些像这样的组件
  • 在c语句中计算token

    以下 C 语句中的标记数 printf i d i x i i 我认为这里有 12 个令牌 但我的答案是错误的 谁能告诉我如何找到上述 C 语句中的标记 PS 我知道标记是编译器不会分解为组件元素的源程序文本 据我了解C代码解析 标记是 总
  • 在 UITableView 中取消选择行时如何从数组中删除项目

    我正在尝试从 a 中捕获选定的项目UITableView并将它们保存到一个新数组中 以下代码通过在点击行时添加项目来创建新数组 但它不会在取消选择行时删除项目 如何从列表中删除项目newFruitList当a中的一行UITableView被
  • 在 Ant build.xml 中使用 Compass 编译 SASS

    有谁知道如何使用 JRuby 和 Compass 模块在 build xml 中编译 SASS scss 文件 我可以在 sass 独立安装中使用 Sass Exec 模块 通过以下方式从 scss 编译为 css
  • NHibernate 错误消息:此 SqlParameterCollection 的索引 3 无效,计数 = 3

    I have a test database design like this 以下是伪代码 BhillHeader public class BillHeader public BillHeader BillDetails new Lis
  • std::regex 和忽略标志

    学习基础后c questions tagged c 2b 2b规则 我专注于std regex 创建两个控制台应用程序 1 renrem and 2 bfind 我决定创建一些方便的函数来处理regex in c questions tag
  • React/MUI Popover 使用anchorPosition 定位不正确

    我在 a 中使用 React MUI Popover反应窗口 https github com bvaughn react window列表元素并且无法使 Popover 正确定位 它总是出现在窗口的左上角 该组件无法在锚元素上执行 get
  • dojox.grid.DataGrid自定义排序方法?

    我有一个 dojox grid DataGrid 其中一列包含日期数据 例如 09 01 00 18 10 2010 09 03 00 18 10 2010 09 02 00 19 10 2010 当我单击标题并对列进行排序时 我得到了 0
  • 移植 AT&T inline-asm inb / outb 包装器以与 gcc -masm=intel 一起使用

    我目前正在开发 x86 操作系统 我尝试实现 inb 函数here https wiki osdev org Inline Assembly Examples它给了我Error Operand type mismatch for in 这也
  • 使用 Oracle 客户端和 Kerberos 与 Python 连接到数据库

    我有一个 python 脚本 它基本上使用x Oracleoracle 客户端连接到我的数据库服务器 连接后我可以运行 SQL 查询 现在 由于我的数据库凭据已过期 我被迫使用我不知道的 kerberos 身份验证 以前只需执行以下代码即可
  • Redis:可能使数组或排序集中的元素过期吗?

    目前是否只能使整个键 值对过期 如果我想将值添加到列表类型结构并让它们在插入后 1 小时自动删除 该怎么办 目前是否可行 或者是否需要运行 cron 作业来手动进行清除 有一个通用模式可以很好地解决这个问题 使用排序集 并使用时间戳作为分数
  • 取消透视从另一个表中获取的列

    我有超过 500 个列需要在取消透视时使用 select col1 col2 col3 from select from table unpivot col3 for col2 in value value2 value788 因此 我没有
  • Conv1D 层 Keras 的 input_shape

    我正在尝试制作一个用于非图像数据集二元分类的 CNN 模型 我的模型 代码正在运行并产生非常好的结果 准确性很高 但我无法理解input shape第一层参数Conv1D X 或输入的形状 此处x train df 为 2000 28 它有
  • 如何为 Nexus5 和 Nexus 5x 设置正确的边距

    我正在开发该应用程序 现在遇到了很大的问题 据我们所知 nexus 5 和 nexus 5x 使用相同的资源目录 xxhdpi 我的观点由于一些空白而被打破 即我必须为 nexus 5 设置 40dp 为 nexus5x 设置 65dp 那
  • 如何在 Eclipse PDE 中表达项目间依赖关系

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