Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does Gradle's configurations hierarchy work?

I know there are four basic configurations, compile, runtime, testCompile, and testRuntime. If I put in a dependency like this:

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

This means this dependency is available under runtime and compile, correct? But what about testCompile and testRuntime? Is it available for these configurations as well? If I add my own configuration, do I have to specify where it exists in the hierarchy? What happens if I don't? The documentation didn't really make this clear.

like image 560
slim Avatar asked Sep 02 '15 13:09

slim


People also ask

What is configurations in build Gradle?

A “configuration” is a named grouping of dependencies. A Gradle build can have zero or more of them. A “repository” is a source of dependencies. Dependencies are often declared via identifying attributes, and given these attributes, Gradle knows how to find a dependency in a repository.

What is default configuration in Gradle?

The default configuration extends from the runtime configuration, which means that it contains all the dependencies and artifacts of the runtime configuration, and potentially more. You can add dependencies and artifacts in the usual way (using a dependencies / artifacts block in B's build script).

What does Gradle use to determine the order in which tasks can be run?

Gradle determines the subset of the tasks, created and configured during the configuration phase, to be executed. The subset is determined by the task name arguments passed to the gradle command and the current directory. Gradle then executes each of the selected tasks.


Video Answer


1 Answers

The definition for those 4 configuration are as follow for the java plugin :

compile The dependencies required to compile the production source of the project.

runtime The dependencies required by the production classes at runtime. By default, also includes the compile time dependencies.

testCompile The dependencies required to compile the test source of the project. By default, also includes the compiled production classes and the compile time dependencies.

testRuntime The dependencies required to run the tests. By default, also includes the compile, runtime and test compile dependencies.

you can also check https://docs.gradle.org/current/userguide/java_plugin.html#tab:configurations, it has pretty graph and table:

enter image description here

When you declare a new configuration you can define what other configuration it extends, for example Gradle In Action takes the example with Geb, you would define new configuration as

configurations {
    functTestCompile.extendsFrom testCompile
    functTestRuntime.extendsFrom testRuntime
}

If you dont, you assume those configuration do not need to benefit from another one and its standalone, you will need to define all dependencies this configuration requires.

like image 135
Frederic Henri Avatar answered Oct 01 '22 12:10

Frederic Henri