如何为Gradle buildscript依赖项生成BOM

时间:2016-06-27 14:32:11

标签: gradle dependencies

我的团队正在严格监管的环境中构建软件,因此我们需要一个完整的物料清单 - 即使对于我们的构建工具本身也是如此。我们目前正在使用Gradle 2.12,但如果能解决我们目前的问题,可以升级。

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



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

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

最终的测试是使用此BOM来填充本地工件存储库(Artifactory,如果它很重要)并基于此构建,完全与Internet断开连接。如果我们不能在没有互联网的情况下建设,我们就无法通过审核。

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

编辑:我在过去几天发现了一些问题,这使得这个问题比原先想象的更难:依赖关系列表是BOM的一部分,而不是整个事情。

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

  • 如果foo版本209将'foo-parent'声明为父级,则需要foo-parent版本209。

  • 在这种情况下,foo被称为继承自foo-parent,类似于类可以相互继承的方式。

自动生成依赖项文件的标准方法不会列出父项。因此,我没有得到完整的BOM。由于我使用BOM来预加载存储库,所以我的所有构建都失败了,因为各种依赖项无法找到他们的妈妈。

2 个答案:

答案 0 :(得分:1)

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
}

答案 1 :(得分:0)

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