在所有上传工件后,maven 是不是总是部署 maven-metadata.xml 文件
Posted
技术标签:
【中文标题】在所有上传工件后,maven 是不是总是部署 maven-metadata.xml 文件【英文标题】: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个文件?
【问题讨论】:
【参考方案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
级别,(例如,如果您的groupId
是org.foo.examples
并且您的artifactId
是hello-world
,则路径将为org/foo/examples/hello-world/maven-metadata.xml
)。这用于管理基本版本或发布版本。
版本级别:这在groupId
/artifactId
/version
级别,(例如,如果您的groupId
是org.foo.examples
并且您的artifactId
是hello-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 次。您的想法? 如果您的项目产生了几个子工件,例如javadocs
、sources
等,这些都会被添加到maven-metadata.xml
文件中。 maven-metadata.xml
文件还包括您的 pom
的 GAV(groupId
、artifactId
、version
)坐标信息,因为这也被视为子工件。因此,对于任何产生jar
(并且没有其他子工件)的项目,您的maven-metadata.xml
文件还将包含您的pom.xml
的详细信息。当然,如果您使用的是maven-deploy-plugin
(这是默认行为),这就是全部。
我同意。我唯一担心的是包/工件级别的 maven-metata.xml 不是我在上面评论中建议的最后一个要更新的文件。你同意吗?
尝试部署一个工件并粘贴整个输出。我的顺序总是一样的。
只是好奇。想知道 Maven 如何同时处理存储库中相同包版本的并发更新。像 2 dev 尝试同时在存储库中推送相同版本的包。这里没有事务。以上是关于在所有上传工件后,maven 是不是总是部署 maven-metadata.xml 文件的主要内容,如果未能解决你的问题,请参考以下文章