【问题标题】:Does maven alway deploys maven-metadata.xml file after all uploading artifacts在所有上传工件后,maven 是否总是部署 maven-metadata.xml 文件
【发布时间】:2017-10-11 00:57:38
【问题描述】:

maven 部署工件有什么顺序吗?据我所知,我可以说它上传了所有工件,最后它更新了 maven-medata.xml 文件

http://localhost:8000/mavenrepository/test1/com/mypackage/mavenproject1/1.0-SNAPSHOT/maven-metadata.xml http://localhost:8000/mavenrepository/test1/com/mypackage/mavenproject1/maven-metadata.xml

现在是否保证maven在上传其他工件后总是最后上传这2个文件?

【问题讨论】:

    标签: java maven maven-metadata


    【解决方案1】:

    Maven 总是以相同的顺序部署工件文件。它通常看起来像这样:

    [INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ hello-world ---
    Downloading: http://localhost:48080/storages/storage0/snapshots/org/foo/examples/hello-world/1.0-SNAPSHOT/maven-metadata.xml
    Uploading: http://localhost:48080/storages/storage0/snapshots/org/foo/examples/hello-world/1.0-SNAPSHOT/hello-world-1.0-20160430.031713-1.jar
    Uploaded: http://localhost:48080/storages/storage0/snapshots/org/foo/examples/hello-world/1.0-SNAPSHOT/hello-world-1.0-20160430.031713-1.jar (3 KB at 11.5 KB/sec)
    Uploading: http://localhost:48080/storages/storage0/snapshots/org/foo/examples/hello-world/1.0-SNAPSHOT/hello-world-1.0-20160430.031713-1.pom
    Uploaded: http://localhost:48080/storages/storage0/snapshots/org/foo/examples/hello-world/1.0-SNAPSHOT/hello-world-1.0-20160430.031713-1.pom (2 KB at 41.6 KB/sec)
    Downloading: http://localhost:48080/storages/storage0/snapshots/org/foo/examples/hello-world/maven-metadata.xml
    Uploading: http://localhost:48080/storages/storage0/snapshots/org/foo/examples/hello-world/1.0-SNAPSHOT/maven-metadata.xml
    Uploaded: http://localhost:48080/storages/storage0/snapshots/org/foo/examples/hello-world/1.0-SNAPSHOT/maven-metadata.xml (798 B at 21.1 KB/sec)
    Uploading: http://localhost:48080/storages/storage0/snapshots/org/foo/examples/hello-world/maven-metadata.xml
    Uploaded: http://localhost:48080/storages/storage0/snapshots/org/foo/examples/hello-world/maven-metadata.xml (312 B at 8.7 KB/sec)
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    

    如您所见,它所做的第一件事是尝试在工件级别解析maven-metadata.xml 文件,以确定该工件是否有其他版本以及是否生成全新的maven-metadata.xml 文件,或使用它正在部署的新版本更新现有版本(如果有的话)。 maven-metadata.xml 文件始终在部署结束时生成或更新。

    maven-metadata.xml 文件可以位于三个级别:

    • 工件级别:这是在groupId/artifactId 级别,(例如,如果您的groupIdorg.foo.examples 并且您的artifactIdhello-world,则路径将为org/foo/examples/hello-world/maven-metadata.xml)。这用于管理基本版本或发布版本。
    • 版本级别:这在groupId/artifactId/version 级别,(例如,如果您的groupIdorg.foo.examples 并且您的artifactIdhello-world 并且版本是1.0-SNAPSHOT ,路径将是org/foo/examples/hello-world/1.0-SNAPSHOT/maven-metadata.xml)。这用于管理带时间戳的快照。
    • 插件组级别:在插件的groupId级别,用于管理同一插件组下的不同插件。

    有关 Maven 元数据如何工作的详细说明,请查看我整理的 this article

    【讨论】:

    • 注意到与您提到的相同的事情。但我也观察到一件奇怪的事情。在部署源和java文档以及jar.maven-metadata.xml文件时会更新多次。一次用于pom.xml和jar.xml,然后在上传source-jar后一次,然后再次更新 java 文档时。但是包级别/工件级别的 maven-metadata.xml 仅在 jar pom 和版本级别 maven-metadata.xml 更新后更新一次。在这种情况下,版本级别 maven-metadata.xml 在 packagelevel maven-metadata.xml 更新后更新了 2 次。您的想法?
    • 如果您的项目产生了几个子工件,例如javadocssources等,这些都会被添加到maven-metadata.xml文件中。 maven-metadata.xml 文件还包括您的 pom 的 GAV(groupIdartifactIdversion)坐标信息,因为这也被视为子工件。因此,对于任何产生jar(并且没有其他子工件)的项目,您的maven-metadata.xml 文件还将包含您的pom.xml 的详细信息。当然,如果您使用的是maven-deploy-plugin(这是默认行为),这就是全部。
    • 我同意。我唯一担心的是包/工件级别的 maven-metata.xml 不是我在上面评论中建议的最后一个要更新的文件。你同意吗?
    • 尝试部署一个工件并粘贴整个输出。我的顺序总是一样的。
    • 只是好奇。想知道 Maven 如何同时处理存储库中相同包版本的并发更新。像 2 dev 尝试同时在存储库中推送相同版本的包。这里没有事务。
    猜你喜欢
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2019-09-19
    相关资源
    最近更新 更多