问题描述
我正在开发一个托管Maven存储库的服务器,如果快照的格式不是特定格式,则会遇到Maven无法正确解决SNAPSHOT版本的问题。 在查找了版本规则之后,我知道限定词可以是任何字符串,因此我希望maven能够下载任何限定词的依赖项。 但是,这与我的经验不符。
存储库具有以下文件夹结构(假设一个Maven项目abc:abcd: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
如果我尝试解决abcd-SNAPSHOT,则效果很好。
我可以在Maven日志中看到它正在查找a/b/c/abcd/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错误?
1楼
通常,Maven版本可以是任何String(例如1.2.3-RELEASE
, 1-1456
或dontknow
)。
以-SNAPSHOT
结尾的版本具有特殊含义,它们可以针对最新的生成版本进行解析。
一个特定的SNAPSHOT(例如1.0-SNAPSHOT
)的不同版本通过您在问题中提到的时间戳来区分。
我不知道这种格式是否真的是“ Maven标准”,但我猜是这样,因为在所有常见的存储库管理器中都一样,并且您在不使用它时遇到了问题。
我强烈建议您不要使用不同类型的时间戳,即使您可以使用它也是如此,因为每个Maven插件都希望带有时间戳的SNAPSHOT版本具有定义和给定的格式(无论它是否“正式”)。
顺便说一句:我很想听听您为什么开发自己的Maven存储库。