Rob*_*ley 7 java scala artifact maven maven-release-plugin
给定您能够解析的任意已发布工件的 Maven 坐标(组、工件、版本)(该工件可能已发送至 Maven Central,也可能未发送至 Maven Central - 可能已发布至另一个工件存储库、公共或私人),确定该工件的发布日期的最佳方法是什么?
Scala Steward是一个机器人,可以帮助保持项目库依赖项最新,自动打开 PR 来更新依赖项。但是,某些依赖项(例如 AWS Java SDK)更新过于频繁,导致 PR 数量过多。为了让 Scala Steward处理这个问题,Scala Steward 了解其正在考虑更新的工件的发布日期将很有帮助。
timestamp
字段(请参见https://search.maven.org/solrsearch/select?q=g:software.amazon.awssdk%20AND%20a:s3%20AND %20v:2.17.71&rows=20&wt=json),这很棒,但不幸的是仅对已发布到 Maven Central 的工件有用。<lastUpdated>
字段(例如https://repo1.maven.org/maven2/software/amazon/awssdk/s3/maven-metadata.xml),但这并不特定于工件版本- 它只与该工件的最新发布版本相关,如果您想了解旧版本则没有什么好处。这是创建该文件的代码。maven-metadata.xml
<lastUpdated>
字段,我认为它只是文件中该字段的数据maven-metadata.xml
?2021-10-29 20:53
在第二列中2020-02-09T14:36:26.000Z
在第一列中给出一些资源:
另请参阅使用 Aether Eclipse 检索工件发布日期,该问题仅针对 Aether Eclipse 库(现在称为Maven Artifact Resolver)提出了这个问题,而我很想知道是否有任何东西可以可靠地获取此信息。
感谢这个问题——这基本上是一个答案,并对选项进行了彻底的讨论。我已经成功地使用了第三个选项的变体,即访问原始目录列表。除了文件级时间戳信息之外,还可能有last-modified
标头。(例如,对于 Maven Central 来说,这肯定是存在的。)它是一个字符串,所以我认为格式没有保证,但它应该可以用大多数现代日期时间库进行解析。
例如,给定maven中心url https://search.maven.org/artifact/io.quarkiverse.renarde/quarkus-renarde/3.0.0/jar,右侧有一个“浏览”链接,你到https://repo1.maven.org/maven2/io/quarkiverse/renarde/quarkus-renarde/3.0.0/。在该端点上进行HEAD
调用会为您提供标头(或者您可以只进行正常GET
调用,然后查看标头)。
从 Maven API 的 json 中返回的时间戳和标头中的时间戳相差几个小时,但通常对于版本,我们不关心确切的时间。
在 javascript 中(仅作为示例),给定一个具有 Maven gav 信息的对象,该逻辑将如下所示:
const url = `https://repo1.maven.org/maven2/${coordinates.groupId?.replace(/\./g, "/")}/${coordinates.artifactId}/${coordinates.version}/`
const listingHeaders = await axios.head(mavenArtifactsUrl)
const lastModified = listingHeaders.headers["last-modified"]
return Date.parse(lastModified)
Run Code Online (Sandbox Code Playgroud)