繁体   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