当我使用 POM 分发源项目时,我可以使用版本字符串定义依赖项。如果这些依赖项不在本地存储库中,构建将下载这些依赖项,它甚至会使用同一存储库中的元数据来验证这些下载文件的校验和 (
-C
)。
但是,构建将从多个公共存储库(和代理)下载这些依赖项,如果我的用户返回未修改的文件,他们将受到这些公共服务的支配。
我希望有一种方法来记录所有构建依赖项的校验和并将它们与 POM 一起发送(因此我确信文件没有更改,但我不需要将本地存储库的副本发送给构建者)。
有 Maven 方法可以做到这一点吗?与此类似,是否有一种简单的方法来归档我的依赖项(包含所有使用的工件和元数据文件的本地存储库的副本),以便即使中央存储库失败或将它们发送给离线客户,我也可以重复构建?
(如果可能的话,两者都不需要存储库代理。我知道我可以构建一些东西来做到这一点,我只是想知道 Maven 中是否已经有一个基础设施。也许运送一个仅包含元数据文件的本地存储库或类似?)
注意:我不是在生成的工件上寻找
createChecksum
,而是在锁定所使用的依赖项的校验和上。我找到了一个maven-create-checksums
插件,但是没有对应的验证器。
有 BitcoinjEnforcerRules,它似乎是 Maven 的 enforcer 插件 的插件(没错,它是插件的插件)。它的工作原理类似于 gradle-witness,这意味着它将(希望)all 使用的工件依赖项的校验和与您之前创建的列表进行比较。
虽然总比什么都不做要好,但理想的解决方案是,如果可以简单地为直接依赖项的 POM 设置校验和(或用于签署 POM 的 openPG 密钥,以防它是快照工件),并且这些依赖项的 POM 将包含其工件的校验和,以及其直接依赖项的 POM 的校验和(/openPG 密钥,如果是快照),等等。 请注意,如果使用校验和,那么它们应该绑定到特定的 Maven 存储库,因为相同的(不变的,即非快照)工件在不同的存储库中可能具有不同的校验和。
顺便说一句,我找到了最近的 Maven 解决方案,您可以使用
.mvn/checksums/
提供可信的校验和文件或目录:https://maven.apache.org/resolver/expected-checksums.html