Maven不会从存储库服务器中删除额外的工件

时间:2017-05-17 00:32:52

标签: maven maven-metadata

我使用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)。这是预期的吗?

1 个答案:

答案 0 :(得分:0)

这是正常行为。

您不应该重新部署已发布的版本。原因如下:

  • 其他开发人员和持续集成(CI)服务器可能已经下载了此版本的工件,并将其置于本地构建工具中。缓存(Maven,Ivy,SBT,Gradle等)。如果已发布的版本已下载到本地缓存中,这些构建工具将 永远不会 再次检查远程。因此,他们永远不会知道您已经部署了同一工件的新版本。
  • 可能有构建和程序集已经依赖于您的工件并包含它。这可以打包在一个WAR / JAR中,甚至可以在一个jar中加阴影。
  • 如果重新部署相同版本,则可能会破坏用户提供给您的调试数据。如果某些开发人员没有在缓存中使用jar并重建其所基于的标记,并且所有依赖项都在本地获取和缓存,那么堆栈跟踪和线程转储等操作将会关闭,开发人员将浪费宝贵的时间弄清楚a)他们的环境和b)调试数据的错误。
  • 如果您重新部署已发布的版本,开发人员会对您不好看。这是一个众所周知的糟糕做法,应该始终避免,除非你刚刚在5分钟前发布并 完全确定 ,其他人还没有使用此代码。< / LI>

当您意识到自己的代码存在问题而且您已经发布时,建议的做法(除非您使用的是暂存存储库)是仅部署新版本增加的数字。您部署新版本的次数越多(当然有理由),您的库/产品的用户就越有信心开发活动并且(希望)修复了一些事情。默默地重新部署相同的版本肯定会导致混乱和不眠之夜。

另外,Maven没有:

  • 删除工件
  • 删除maven-metadata.xml个文件
  • 中的条目

这取决于你。您需要使用工件存储库管理器重建元数据(如果已经部署)(除非这是快照)。