为什么Nexus登台忽略Maven部署标记?

时间:2019-05-14 16:56:13

标签: java maven nexus

在父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仍将部署所有项目,甚至是将falsemaven.deploy.skip的项目。有人提到false用于maven.deploy.skip,而不是maven-deploy-plugin。好,那么,剩下两个问题了:

  • 我还有另一个项目,其中我为 aggregate POM设置了nexus-staging-maven-pluginmaven.deploy.skip,然后为聚合的子pom将其设置回false 。 Maven仅正确地部署了聚合的子POM,而没有 not 将聚合的父POM部署到Maven Central。那么,为什么在聚合父POM上禁用了truemaven.deploy.skip似乎也起作用,而对于聚合子POM却禁用了nexus-staging-maven-plugin
  • 然后,如果不是maven.deploy.skip,那么我如何通过修改聚合子POM禁用对聚合子POM的部署到Maven Central? (我知道我可以从聚合POM的模块列表中删除子POM,但这将导致部署另一个聚合的父POM。)

1 个答案:

答案 0 :(得分:0)

  

但是更大的问题是,为什么Nexus试图部署我将maven.deploy.skip设置为false的foo-bar项目?

由于您是说不想跳过,documentation表示默认情况下该值为false,因此将其设置为该值不会更改默认行为。