将Eclipse包导入Maven:如何映射版本?

时间:2011-03-20 20:09:47

标签: eclipse maven

我正在使用Project Dash,特别是在一组工具上将Eclipse包(如org.eclipse.swt.gtk.linux.x86_64_3.6.2.v3659b.jar)导入Maven 2存储库。我们在周末和here is the result: A testing Maven 2 repository containing most of Eclipse 3.6.2上运行了这些工具。

在转换过程中,我们遇到了一个没有简单解决方案的问题:大多数Eclipse捆绑包要么不请求特定版本,要么请求版本范围。所以我们都有:

Require-Bundle: org.eclipse.core.runtime

Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)"

在转换过程中,工具收集所有捆绑包的所有版本,如果我们需要为上面的示例编写POM,我们会写出我们收集的版本(在本例中为3.6.2)。在小写字母中,我们单独留下版本范围。到目前为止没问题。

现在出现了一个新版本,比如3.7。当我们转换它时,会创建第一个POM的新版本3.7.0,它将获得org.eclipse.core:org.eclipse.core.runtime:3.7.0的依赖关系,而第二个创建的版本范围与以前相同。

注意:我们现在有四个POM(两个用于3.6.2,两个用于3.7)。一个取决于core.runtime 3.6.2,一个取决于3.7.0,两个取决于版本范围[3.2.0,4.0.0)

已发布,您不会更改任何内容。您不会更新到3.7.0

现在我们遇到了一个问题:如果在构建中使用版本3.6.2的这两个工件,那么第一个工件仍将使用核心运行时3.6.2,因为它的版本已被锁定。

但第二个将更新Maven元数据并看到“哦,我们也有3.7,”下载并发出爆炸声,最终得到org.eclipse.core:org.eclipse.core.runtime:3.7 {{ 1}}在您的类路径中,不会改变您的任何内容

那很糟糕。我们该如何解决?

1 个答案:

答案 0 :(得分:1)

好吧,你不会在你的类路径中同时拥有3.7和3.6.2 - Maven将采用最高版本,因此你升级到3.7(这可能不是Eclipse Maven工件的用户想要的或者期望)。

鉴于(据我所知)Eclipse同时发布所有组件,你不能忽略bundle版本范围(来自第二个例子)并将版本依赖性硬编码到当前版本(就像你一样) “为第一个例子做了什么?”?