5

根据手册,使用 Maven 3,我们被迫使用uniqueSnapshots=true. 这意味着每个部署1.0-SNAPSHOT实际上都由一些唯一的、规范的 ID 支持,例如1.0-20080207-230803-1.

因此,调用会产生在调用可执行文件mvn deploy之前无法确定其规范版本的工件。mvn

因此,如果希望对之后生成的唯一 ID 调用任何操作,则必须在完成后尝试从 maven 可执行文件中提取生成的 ID mvn deploy

有没有这样的机制来获取唯一ID?

例如,mvn deploy将产生以下输出:

Uploading: https://oss.sonatype.org/content/repositories/snapshots/io/airlift/slice/0.11-SNAPSHOT/slice-0.11-20150220.165404-2.jar

但似乎没有办法在0.11-20150220.165404-2不解析 Maven 的输出的情况下访问 ID。

示例场景: mvn build 导致一个新的(唯一的)工件被推送到内部存储库管理器。完成后,我们希望通过 HTTP 推送通知,以通知某个远程应用程序有新的 SNAPSHOT 版本的应用程序。

尽管我们的存储库管理器允许我们查询最新的 SNAPSHOT 版本,但这能够传递对特定版本的绝对引用不同。

4

1 回答 1

3

maven-deploy-plugin 不会将部署时间戳存储在系统属性中。

如果您想查看源代码(并可能提出增强请求),此部署时间戳是通过项目org.apache.maven.artifact.transform.SnapshotTransformation的方法在类中计算的。getDeploymentTimestampmaven-artifact-manager

已部署工件的最终版本在方法中计算construcVersionSNAPSHOT替换为timestamp-buildNumber,其中timestamp是 的结果getDeploymentTimestampbuildNumber是增量。

应该可以用System.setProperty("something", version);存储这个构造的版本。然后在pom.xmlwith中访问它${something}

于 2015-02-21T14:27:25.703 回答