如何为 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 了解不深,但目前我能看到的是:
如果 foo 版本 209 将 'foo-parent' 声明为 parent,您将需要 foo-parent 版本 209.
在这种情况下,foo 被称为继承自 foo-parent,类似于 类 可以相互继承。
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
}
我的团队正在 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 了解不深,但目前我能看到的是:
如果 foo 版本 209 将 'foo-parent' 声明为 parent,您将需要 foo-parent 版本 209.
在这种情况下,foo 被称为继承自 foo-parent,类似于 类 可以相互继承。
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
}