冻结对maven版本的传递依赖性,以使构建完全可重现

Luk*_*ski 5 dependencies release maven maven-release-plugin transitive-dependency

与基本maven概念相关的问题:

一旦发布,我希望保证项目构建完全可重现.因此,所有项目和插件依赖项(包括可传递的依赖项)应始终以相同的方式解析.

不幸的是,如果依赖关系以版本范围表示,则情况并非如此.即使设置了项目的直接依赖关系(使用版本:use-releases),也可能发生传递依赖关系仍然可以在将来以其他方式解决.

如何解决这个问题?有没有已知的解决方案?

我在思考(只是一个想法),关于创建一个插件,在发布时将把项目的所有依赖项转储到一个单独的文件,然后在将来构建之后,从文件读取的依赖项将优先于标准maven用来解决依赖关系的方式.但我担心没有插件api.所以它需要一些黑客攻击,我想避免.还有另外一种方法吗?

谢谢,卢卡斯

Mic*_*ski 3

使用 冻结工件版本<dependencyManagement>。即使您不使用版本范围(如您所说),而是使用第 3 方库(您的依赖项),您<dependencyManagement>在指定任何工件的版本时也将具有更高的优先级。