java release plugin - Maven發布插件失敗:源工件被部署兩次




5 Answers

嘗試運行mvn -Prelease-profile help:effective-pom 。 您會發現maven-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>

要解決此問題,請找到您使用maven-source-plugin ,並確保使用“id”attach-sources以使其與發布配置文件相同。 然後這些部分將合併。

最佳實踐說,要獲得一致性,您需要在build> pluginManagement中的項目的根POM中配置它,而不是在您的子poms中。 在子pom中,您只需在build> plugins中指定要使用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>

在子pom.xml中:

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

我們正在使用hudson上的maven發布插件並嘗試自動執行發布過程。 發布:準備工作正常。 當我們嘗試執行release:perform時,它會失敗,因為它會嘗試將源工件兩次上傳到存儲庫。

我試過的東西,

  1. 從超級pom中刪除包含maven源插件的配置文件(不起作用)
  2. 將hudson上的目標指定為-P!attach-source release:prepare release:perform。 我認為這將排除源插件被執行。 (不工作)。
  3. 嘗試將插件階段指定為超級pom中的某些不存在的階段。(沒有工作)
  4. 嘗試指定插件配置,forReleaseProfile為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

任何有關這方面的幫助將非常感激。




剛剛遇到同樣的問題,我對它進行了一些分析。 mvn release:perform評估release.properties文件,然後檢出臨時目錄中的標籤並調用類似的東西

/usr/bin/mvn -D maven.repo.local=... -s /tmp/release-settings5747060794.xml
    -D performRelease=true -P set-envs,maven,set-envs deploy

我試圖重現這一點 - 手動檢查由release:prepare的標籤release:prepare並調用它:

mvn -D performRelease=true -P set-envs,maven,set-envs deploy

我得到了相同的結果:它試圖上傳-sources.jar兩次。

正如註釋中的qualidafial所述,設置performRelease=false而不是省略同一文件的兩個附件之一。

我真的不知道部署插件 (或任何其他插件)如何使用此屬性。

我們可以將此參數作為配置提供給maven-relase-plugin:

<build>
    <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <useReleaseProfile>false</useReleaseProfile>
            </configuration>
        </plugin>
    </plugins>
</build>

我現在將<useReleaseProfile>false</useReleaseProfile>行添加到所有POM中,看起來現在發布沒有錯誤消息。




我不認為探測器在發布插件中,我認為你已經連接了兩次xxx-sources.jar - 這就是重複上傳的原因。 如果沒有看到POM,為什麼有重複的附件很難說。 嘗試運行mvn -X並檢查其他人附加xxx-source.jar的日誌。

在任何情況下,Nexus的一個很好的解決方法是擁有一個暫存存儲庫,您可以在其中多次上傳版本 - 當一切準備就緒時,您只需關閉/推廣暫存存儲庫。 檢查Sonatype OSS設置以獲取示例。




父母和子女朋友的Maven插件不應該執行。 按照標準慣例,在插件管理部分的父pom中定義所有具有執行/目標的插件。 Child pom不應該重新定義上面的細節,而只提到需要執行的插件(帶artifactId和版本)。

我與maven-assembly-plugin和父pom有類似的問題,如下所示:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <descriptors>
                        <descriptor>src/assembly/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

而Child pom有maven-assembly-plugin如下:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-5</version>
            <configuration>
                <finalName>xyz</finalName>
                <descriptors>
                    <descriptor>src/assembly/assembly.xml</descriptor>
                </descriptors>
            </configuration>
            <executions>
                <execution>
                    <id>xyz-distribution</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

從子pom中刪除<executions>糾正了這個問題。 有效的pom執行了2次執行,導致重複安裝到Nexus repo。




我使用releaseProfile = false配置了maven release插件,並且不執行源工件配置文件。 哪個做了伎倆。

<build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-release-plugin</artifactId>
                    <version>2.1</version>
                    <configuration>
                            <arguments>-P!source-artifacts</arguments>
                            <useReleaseProfile>false</useReleaseProfile>
                            <goals>-Dmaven.test.skip=true deploy</goals>
                    </configuration>    
                </plugin>
            </plugins>
        </build>



Related