当前位置: 代码迷 >> java >> Maven如何从存储库解析SNAPSHOT版本
  详细解决方案

Maven如何从存储库解析SNAPSHOT版本

热度:43   发布时间:2023-07-31 11:15:47.0

我正在开发一个托管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错误?

通常,Maven版本可以是任何String(例如1.2.3-RELEASE1-1456dontknow )。 -SNAPSHOT结尾的版本具有特殊含义,它们可以针对最新的生成版本进行解析。

一个特定的SNAPSHOT(例如1.0-SNAPSHOT )的不同版本通过您在问题中提到的时间戳来区分。 我不知道这种格式是否真的是“ Maven标准”,但我猜是这样,因为在所有常见的存储库管理器中都一样,并且您在不使用它时遇到了问题。 我强烈建议您不要使用不同类型的时间戳,即使您可以使用它也是如此,因为每个Maven插件都希望带有时间戳的SNAPSHOT版本具有定义和给定的格式(无论它是否“正式”)。

顺便说一句:我很想听听您为什么开发自己的Maven存储库。