Maven 哪个插件版本在1.17.0之后

Maven 哪个插件版本在1.17.0之后,maven,eclipse-plugin,tycho,osgi-bundle,Maven,Eclipse Plugin,Tycho,Osgi Bundle,这可能是一个有点奇怪的问题,所以请容忍我 我有一个Tycho/Eclipse插件,它只包含一个包含第三方库的lib文件夹。该库的版本为1.17.0,因此为了使流程更加透明,插件也提供了 它导出lib的所有包,一切正常。至少是这样,因为现在我意识到,如果我用一个版本导出包,情况会好得多。Plug-in 1.17.0已经发布(我知道,Tycho通常不会发布,只是假设我不想重复使用已经稳定了一年的版本) 作为一个例子,我不允许使用版本1.17.0.1或1.17.0B或其他东西,但我不能只使用版本1.1

这可能是一个有点奇怪的问题,所以请容忍我

我有一个Tycho/Eclipse插件,它只包含一个包含第三方库的lib文件夹。该库的版本为1.17.0,因此为了使流程更加透明,插件也提供了

它导出lib的所有包,一切正常。至少是这样,因为现在我意识到,如果我用一个版本导出包,情况会好得多。Plug-in 1.17.0已经发布(我知道,Tycho通常不会发布,只是假设我不想重复使用已经稳定了一年的版本)

作为一个例子,我不允许使用版本1.17.0.1或1.17.0B或其他东西,但我不能只使用版本1.17.1,因为这意味着第三方库也是1.17.1,而事实并非如此。目前无法更新第三方库,因为时间很关键

我刚才试过1.17.01,没有人抱怨,但我不确定Maven和OSGI如何将这个版本与1.17.0和1.17.1进行比较,但我想这会迫使字符串比较,导致版本排序完全混乱


所以。。。我可以安全地使用什么版本

我不确定Tycho的情况,但OSGI框架将版本的前三部分视为数字,并使用
Integer.parseInt
(请参见
org.OSGI.framework.version
)将其转换为
int


因此,“01”将被视为与“1”完全相同。

您可以使用类似“1.17.0.p1”的东西,它表示“补丁1”-它应该与
OSGi
一致,因为“限定符可以是任何字符串,按字典顺序排序”(引用自您的OSGi链接)。“p1”类似于“beta1”或“RC1”或

大调、小调、微调限定词

这也适用于
Maven
。此外,我们可以假设您不会提供一系列超过十个补丁(至少我假设)


就我个人而言,我会避免前导零,因为这在我看来很奇怪。一系列修补程序或修补程序版本应导致偶尔增加更高的版本号

对于新的bundle版本,您需要确保它在OSGi语义方面更大—Maven语义在这里并不重要。因此,您需要增加前三段中的一段的数值(例如,
1.17.1
),或者添加第四段。第四段,即所谓的限定符,是一个字符串,OSGi认为有限定符的版本比没有限定符的版本大。例如,您可以使用
1.17.0.a


对于您希望在新捆绑包版本中引入的更改,有一个警告,即向导出的包中添加版本。导出带有版本的包绝对有意义,但为包选择正确的版本至关重要

经验表明,使用库版本作为包版本是一个坏主意:当我们为javax.mail 1.4.1构建OSGi包装时,我们还为导出的包使用了版本1.4.1。但是当Sun在1.4.2版中将javax.mail作为OSGi包发布时,他们决定这些包满足1.4API合同,因此将它们导出为1.4版。因此,我们的旧版本的库假装其导出的包更好,因此OSGi解决方案更喜欢它而不是新的库版本

更糟糕的是,与此同时,我们还有许多其他捆绑包需要javax.mail包,最低版本为1.4.1,因此他们甚至不能被迫使用较新的库版本。最后,我们花了一年多的时间来清理OSGi包装中糟糕的软件包版本选择所带来的混乱


结论:将您不拥有的库转换为OSGi捆绑包时,仅使用非常小的软件包版本号。当使用包版本号为零作为主要版本时,例如0.1.17,您应该谨慎,您自己发明的版本比所有未来的“官方”版本都要小。

不,这对Maven不起作用,因为在尝试发布时,我得到:“反应堆项目列表中没有快照项目。”Maven需要以“-SNAPSHOT”结尾的版本。但是像Spring或Hibernate这样的项目如何以“.GA”或“.Final”的名称发布它们的工件呢?他们一定是通过Maven实现这一目标的一种方式。是的,但这就像是一个公司范围内的环境,如果我不得不为了一些无关紧要的事情而改变它,我会感觉非常糟糕。此外,我们的环境(Maven、Jenkins、Nexus,不知道具体是谁)没有区分
1.17.0.timestamp
1.17.0.secondTry
,因为它通常不必这样做。这并不是很糟糕,它们是相同的(除了版本化的软件包)。这很糟糕,因为如果将这两个版本放入p2存储库,您将无法区分它们。我看不到任何方法可以导出具有版本的包,因为任何自尊心的捆绑包都会导入具有版本的包。由于每个默认包都以版本“0.0.0”导出,因此其他任何东西都无法导入它们。