【问题标题】:Why is Nexus staging ignoring the Maven deploy flag?为什么 Nexus 登台忽略 Maven 部署标志?
【发布时间】: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 设置为 falsefoo-bar 项目?

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

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

然而,之后,即使没有“拒绝访问”,Maven 仍然会部署所有项目,即使是 maven.deploy.skipfalse 的项目。有人提到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....

标签: java maven nexus


【解决方案1】:

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

因为您说您不想跳过,documentation 表示默认值为false,因此将其设置为不会改变默认行为的任何内容。

【讨论】:

  • 抱歉,打错了。实际的 POM 显示 true。我将编辑问题。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多