簡體   English   中英

Maven不會從存儲庫服務器中刪除額外的工件

[英]Maven does not delete extra artifacts from repository server

我使用mvn deploy命令在存儲庫服務器上部署了我的java項目工件。 當我部署工件(發布版本)時,我還使用以下代碼片段部署了javadocs和source。

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

    </build>

現在我通過注釋上面的片段,maven dint刪除了額外的工件(source和javadocs)來部署相同的項目(Same release version)。這是預期的嗎?

這是正常行為。

您不應該重新部署已發布的版本。 原因如下:

  • 其他開發人員和持續集成(CI)服務器可能已經下載了此版本的工件,並將其放在本地構建工具的緩存中(Maven,Ivy,SBT,Gradle等)。 如果已發布的版本已下載到本地緩存中,則這些構建工具將永遠不會在遠程中再次檢查。 因此,他們永遠不會知道您已經部署了同一工件的新版本。
  • 可能存在已依賴於工件並包含它的構建和程序集。 這可以打包在WAR / JAR中,甚至可以在jar內部着色。
  • 如果重新部署相同版本,則可能會破壞用戶提供給您的調試數據。 如果某些開發人員的緩存中沒有jar並重建其所基於的標記,並且所有依賴項都在本地獲取和緩存,那么堆棧跟蹤和線程轉儲等操作將會關閉,開發人員將浪費寶貴的時間弄清楚a)他們的環境和b)調試數據有什么問題。
  • 如果重新部署已發布的版本,開發人員會對您不好看。 這是一個眾所周知的糟糕做法,應該始終避免,除非你剛剛在5分鍾前發布並完全確定沒有其他人正在使用此代碼。

當您意識到您的代碼存在問題並且您已經發布時,建議的做法(除非您使用的是暫存存儲庫)是僅部署具有遞增數字的新版本。 您部署新版本的次數越多(當然有理由),您的庫/產品的用戶就越有信心開發活動並且(希望)修復了一些事情。 默默地重新部署相同的版本肯定會導致混亂和不眠之夜。

另外,Maven沒有:

  • 刪除工件
  • maven-metadata.xml文件中刪除條目

這取決於你。 您需要使用工件存儲庫管理器重建元數據(如果已經部署)(除非這是快照)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM