我有一个巨大的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包添加到我的插件中,保持插件的构建清单优先?
答案 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 ......