我正在开发一个托管Maven存储库的服务器,如果快照不是特定格式,则Maven会错误地解决SNAPSHOT版本的问题。在查找了版本规则之后,我知道限定词可以是任何字符串,因此我希望maven能够下载任何限定词的依赖项。但是,这与我的经验不符。
存储库具有以下文件夹结构(假设Maven项目a.b.c:a.b.c.d:1.0.0-SNAPSHOT
):
<repo-root>
|-a
|-b
|-c
|-a.b.c.d
|-maven-metadata.xml
|-1.0.0-SNAPSHOT
|-a.b.c.d-1.0.0-20190213.120000-1.jar
|-maven-metadata.xml
如果我尝试解决a.b.c.d-SNAPSHOT,则效果很好。我可以在Maven日志中看到它查找a/b/c/a.b.c.d/1.0.0-SNAPSHOT/maven-metadata.xml
,然后下载正确的JAR文件。到目前为止一切顺利。
但是,如果我将限定符更改为其他名称(例如在末尾删除-1),则maven无法解析该文件!而不是寻找
<repo-root>/a/b/c/a.b.c.d/1.0.0-SNAPSHOT/<jar-file>
(这是正确的),它看起来是
<repo-root>/a/b/c/a.b.c.d/1.0.0-20190213.120000/<jar-file>
这显然是错误的。每种不符合格式的限定符都会发生这种情况
\d\.\d\.\d-\d{8}.\d{6}-\d+
为什么Maven无法解析此类限定词?是在某处指定了格式还是仅仅是Maven错误?
答案 0 :(得分:2)
通常,Maven版本可以是任何String(例如1.2.3-RELEASE
,1-1456
或dontknow
)。以-SNAPSHOT
结尾的版本具有特殊含义,它们可以针对最新的构建版本进行解析。
一个特定的SNAPSHOT(例如1.0-SNAPSHOT
)的不同版本通过您在问题中提到的时间戳来区分。我不知道这种格式是否真的是“ Maven标准”,但我猜是这样,因为在所有常见的存储库管理器中都一样,并且您在不使用它时遇到了问题。我强烈建议您不要使用不同类型的时间戳,即使您可以使用它也是如此,因为每个Maven插件都希望带有时间戳的SNAPSHOT版本具有已定义的既定格式(无论是否“正式”)。
顺便说一句:我很想听听您为什么开发自己的Maven存储库。