1

我使用 mvn deploy 命令在存储库服务器上部署了我的 java 项目工件。当我这次部署工件(发布版本)时,我还使用以下代码片段部署了 javadocs 和源代码。

<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 删除了额外的工件(源代码和 javadocs)。这是预期的吗?

4

1 回答 1

0

这是正常行为。

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

  • 其他开发人员和持续集成 (CI) 服务器可能已经下载了此版本的工件并将其保存在本地构建工具的缓存中(Maven、Ivy、SBT、Gradle 等)。如果发布的版本已下载到本地缓存中,这些构建工具将永远不会再次检查远程。因此,他们永远不会知道您已经部署了同一工件的新版本。
  • 可能存在已经依赖于您的工件并包含它的构建和程序集。这可能是打包在 WAR/JAR 中,甚至是在 jar 中隐藏。
  • 如果您重新部署相同的版本,您可能会破坏用户交给您的调试数据。如果某些开发人员的缓存中没有 jar 并重建它所基于的标记,并且所有依赖项都在本地获取和缓存,则堆栈跟踪和线程转储之类的东西将被关闭,开发人员将浪费宝贵的时间弄清楚 a) 他们的环境和 b) 调试数据出了什么问题。
  • 如果您重新部署已发布的版本,开发人员会看不起您。这是一种众所周知的不良做法,应始终避免,除非您在 5 分钟前刚刚发布并且完全确定没有其他人在使用此代码。

当您意识到您的代码存在问题并且您已经发布时,建议的做法(除非您使用暂存存储库)是仅部署具有递增编号的新版本。您部署新版本的频率越高(当然是有原因的),您的库/产品的用户就越有信心开发是活跃的并且事情已经(希望)得到修复。默默地重新部署相同的版本肯定会导致混乱和不眠之夜。

此外,Maven 不会:

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

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

于 2017-05-31T20:28:34.710 回答