部署到 nexus 时未更新 maven-metadata.xml
Posted
技术标签:
【中文标题】部署到 nexus 时未更新 maven-metadata.xml【英文标题】:maven-metadata.xml is not updated when deploying to nexus 【发布时间】:2011-06-20 05:05:29 【问题描述】:我正在使用 Apache Maven 3.0 Nexus 开源版,版本:1.8.0.1
这是我的 pom.xml 的一部分
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.5</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.1</version>
</plugin>
<distributionManagement>
<repository>
<id>nexus</id>
<name>nexus</name>
<url>http://myrepo/nexus/content/repositories/releases</url>
</repository>
</distributionManagement>
这是一个非常简单的项目。当我这样做时
mvn release:prepare
mvn release:perform
一切正常:
...
[INFO] [INFO] --- maven-deploy-plugin:2.5:deploy (default-deploy) @ simple ---
[INFO] Uploading: http://myrepo/nexus/content/repositories/releases/...pom
[INFO] 4 KB
[INFO] 5 KB
[INFO]
[INFO] Uploaded: http://myrepo/nexus/content/repositories/releases/....pom (5 KB at 1.0 KB/sec)
[INFO] Downloading: http://myrepo/nexus/content/repositories/releases/.../maven-metadata.xml
[INFO] 603 B
[INFO]
[INFO] Downloaded: http://myrepo/nexus/content/repositories/releases/.../maven-metadata.xml (603 B at 1.5 KB/sec)
[INFO] Uploading: http://myrepo/nexus/content/repositories/releases/.../maven-metadata.xml
[INFO] 634 B
[INFO]
[INFO] Uploaded: http://myrepo/nexus/content/repositories/.../maven-metadata.xml (634 B at 1.6 KB/sec)
现在我下载http://myrepo/nexus/content/repositories/.../maven-metadata.xml 它看起来像这样:
<metadata>
<groupId>simple</groupId>
<artifactId>simple</artifactId>
<versioning>
<latest>0.5.8</latest>
<release>0.5.8</release>
<versions>
<version>0.5.9</version>
<version>0.1</version>
<version>0.3</version>
<version>0.4</version>
<version>0.5.1</version>
<version>0.5.2</version>
<version>0.5.3</version>
<version>0.5.4</version>
<version>0.5.5</version>
<version>0.5.6</version>
<version>0.5.7</version>
<version>0.5.8</version>
</versions>
<lastUpdated>20110202190804</lastUpdated>
</versioning>
</metadata>
我的最新和刚刚发布的版本没有标记为“最新”和“发布”。
现在我在 Nexus WebUI 中执行“重建元数据”。在此之后我再次下载元数据。现在看起来是这样的
<metadata>
<groupId>simple</groupId>
<artifactId>simple</artifactId>
<versioning>
<latest>0.5.9</latest>
<release>0.5.9</release>
<versions>
<version>0.1</version>
<version>0.3</version>
<version>0.4</version>
<version>0.5.1</version>
<version>0.5.2</version>
<version>0.5.3</version>
<version>0.5.4</version>
<version>0.5.5</version>
<version>0.5.6</version>
<version>0.5.7</version>
<version>0.5.8</version>
<version>0.5.9</version>
</versions>
<lastUpdated>20110202191117</lastUpdated>
</versioning>
</metadata>
这看起来像是 nexus 或 maven 中的错误?有人对此有解决方案吗?
【问题讨论】:
我建议在 Maven 邮件列表中讨论。 *** 非常适合此类问题。 fpr *** 的主要原因是没有订阅 101+ 邮件列表。 是的.. 看起来确实像一个错误。您是否检查过问题跟踪器中是否有关于此的? 我偶然发现了同样的问题。你找到解决办法了吗? 你从 maven 的家伙那里听说过什么吗?这是错误还是功能? 【参考方案1】:您是否尝试在部署插件配置中将 updateReleaseInfo
设置为 true?
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.5</version>
<configuration>
<updateReleaseInfo>true</updateReleaseInfo>
</configuration>
</plugin>
注意,我没有尝试过,只是在我阅读此问题时碰巧打开了部署插件文档,这似乎是合理的。
来自Maven docs:
updateReleaseInfo:
Parameter used to update the metadata to make the artifact as release.
Type: boolean
Required: No
Expression: $updateReleaseInfo
Default: false
【讨论】:
我试过这个,但不认为这是一个解决方案。实际上,这只会强制将maven-metadata.xml
中的<RELEASE>
设置为您正在上传的任何版本,即使ti 以-SNAPSHOT 结尾。它根本不会更新 LATEST。
@Xan,我相信您只会在实际进行发布时才想使用该配置,而不是用于快照部署。有两种方法可以做到这一点;要么包括您为发布激活的<profile>
中显示的配置(例如mvn -Prelease release:perform
,其中-Prelease
激活ID 为“发布”的配置文件。或者,您可以完全跳过部署配置并使用mvn -DupdateReleaseInfo=true release:perform
执行一样。
我相信没有人在这里谈论执行发布,问题是为什么元数据没有更新?!?我必须每 30 秒在 Nexus 上运行一次作业以刷新它,否则我永远无法获得最新的工件。事实上,我在 Hudson 上实施了一项持续集成工作,以部署最新成功构建的工件。问题是元数据没有正确设置 LATEST 标签。
@Xan 我有一个类似的问题,但我认为问题更多在于 Nexus API 错误地解析了 v=LATEST。 FWIW,请参阅我的帖子here。暂时没有答案...
@Nikita 我注意到运行任务以重建 maven 元数据,最新标签已更新。在您的情况下,它将成为 11-SNAPSHOT。在那之后,我打赌 Nexus API 会以你期望的方式响应。 (顺便问一下,FWIW 是什么意思?)以上是关于部署到 nexus 时未更新 maven-metadata.xml的主要内容,如果未能解决你的问题,请参考以下文章
CSS 文件在部署时未更新(Google AppEngine)