Gradle 的配置层次结构如何工作?

How does Gradle's configurations hierarchy work?

我知道有四种基本配置,compile,runtime,testCompile,testRuntime。如果我加入这样的依赖项:

runtime group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.3'

这意味着此依赖项在运行时 编译下可用,对吗?但是 testCompile 和 testRuntime 呢?它也适用于这些配置吗?如果我添加自己的配置,是否必须指定它在层次结构中的位置?如果我不这样做会怎样?文档并没有真正说明这一点。

java 插件的这 4 个配置的定义如下:

编译 编译项目生产源码所需的依赖

运行时间 生产 类 在 运行 时所需的依赖项。默认情况下,还包括编译时依赖项。

测试编译 编译项目测试源码所需的依赖。默认情况下,还包括已编译的产品 类 和编译时依赖项。

测试运行时间 运行 测试所需的依赖项。默认情况下,还包括编译、运行时间和测试编译依赖项。

你也可以查看 https://docs.gradle.org/current/userguide/java_plugin.html#tab:configurations,它有漂亮的图表和 table:

当您声明一个新配置时,您可以定义它扩展的其他配置,例如 Gradle In ActionGeb[ 为例=41=],您可以将新配置定义为

configurations {
    functTestCompile.extendsFrom testCompile
    functTestRuntime.extendsFrom testRuntime
}

如果你不这样做,你假设这些配置不需要从另一个和它的独立中获益,你将需要定义这个配置需要的所有依赖项。