如何获取通过Maven Deploy Plugin发布到Nexus的快照版本时间戳
1 Maven命令方案(无需下载构件)
使用3.3.0及以上版本的Maven Dependency Plugin的dependency:properties目标,可直接解析快照版本的元数据,将带时间戳的完整版本号输出为Maven属性,全程不会下载构件包:
mvn org.apache.maven.plugins:maven-dependency-plugin:3.6.0:properties \ -Dartifact=你的groupId:你的artifactId:1.2.3-SNAPSHOT:jar \ -DrepoUrl=你的Nexus快照仓库地址
执行完成后,控制台会输出类似[INFO] Set property '你的groupId:你的artifactId:jar:version' = '1.2.3-20210829.151247-23'的内容,直接提取该属性值即可拿到时间戳后缀。
如果你是在当前构件的构建流程中刚执行完deploy操作,也可以直接从deploy插件的执行日志中提取上传的构件文件名,里面自带完整时间戳,无需额外执行命令。
2 Nexus REST API方案
Nexus 3.x
调用资产搜索接口,仅拉取元数据信息:
GET /service/rest/v1/search/assets?repository=你的快照仓库名&group=你的groupId&name=你的artifactId&version=1.2.3-SNAPSHOT
返回结果的items[].maven2.version字段即为带时间戳的完整版本号,items[].maven2.snapshotTimestamp字段可直接获取时间戳部分。
Nexus 2.x
调用元数据解析接口:
GET /service/local/artifact/maven/resolve?g=你的groupId&a=你的artifactId&v=1.2.3-SNAPSHOT&r=你的快照仓库名&e=jar
返回结果的data.version字段即为带时间戳的完整版本号。
3 程序化实现方案
直接请求对应快照版本目录下的maven-metadata.xml文件,该文件体积仅几KB,无需下载构件:
请求地址格式:
${Nexus根地址}/repository/${快照仓库名}/${groupId替换.为/}/${artifactId}/1.2.3-SNAPSHOT/maven-metadata.xml
文件中<snapshot>标签下的<timestamp>和<buildNumber>字段拼接后即为你需要的YYYYMMDD.HHMMSS-NNN格式时间戳,示例内容如下:
<snapshot> <timestamp>20210829.151247</timestamp> <buildNumber>23</buildNumber> </snapshot>
你可以根据技术栈选择对应的工具解析该XML即可,比如Shell环境可使用curl + xmllint、Python环境使用requests + lxml、Java环境使用DOM4J等。
内容的提问来源于stack exchange,提问作者Peter Sivák

