在父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为什么要尝试部署我将foo-bar
设置为maven.deploy.skip
的{{1}}项目?
更新:这里似乎存在几个相互关联的问题。
首先,“访问被拒绝”部分是我的错:我忽略了与Sonatype协作来添加一个新的组ID,该组ID有权发布到该项目的Maven Central。
但是,即使之后没有“拒绝访问”,Maven仍将部署所有项目,甚至是将false
到maven.deploy.skip
的项目。有人提到false
用于maven.deploy.skip
,而不是maven-deploy-plugin
。好,那么,剩下两个问题了:
nexus-staging-maven-plugin
到maven.deploy.skip
,然后为聚合的子pom将其设置回false
。 Maven仅正确地部署了聚合的子POM,而没有 not 将聚合的父POM部署到Maven Central。那么,为什么在聚合父POM上禁用了true
,maven.deploy.skip
似乎也起作用,而对于聚合子POM却禁用了nexus-staging-maven-plugin
?maven.deploy.skip
,那么我如何通过修改聚合子POM禁用对聚合子POM的部署到Maven Central? (我知道我可以从聚合POM的模块列表中删除子POM,但这将导致部署另一个聚合的父POM。)答案 0 :(得分:0)
但是更大的问题是,为什么Nexus试图部署我将maven.deploy.skip设置为false的foo-bar项目?
由于您是说不想跳过,documentation表示默认情况下该值为false
,因此将其设置为该值不会更改默认行为。