-1

我有一个带有许多 RCP 插件的巨大 eclipse-rcp 项目“A”。所有这些都是由第谷首先构建的。在一个单独的项目“B”中,我有一些 OSGi 包。

我需要将来自 B 的包作为依赖项添加到 A 中的某些插件。当我在 A-plugin 的 MANIFEST.MF(“Require-Bundle: B.bundle1”)中添加 B 包时,tycho 找不到 B.bundle1(“无法满足从 A.plugin 1.0.0 到 bundle B.bundle1 0.0.0") 的依赖关系。

我知道,我可以将 tycho 配置为使用 pom 依赖项(考虑并添加 B.bundle1 作为 maven 依赖项)。Tycho 现在可以构建项目 A,但它会忽略 A 插件中的所有清单并生成新的清单。看起来项目 A 现在被认为是 pom-first。

如何将 OSGi 捆绑包添加到我的插件中,同时保持插件的构建清单优先?

4

2 回答 2

1

Tycho 从来不是 POM 优先的,即它从不生成 Bundle 清单。然而,它确实在构建期间读取和写入清单源文件(以替换.qualifier文字),因此构建结果中的清单可能与原始格式不同。然而,它等同于源。

请注意,根据清单文件格式的定义,如果清单的最后一行没有被换行符终止,则它会被忽略。因此,如果您的资料中出现这种情况,那么 Tycho 似乎从清单中删除了一个标题。这是真的,但只是因为标头无效并且无论如何都会被 OSGi 运行时忽略。

AFAIK,如果源清单的最后一行没有正确终止,最新的 Tycho 版本会打印警告。

于 2013-09-23T12:59:08.083 回答
0

Tycho 可以在两个地方找到捆绑包:P2 或 Maven 存储库。

如果您的 B 包位于 maven 存储库中,即使您将 Require-Bundle 添加到清单中,您也需要将依赖项添加到 A 的 pom.xml 中。这意味着它不是完​​全先显化的。

但是,只有当您的依赖项(项目 B)位于某个 P​​2 存储库中时。那么你只需要设置清单(Import-Package 比 Require-Bundle 更好)。

因此,另一种选择是您在 CI 中创建一个作业,以从项目 B 构建捆绑包并将其安装到 maven 存储库(mvn install)。或者创建一个生成 p2 存储库并将其部署到某个 HTTP 服务器的作业。

然后创建一个作业来构建 A ,您需要在其中正确设置其 tycho 构建以使用生成的 maven 存储库...(http://wiki.eclipse.org/Tycho/Target_Platform#.22POM_dependencies_consider.22)或 p2. ..

于 2013-09-20T03:37:01.937 回答