如何为 Gradle 构建脚本依赖项生成 BOM

How to generate BOM for Gradle buildscript dependencies

我的团队正在 heavily-regulated 环境中构建软件,因此我们需要完整的物料清单——即使是我们的构建工具本身。我们目前使用的是 Gradle 2.12,但如果它解决了我们当前的问题,可以升级。

我正在尝试为 Gradle 生成 BOM;所有构建脚本依赖项的列表。我们已经可以为正在构建的代码生成一个;这只是 Gradle 本身需要的一组依赖项。目前,我们正在使用以下任务来获取构建脚本依赖项列表:



    task buildscriptDependencies(type: DependencyReportTask) {
        configurations = [buildscript.configurations.classpath]
    }

然而,这只给了我们直接依赖,而不是传递依赖。

最终测试是使用此 BOM 填充本地工件存储库(Artifactory,如果重要的话)并基于它构建,完全断开与 Internet 的连接。没有网络就不能建,就不能通过审核。

有人知道生成完整构建脚本 BOM 的方法吗?

编辑:最近几天我发现了一些东西,这使得这个问题比最初想象的更难:依赖项列表是 BOM 的一部分,而不是全部。

POM 文件可以列出依赖项,但它们也可以列出 parents。我对 POM parents 了解不深,但目前我能看到的是:

auto-generate 依赖文件的标准方法不列出 parent。因此,我没有得到完整的 BOM。由于我使用 BOM 预加载存储库,因此我的所有构建都失败了,因为各种依赖项找不到它们的妈妈。

在 gradle 2.12 中,您可以使用内置任务 gradle buildEnvironment 打印所有构建脚本依赖项的树,包括传递项。

In gradle, we have the option to specify different dependency list in one. 
For ex:

List ruby = ["org.ruby:ruby:2.0.1@jar",
               "commons-cli:commons-cli:1.0@jar",
               "org.apache.ant:ant:1.9.4@jar"]

List hibernate = ['org.hibernate:hibernate:3.0.5@jar',
                  'somegroup:someorg:1.0@jar']

dependencies {
    runtime ruby, hibernate
}