从 Maven 远程仓库中删除一个版本

Removing a Version from a Maven Remote Repo

我目前一直在处理我的第一个 Maven 项目并且 运行 对 Maven 版本控制有些困惑。我知道在开发新版本时,应该在版本号中使用 SNAPSHOT 关键字。我也明白非 SNAPSHOT 版本应该只发布一次。

我想知道是否可以从 Maven 远程存储库中删除旧版本。例如,如果我不再需要 1.0.2 可下载的版本,我该怎么办?

此外,假设我正在开发 1.0-SNAPSHOT 版本。当我部署版本 1.0 时,最后一个 1.0-SNAPSHOT 版本是否会被其非 SNAPSHOT 对应版本 deleted/replaced?

对此的简单回答:发布版本(没有 SNAPSHOT)是不可变的。这包括它将永远保留。

原因是:

If someone uses your version 1.0.2 and you simply can delete it those > builds will fail without an obvious reason.

关于你提到的事情的一句话:

I also understand that a non SNAPSHOT version should only be released once.

同一版本不能发布两次。永远不可能也不应该。这意味着您将覆盖和改变行为的现有版本。这也可能会破坏其他构建。

例如,您可以查看 https://search.maven.org/artifact/javax.mail/mail 您会发现超过 15 年的文物。它们永远不会被删除,因为可能有人正在使用它们。

如果您的版本 1.0.2 有问题,只需创建一个新版本 1.0.3 即可解决问题。版本号应该遵循semantical versioning.

如果您在开发期间 运行 版本 1.0-SNAPSHOT 并在 1.0 发布期间发布它(通常通过 maven-release-plugin),通常 1.0-SNAPSHOT 版本将被自动删除。所以 1.0-SNAPSHOT 不再可用。这是 maven 存储库管理器的默认配置。

如果您使用 AWS S3 存储桶作为 Maven 存储库,则有一个残酷的解决方法。我已经测试过它并且有效。

您可以简单地删除远程存储库上的发布文件夹,例如 1.0.0/。事实上,它在主 maven-metadata.xml 中留下了一些遗留的 version 标记,但是当您执行此版本的下一个版本时它将被覆盖。