Gradle Project and Build Script: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 50: Line 50:
If set in both places, the sub-project collocated build.gradle value takes precedence, as it is "closer" to the project.
If set in both places, the sub-project collocated build.gradle value takes precedence, as it is "closer" to the project.


====Version====
===Version===


The version may be set in the [[Gradle_Concepts#Configuration|configuration]] phase, in the build configuration file, as shown below. It may not be set in the [[Gradle_Concepts#Initialization|initialization]] phase in the settings configuration file, because [[Gradle_Settings_Script_and_Settings_Instance#ProjectDescriptor_-_Access_to_Projects_from_Settings|ProjecteDescriptor]] does not expose a version.
The version may be set in the [[Gradle_Concepts#Configuration|configuration]] phase, in the build configuration file, as shown below. It may not be set in the [[Gradle_Concepts#Initialization|initialization]] phase in the settings configuration file, because [[Gradle_Settings_Script_and_Settings_Instance#ProjectDescriptor_-_Access_to_Projects_from_Settings|ProjecteDescriptor]] does not expose a version.

Revision as of 02:55, 19 May 2018

External

Internal

Overview

A Project is the main API to use to interact with Gradle. All top level statements within a "build.gradle" build script are delegated to the corresponding Project instance and when executed, modify its state.

In case of a multi-project build, It is possible to configure a project build from another build script associated with any project in the hierarchy. This capability is called cross-project configuration. Gradle implements cross-project configuration via configuration injection. Configuration injection is the default way to define common behavior.

Project Coordinates

Gradle reads and builds artifacts that are compatible with Maven repositories, so they are described by Maven project coordinates. Project coordinates artifactId, groupId and version can be read or set in the settings configuration file via the ProjectDescriptor interface, or in the build configuration file, described by this article, via the Project interface. These details apply to single project builds and multi-project builds.

Project Name, artifactId

The project name can only be set in the initialization phase, in the settings configuration file, via the ProjectDescriptor interface. An attempt to set the project name in the configuration phase or execution phase via the Project interface, for both single, root or sub-project will trigger a Gradle execution error. The default is given by the directory name the project lives in. It can be changed as follows:

rootProject.name = 'something'
...
project(':subproject-A').name = "something else"

though it is probably a good idea to leave sub-projects to be named by their host sub-directories.

Group, groupId

The group may be set in the configuration phase, in the build configuration file, as shown below. It may not be set in the initialization phase in the settings configuration file, because ProjecteDescriptor does not expose a group.

project.group = 'io.example'

or

group = 'io.example'

For sub-project, the group that is not explicitly set defaults to the name of the parent and it can be set either in the sub-project's build.gradle as shown above, or in the root build.gradle as follows:

project(':subproject-A').group = "io.something"

If set in both places, the sub-project collocated build.gradle value takes precedence, as it is "closer" to the project.

Version

The version may be set in the configuration phase, in the build configuration file, as shown below. It may not be set in the initialization phase in the settings configuration file, because ProjecteDescriptor does not expose a version.

project.version = '1.0'

or

version = '1.0'

For sub-project, the version is undefined if not explicitly set as shown below. There is no default, and no inheritance of the parent project version value. To set it, the sub-project's build.gradle as shown:

version = '2.0'

or

version = parent.version

Alternatively, the version can be set in the root build.gradle:

project(':subproject-A').version = '2.0'

or

project(':subproject-A').version = version

If set in both places, the sub-project collocated build.gradle value takes precedence, as it is "closer" to the project.

Top-Level Script Blocks

allprojects{}

Applies the given configuration closure, in order, to the current project and all of its sub-projects.

subprojects{}

Applies the given configuration closure, in order, to all sub-projects of the current project.

artifacts{}

buildscript{}

configurations{}

dependencies{}

repositories{}

sourceSets{}

publishing{}

Multi-Project Builds

Root Project

Multi-Project Build Layout

Project Hierarchy

Sub-Project