maven版本发布候选和快照
问题描述:
我的目标是发布一个具有单一依赖项目。我有一个nexus存储库,我部署了快照和发布版本。maven版本发布候选和快照
的一个依赖我有
group:artifact:1.1.0-SNAPSHOT
和以下发行的候选人是在我的Nexus回购释放
group:artifact:1.1.0-RC1
问到版本插件来解决依赖性时,它声称没有新的依赖关系是可用的。因此,他认为,
1.1.0-SNAPSHOT > 1.1.0-RC1
然而,如果在我的项目,我有版本1.0.0-快照版本1.1.0-RC1解析为最新版本。
我错过了什么? (我看着插件来源,我们有下面的代码片段:?
String otherQualifier = otherVersion.getQualifier();
if (otherQualifier != null)
{
if ((qualifier.length() > otherQualifier.length())
&& qualifier.startsWith(otherQualifier))
{
// here, the longer one that otherwise match is considered older
result = -1;
}
else if ((qualifier.length() < otherQualifier.length())
&& otherQualifier.startsWith(qualifier))
{
// here, the longer one that otherwise match is considered older
result = 1;
}
else
{
result = qualifier.compareTo(otherQualifier);
}
}
这似乎是车对我的任何想法
答
Maven的版本号是由如下:
<major version>.<minor version>.<incremental version>-<qualifier>
如果所有的版本号都是相同的,限定符按字母顺序进行比较,“RC1”和“SNAPSHOT”的排序与“a”和“b”没有区别,结果“SNAPSHOT”被认为是更新的,因为它的字母顺序更大。作为参考的this page。
请注意a.b.c-RC1-SNAPSHOT
将被认为比a.b.c-RC1
更旧。
我不确定作为解决方案的建议 - 这就是Maven版本控制的工作原理。
答
规格只能与major.minor.increment-qualifier一起使用,并且与词法顺序进行比较,与beeing快照或其他方式无关。
我结束了分叉maven-versions-plugin并实现我自己的版本方案,认为发布候选版本的快照版本总是比发布候选版本本身更老。
这不是太难实现,我从
org/codehaus/mojo/versions/ordering/MavenVersionComparator
扩展和
org/codehaus/mojo/versions/ordering/VersionComparators.java
通过自己的类中声明和实现我自己的业务逻辑
提供的链接,帮助了很多,谢谢 – mirlitone 2013-03-27 13:12:15
这只是一半正确的,因为SNAPSHOT是一个特殊的限定符,在你描述的过程之外由maven处理。请参阅:https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN401 – 2017-05-09 16:11:05