我使用Tycho构建了多个Eclipse产品。我在应用程序的每个功能中都有Jenkins的工作,还有一个用于实用程序和一个用于产品。
下图描述了我的设置:
在一项工作('A')中,我构建了一个插件('a')等。它的版本有“限定符”占位符。此插件包含在两个不相关的功能中,每个功能都在一个单独的作业('B'和'C')中构建。这2个作业还构建了特定的插件。最后,我有一个工作'D',我的应用程序是使用这两个功能组装的。
这两个功能都使用特殊版本“0.0.0”(即最新版本)声明它们对插件的依赖性。在编译时,每个功能都会获取a.plugin并更改其限定符。这会在每个特征中产生不同的限定符。
我有时遇到以下错误,导致我的构建失败:
[ERROR] Cannot resolve project dependencies:
[ERROR] Software being installed: product.d 1.0.0
[ERROR] Only one of the following can be installed at once: [plugin.a 1.2.3.1234, plugin.a 1.2.3.5678]
[ERROR] Cannot satisfy dependency: product.d 1.0.0 depends on: feature.b 0.0.0
[ERROR] Cannot satisfy dependency: product.d 1.0.0 depends on: feature.c 0.0.0
[ERROR] Cannot satisfy dependency: feature.b 1.0.0 depends on: plugin.a [1.2.3.1234]
[ERROR] Cannot satisfy dependency: feature.c 1.0.0 depends on: plugin.a [1.2.3.5678]
因此plugin.a只被编译一次,你知道如何让我的产品解决这个虚假冲突吗?
答案 0 :(得分:1)
功能构建不会更改插件的限定符;它使用目标平台中可用的插件而无需修改。功能构建仅修改进入功能JAR的文件,例如,它使用feature.xml中的可用版本替换了对插件的引用版本。
因此,如果在作业D的构建中描述失败,则您的功能构建作业已经看到了不同版本的plugin.a。这例如当您的作业按此顺序构建时发生:A(构建plugin.a_1.2.3.1234) - B - A(构建plugin.a_1.2.3.5678) - C - D.当发生这种情况时,无法构建产品(工作D)可以成功。
但是你应该问自己的问题是,你是否真的需要这种复杂的设置。功能构建与Tycho中的NOP接近,因此您可以始终将您的功能与作业A中的插件一起构建。
甚至有可能使复杂的作业设置可靠地工作,例如通过插件引用替换其中一个功能中的插件包含,或者使用基于SCM的可重现构建限定符(非常高级!)。但是在你的情况下,所有这些选择似乎都不值得。