【问题标题】:Add bundles to manifest-first eclipse RCP plugins, built by tycho将捆绑包添加到由 tycho 构建的 manifest-first eclipse RCP 插件
【发布时间】:2013-09-19 15:53:09
【问题描述】:

我有一个带有许多 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 到捆绑 B.bundle1 0.0.0 的依赖关系”)。

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

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

【问题讨论】:

    标签: java maven osgi eclipse-rcp tycho


    【解决方案1】:

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

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

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

    【讨论】:

    • 可能是结果被格式化并以不同的顺序排列让我这么想。我把事情复杂化了,试图解决我实际上没有的问题。感谢您对 tycho 和 pom-first built 的许可。
    【解决方案2】:

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

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

    但是,只有当您的依赖项(项目 B)在某个 P2 存储库中时才会如此。那么你只需要设置清单(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...

    【讨论】:

    • 感谢您的回答。但是,在我的构建中,将 B 捆绑包添加到 MANIFEST 和 pom.xml 作为依赖项是不够的。在我设置<pomDependencies>consider 之前,它不起作用(“无法满足依赖项...”)。反过来,这会将整个 A 构建切换到 pom-first,跳过我所有的复杂清单。
    • 我很好奇。跳过了哪些复杂的清单?
    • 项目A的插件中的所有清单都没有添加到目标插件中。而是生成新的清单。
    • 伙计,您的构建设置有问题。第谷不生成任何清单。我从 0.11 开始就在使用 Tycho,从未见过这样的事情。
    • 也许你在 中添加了 maven-bundle-plugin 而不是
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2020-05-04
    • 2015-10-04
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多