将包添加到由tycho构建的manifest-first eclipse RCP插件中

时间:2013-09-19 15:53:09

标签: java maven osgi eclipse-rcp tycho

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

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

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

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

2 个答案:

答案 0 :(得分:1)

Tycho绝不是POM优先,即它永远不会生成Bundle清单。但它在构建期间读取和写入Manifest源文件(为了替换.qualifier文字),因此构建结果中的清单可能与原始格式不同。但它等同于来源。

请注意,清单文件格式的定义如果清单的最后一行未被换行符终止,则会被忽略。因此,如果您的资源中出现这种情况,则Tycho可能会从清单中删除标头。这是真的,但只是因为标题无效并且无论如何都会被OSGi运行时忽略。

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

答案 1 :(得分:0)

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

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

但是,只有当您的依赖项(项目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 ......