由于版本限定符,同一产品中的两个功能中的相同插件会导致冲突

时间:2014-07-28 12:48:47

标签: eclipse-rcp tycho

我使用Tycho构建了多个Eclipse产品。我在应用程序的每个功能中都有Jenkins的工作,还有一个用于实用程序和一个用于产品。

下图描述了我的设置: dependencies

在一项工作('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只被编译一次,你知道如何让我的产品解决这个虚假冲突吗?

1 个答案:

答案 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的可重现构建限定符(非常高级!)。但是在你的情况下,所有这些选择似乎都不值得。