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

sli*_*lim 3 gradle build.gradle

我知道有四种基本配置,编译,运行时,testCompile和testRuntime.如果我输入这样的依赖:

runtime group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.3'
Run Code Online (Sandbox Code Playgroud)

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

Fré*_*nri 11

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

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

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

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

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

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

在此输入图像描述

声明新配置时,您可以定义它扩展的其他配置,例如Gradle In Action以Geb为例,您可以将新配置定义为

configurations {
    functTestCompile.extendsFrom testCompile
    functTestRuntime.extendsFrom testRuntime
}
Run Code Online (Sandbox Code Playgroud)

如果你不这样做,你会认为这些配置不需要从另一个配置中获益,而是需要另外配置,你需要定义这个配置所需的所有依赖关系.