【发布时间】:2019-05-14 16:56:13
【问题描述】:
在父 POM 中,我启用了 Nexus 暂存(在分发管理中使用 Sonatype 存储库):
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
我一直使用这个父 POM 将项目部署到 Maven Central。
但是今天我有一个使用聚合 POM 的项目,我想将它和它的聚合项目除了其中两个部署到 Maven Central。因此,我将以下内容放在我不想部署的两个子项目聚合子 POM 中:
<properties>
<maven.deploy.skip>true</maven.deploy.skip>
</properties>
然后(仍然使用 SNAPSHOT 版本)我尝试部署到快照存储库作为测试:
mvn clean deploy
这是我得到的错误:
[ERROR] Failed to execute goal org.sonatype.plugins:nexus-staging-maven-plugin:1.6.8:deploy (injected-nexus-deploy)
on project foo-bar: Failed to deploy artifacts: Could not transfer artifact com.example:foo-bar:war.asc:0.1.0-…
from/to ossrh (https://oss.sonatype.org/content/repositories/snapshots): Access denied to:
https://oss.sonatype.org/content/repositories/snapshots/com/example/foo-bar/0.1.0-SNAPSHOT/foo-bar-0.1.0-….war.asc -> [Help 1]
我不明白“拒绝访问”部分。但更大的问题是,为什么 Nexus 试图部署我将 maven.deploy.skip 设置为 false 的 foo-bar 项目?
更新:这里似乎有几个相互关联的问题。
首先,“拒绝访问”部分是我的错:我忽略了与 Sonatype 协调以添加一个新的组 ID,该组 ID 有权发布到该项目的 Maven Central。
然而,之后,即使没有“拒绝访问”,Maven 仍然会部署所有项目,即使是 maven.deploy.skip 到 false 的项目。有人提到maven.deploy.skip 是针对maven-deploy-plugin 而不是nexus-staging-maven-plugin。好的,那么,剩下两个问题:
- 我有另一个项目,其中我将 聚合 POM 的
maven.deploy.skip设置为false,然后将聚合子 POM 设置回true。 Maven 仅正确部署了聚合的子 POM,并且没有将聚合的父 POM 部署到 Maven Central。那么,如果在聚合父 POM 上禁用maven.deploy.skip似乎对nexus-staging-maven-plugin也有效,但对聚合子 POM 无效? - 好的,那么如果
maven.deploy.skip不是答案,我该如何做我通过修改聚合子POM 禁用聚合子POM 到Maven Central 的部署? (我知道我可以从聚合 POM 的模块列表中删除子 POM,但这会导致部署不同的聚合父 POM。)
【问题讨论】:
-
您是否检查了 .m2 文件夹中的 settings.xml 文件?应该有一些用户名和密码。
-
@Calixto,这与问题有什么关系?您能解释一下
setting.xml文件中是否存在用户名/密码对所描述的情况有何影响? -
如果我理解正确,插件正试图从/到 ossrh“传输工件”。也许你需要一些许可才能做到这一点。如果不是,请告诉我,我可以删除我的评论。只是想帮忙。
-
但是@Calixto,如果我告诉它跳过该 POM 的部署,为什么它甚至会尝试部署该工件? (你仔细阅读了这个问题吗?)
-
重点是标志
maven.deploy.skip用于maven-deploy-plugin而不是用于nexus-staging-maven-plugin....