我正在使用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}}在您的类路径中,不会改变您的任何内容。
那很糟糕。我们该如何解决?
答案 0 :(得分:1)
好吧,你不会在你的类路径中同时拥有3.7和3.6.2 - Maven将采用最高版本,因此你升级到3.7(这可能不是Eclipse Maven工件的用户想要的或者期望)。
鉴于(据我所知)Eclipse同时发布所有组件,你不能忽略bundle版本范围(来自第二个例子)并将版本依赖性硬编码到当前版本(就像你一样) “为第一个例子做了什么?”?