我维护一个开源项目,并将其发布到中央仓库。我刚出版了oshi-core-2.6。在我的pom.xml中,该版本的版本如下:
<groupId>com.github.dblock</groupId>
<artifactId>oshi-core</artifactId>
<version>2.6</version>由于日期/时间函数,我的代码需要Java 8。为了支持用户的请求,就在这个版本发布之前,我在它的pom.xml中发布了一个与Java7兼容的版本,它使用了三个backport
<groupId>com.github.dblock</groupId>
<artifactId>oshi-core</artifactId>
<version>2.6-m-java7</version>版本号在Maven中的工作方式指出,“所有带有限定符的版本都比没有限定符的相同版本(发布版本)更早。”另一个StackOverflow问题,maven如何对版本号进行排序?,引用了ComparableVersion类的答案,该类列出了几个著名的限定符(alpha、beta、里程碑、rc和快照),这些限定符应该比ga/final (空字符串)版本“早”排序。
由于在早期版本中有一个自定义限定符,我尝试使用java7版本中的里程碑限定符(Java7)向Maven指出,它应该是一个比2.6更早的版本。然而,搜寻中央仓库显示-m-版本是“最新版本”。
我有以下问题:
发布于 2016-06-17 07:22:19
这是一个分类器的工作,而不是那种奇怪的版本。
此外,Oracle引用的文档对于Maven 2有效,但对Maven 3无效。
除此之外,我建议在符号学的基础上增加这类无法对抗的更改的主要版本。
此外,您使用alpha引用ComparableVersion,等等,这就是Maven内部处理版本的方式。这可以查看那类的单元测试。
但是,您可以通过一个小命令行工具检查Maven的行为:
java -jar apache-maven-3.3.9\lib\maven-artifact-3.3.9.jar 1.0.0 2.0.0
Display parameters as parsed by Maven (in canonical form) and comparison result:
1. 1.0.0 == 1
1.0.0 < 2.0.0
2. 2.0.0 == 2通过使用它,您可以看到Maven 3+处理的2.6-m-java7大于2.6。
java -jar apache-maven-3.3.9\lib\maven-artifact-3.3.9.jar 2.6-m-java7 2.6
Display parameters as parsed by Maven (in canonical form) and comparison result:
1. 2.6-m-java7 == 2.6-m-java-7
2.6-m-java7 > 2.6
2. 2.6 == 2.6所以这就是为什么中央也处理它更大的原因。
因此,如果您使用诸如rc或alpha之类的东西,您将看到结果:
java -jar apache-maven-3.3.9\lib\maven-artifact-3.3.9.jar 2.6-alpha 2.6
Display parameters as parsed by Maven (in canonical form) and comparison result:
1. 2.6-alpha == 2.6-alpha
2.6-alpha < 2.6
2. 2.6 == 2.6
java -jar apache-maven-3.3.9\lib\maven-artifact-3.3.9.jar 2.6-rc1 2.6
Display parameters as parsed by Maven (in canonical form) and comparison result:
1. 2.6-rc1 == 2.6-rc-1
2.6-rc1 < 2.6
2. 2.6 == 2.6(上面的CLI工具可以从Maven 3.2.5中获得)。
最好的解决方案是有一个模块来产生您通常的工件。创建一个包含JDK 7配置的补充模块,在那里您可以使用"threeten“并创建其他工件。这些工件应该有这样的分类器。
https://stackoverflow.com/questions/37871662
复制相似问题