Maven 发布插件失败:源工件被部署两次

2022-08-31 13:38:44

我们正在 hudson 上使用 maven 发布插件,并尝试自动执行发布过程。发布:准备工作正常。当我们尝试执行 release:perform 时,它失败了,因为它尝试将源工件上传到存储库两次。

我尝试过的事情,

  1. 从超级pom中删除包含maven源插件的配置文件(不起作用)
  2. 将 hudson 上要发布的目标指定为 -P!attach-source release:prepare release:perform。我认为这将排除源插件的执行。(不起作用)。
  3. 尝试将插件阶段指定为超级pom中某个不存在的阶段。(不起作用)
  4. 已尝试指定插件配置,将配置文件设置为 false。( 你猜怎么着??也不起作用)

它仍然吐出这个错误。

[INFO] [DEBUG] Using Wagon implementation lightweight from default mapping for protocol http
[INFO] [DEBUG] Using Wagon implementation lightweight from default mapping for protocol http
[INFO] [DEBUG] Checking for pre-existing User-Agent configuration.
[INFO] [DEBUG] Adding User-Agent configuration.
[INFO] [DEBUG] not adding permissions to wagon connection
[INFO] Uploading: http://xx.xx.xx.xx:8081/nexus/content/repositories/releases//com/yyy/xxx/hhh/hhh-hhh/1.9.40/hhh-hhh-1.9.40-sources.jar
[INFO] 57K uploaded  (xxx-xxx-1.9.40-sources.jar)
[INFO] [DEBUG] Using Wagon implementation lightweight from default mapping for protocol http
[INFO] [DEBUG] Using Wagon implementation lightweight from default mapping for protocol http
[INFO] [DEBUG] Checking for pre-existing User-Agent configuration.
[INFO] [DEBUG] Adding User-Agent configuration.
[INFO] [DEBUG] not adding permissions to wagon connection
[INFO] Uploading: http://xx.xxx.xx.xx:8081/nexus/content/repositories/releases//com/xxx/xxxx/xxx/xxx-xxx/1.9.40/xxx-xxx-1.9.40-sources.jar
[INFO] [DEBUG] Using Wagon implementation lightweight from default mapping for protocol http
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [ERROR] BUILD ERROR
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Error deploying artifact: Authorization failed: Access denied to: http://xx.xxx.xx.xx:8081/nexus/content/repositories/releases/com/xxx/xxx/xxx/xxx-config/1.9.40/xxx-xxx-1.9.40-sources.jar

任何有关这方面的帮助将不胜感激。


答案 1

尝试运行 。您会发现您有两个执行部分mvn -Prelease-profile help:effective-pommaven-source-plugin

输出将如下所示:

    <plugin>
      <artifactId>maven-source-plugin</artifactId>
      <version>2.0.4</version>
      <executions>
        <execution>
          <id>attach-sources</id>
          <goals>
            <goal>jar</goal>
          </goals>
        </execution>
        <execution>
          <goals>
            <goal>jar</goal>
          </goals>
        </execution>
      </executions>
    </plugin>

要解决此问题,请找到您使用过的所有位置,并确保使用“id”附加源,以便它与发布配置文件相同。然后,这些部分将被合并。maven-source-plugin

最佳实践说,为了获得一致性,您需要在构建>插件管理的项目的根POM中配置它,而不是在子poms中配置它。在子pom中,您只需在构建>插件中指定要使用maven-source-plugin但不提供任何执行的插件。

在根 pom.xml:

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
          <execution>
            <!-- This id must match the -Prelease-profile id value or else sources will be "uploaded" twice, which causes Nexus to fail -->
            <id>attach-sources</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>    
  </pluginManagement>
</build>

在儿童绒球中.xml:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-source-plugin</artifactId>
    </plugin>
  </plugins>
</build>

答案 2

我知道这个问题很旧,但它今天被谷歌点击#1,所以我将添加适合最新版本的maven 3的答案。

症状是,在使用某些版本的 maven 3 进行发布构建时,源和 javadoc jar 会部署两次。如果您使用 maven 将工件部署到只允许上传一次发布工件的 Sonatype Nexus 存储库(这是完全合理的行为),则当第二次上传尝试被拒绝时,构建将失败。唉!

Maven 版本 3.2.3 到 3.3.9 存在错误 - 请参阅 https://issues.apache.org/jira/browse/MNG-5868https://issues.apache.org/jira/browse/MNG-5939。这些版本在执行发布时生成和部署源代码和javadoc jar两次。

如果我正确阅读了Maven问题跟踪器,则在撰写本文时,这些错误尚未计划修复(烧毁的3.4.0版本可能会影响这些错误)。

我没有对我的pom进行复杂的调整,而是回到Maven版本3.2.1。


推荐