1

我正在将 Nexus OSS 部署为公司内部存储库。主要要求之一是,一旦 Nexus 下载了一个 jar(例如,当使用 is 作为 Maven Central 的代理时),它就永远不会改变。我知道 Maven Central 有该政策,但我正在使用不受我控制的其他存储库,我必须在我这边验证该要求。

发布存储库策略是否确保一旦将 jar 下载到该存储库中,它就永远不会更改?

存在这样的要求是为了确保我们可以回到 1.5 年前创建的产品版本,并确保产品使用的存储库工件在现在构建时是相同的。

4

1 回答 1

2

事实上,发布存储库应该严格禁止发布后的内容修改,这就是 Maven Central 正在做的事情:

2.2.4。中央 Maven 存储库

(...) 以下是发布存储库的一些属性,例如中央 Maven 存储库:

...

释放稳定性

一旦发布到中央 Maven 存储库,工件和描述该工件的元数据永远不会改变。发布存储库的这一特性保证了依赖于发布的项目将随着时间的推移是可重复的和稳定的。虽然每天都有新的软件工件发布到 Central,但一旦在 Central 上为工件分配了版本号,就会有严格的政策禁止在发布后修改软件工件的内容。

话虽如此,Maven 客户端是否会(重新)下载工件并不真正取决于存储库及其策略,这是 Maven DNA 的一部分,它不会发生(除非您从您的当然是本地存储库)。在 [MNG-2528] 中引用 Brett Porter - updatePolicy“总是”不适用于具有“发布”的存储库,至少不适用于传递依赖

根据定义,Maven 中的发布是不变的。always 标志是检查新版本(就像它查找新快照一样),而不是对现有版本的修改。

In other words, if you don't delete the content of your Nexus repository, Nexus will never re-download a released artifact again and you will thus be able to rebuild the version of your product created two years ago, using the exact same libraries.

于 2010-08-03T08:00:08.633 回答