首页 > 解决方案 > 为什么 Nexus 登台忽略 Maven 部署标志?

问题描述

在父 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 中心,但其中两个项目除外。因此,我将以下内容放在我不想部署的两个子项目聚合子 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.skipfalse

更新:这里似乎有几个相互关联的问题。

首先,“访问被拒绝”部分是我的错:我忽略了与 Sonatype 协调以添加一个新的组 ID,该组 ID 有权发布到该项目的 Maven Central。

然而,之后,即使没有“拒绝访问”,Maven 仍然会部署所有项目,即使是带有maven.deploy.skipto的项目false。有人提到这maven.deploy.skip是针对maven-deploy-plugin而不是nexus-staging-maven-plugin. 好的,那么,剩下两个问题:

标签: javamavennexus

解决方案


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

因为您说您不想跳过,所以文档说该值是false默认值,因此将其设置为该值不会改变默认行为的任何内容。


推荐阅读