Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gradle: What Is The Default Configuration and How Do I Change It

Tags:

gradle

When I run the "dependencies" task there are several sections: compile, runtime, testCompile ...

One of those sections is "default - Configuration for default artifacts." What is this section and what is it used for?

How do I change what is in the "default configuration"?

Details: Gradle 1.7

like image 572
Mike Rylander Avatar asked Nov 12 '13 18:11

Mike Rylander


People also ask

What is a Gradle configuration?

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.

How do I change Gradle settings?

We can get to the settings from the Gradle Tool Window, or from the usual Settings/Preferences dialog (⌘, (macOS), or Ctrl+Alt+S (Windows/Linux)) and navigating to Build, Execution, Deployment | Build Tools | Gradle. Generally these settings are fine for most projects, and don't need changing.

What is Gradle dependency configuration?

What are dependency configurations. Every dependency declared for a Gradle project applies to a specific scope. For example some dependencies should be used for compiling source code whereas others only need to be available at runtime. Gradle represents the scope of a dependency with the help of a Configuration.

Where is Gradle config?

The global properties file should be located in your home directory: On Windows: C:\Users\<you>\. gradle\gradle.


2 Answers

Unless your build is publishing Ivy modules, the default configuration is mainly relevant when dealing with project dependencies in a multi-project build. Given a multi-project build with projects A and B, if A declares a project dependency on B without explicitly naming a configuration (e.g. dependencies { compile project(":B") }, A (more precisely A's compile configuration) will depend on project B's default configuration. In other words, dependencies { compile project(":B") } is a shortcut for dependencies { compile project(path: ":B", configuration: "default") }.

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). Alternatively, B could declare a custom configuration, and A could depend on that by explicitly naming that configuration (e.g. dependencies { compile project(path: ":B", configuration: "myCustomConfig") }.

like image 125
Peter Niederwieser Avatar answered Sep 28 '22 07:09

Peter Niederwieser


When using the gradle java plugin the 'default' configuration extendsFrom 'runtime', 'runtimeOnly', 'implementation'

If you do not use the java plugin then you can define it yourself like this

configurations {
    "default"
}

The java plugin sets up the default configuration here: https://github.com/gradle/gradle/blob/85d30969f4672bb2739550b4de784910a6810b7a/subprojects/plugins/src/main/java/org/gradle/api/plugins/JavaPlugin.java#L437

The documentation is not that good in this area.

An example of "serving" a default artifact from a composite build. The example creates a subproject that refers to a dependency in another project. This can be nessesary when working with composite builds, as only the "default" group can be depended upon.

We use this to take many jars from a single project and serve it as different dependencies when referencing the project as a composite build.

apply plugin: 'base'

configurations {
    depend
}

dependencies {
    depend project(path: ':', configuration: 'ConfWithArtifact')
}

artifacts {
    "default" (file: configurations.depend.singleFile) {
        builtBy(configurations.depend)
    }
}
like image 42
Jesper Avatar answered Sep 28 '22 09:09

Jesper