Gradle Concepts: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
No edit summary
Line 16: Line 16:
=<span id='Build'></span>Build Lifecycle=
=<span id='Build'></span>Build Lifecycle=


A build is a Gradle execution. Each build starts with instantiation of a [[Gradle_Settings|Settings]] and [[Org.gradle.api.invocation.Gradle|Gradle]] instance, then of at least one [[Gradle Project#Overview|project]], which in turn contains [[Gradle Task#Overview|tasks]], and it can be configured and controlled with [[Gradle Runtime and Project Configuration#Overview|properties]]. Depending on the specific of the build, other [https://docs.gradle.org/current/dsl/#N100CA Gradle core types] are instantiated as well. The lifecycle of a Gradle build consists in an [[#Build_Initialization_Phase|initialization]], [[#Build_Configuration_Phase|configuration]] and an [[#Build_Execution_Phase|execution phase]]. Code can be written to [[Gradle Reacting to Build Lifecycle Events|react to a build's lifecycle events]].
A build is a Gradle execution. Each build starts with instantiation of a [[Gradle_Settings|Settings]] and [[Org.gradle.api.invocation.Gradle|Gradle]] instance, then of at least one [[Gradle Project#Overview|project]], which in turn contains [[Gradle Task#Overview|tasks]], and it can be configured and controlled with [[Gradle Properties - Runtime and Project Configuration#Overview|properties]]. Depending on the specific of the build, other [https://docs.gradle.org/current/dsl/#N100CA Gradle core types] are instantiated as well. The lifecycle of a Gradle build consists in an [[#Build_Initialization_Phase|initialization]], [[#Build_Configuration_Phase|configuration]] and an [[#Build_Execution_Phase|execution phase]]. Code can be written to [[Gradle Reacting to Build Lifecycle Events|react to a build's lifecycle events]].


==<span id='Initialization'></span><span id='Build_Initialization'></span>Initialization Phase==  
==<span id='Initialization'></span><span id='Build_Initialization'></span>Initialization Phase==  
Line 38: Line 38:
* <span id='Project'></span><span id='Gradle_Project'></span>[[Gradle Project|Project]], [[Gradle_Dependencies_and_Configurations|Dependencies and Configurations]], [[Gradle_Multi-Project_Builds#Overview|Multi-Project Builds]], [[Gradle Reacting to Build Lifecycle Events|Reacting to Build Lifecycle Events]], [[Gradle_ProjectDescriptor|ProjectDescriptor]]
* <span id='Project'></span><span id='Gradle_Project'></span>[[Gradle Project|Project]], [[Gradle_Dependencies_and_Configurations|Dependencies and Configurations]], [[Gradle_Multi-Project_Builds#Overview|Multi-Project Builds]], [[Gradle Reacting to Build Lifecycle Events|Reacting to Build Lifecycle Events]], [[Gradle_ProjectDescriptor|ProjectDescriptor]]
* <span id='Task'></span><span id='Gradle_Task'></span>[[Gradle Task|Task]], [[Extending Gradle with a Custom Enhanced Task|Extending Gradle with a Custom Enhanced Task]]
* <span id='Task'></span><span id='Gradle_Task'></span>[[Gradle Task|Task]], [[Extending Gradle with a Custom Enhanced Task|Extending Gradle with a Custom Enhanced Task]]
* <span id='Properties'></span><span id='Gradle_Properties'></span>[[Gradle Runtime and Project Configuration|Gradle Runtime and Project Configuration]]
* <span id='Properties'></span><span id='Gradle_Properties'></span>[[Gradle Properties - Runtime and Project Configuration|Gradle Properties - Runtime and Project Configuration]]
* <span id='Gradle_Instance'></span><span id='Gradle'></span>[[org.gradle.api.invocation.Gradle|Gradle Instance]], <span id='Gradle_Settings'></span><span id='Settings'></span>[[Gradle Settings|Settings Instance]]
* <span id='Gradle_Instance'></span><span id='Gradle'></span>[[org.gradle.api.invocation.Gradle|Gradle Instance]], <span id='Gradle_Settings'></span><span id='Settings'></span>[[Gradle Settings|Settings Instance]]
* <span id='Logging'></span><span id='Gradle_Logging'></span>[[Gradle Logging|Logging]]
* <span id='Logging'></span><span id='Gradle_Logging'></span>[[Gradle Logging|Logging]]

Revision as of 22:04, 13 October 2020

External

Internal

Overview

Gradle is a general-purpose build tool. It is primarily used to build Java and Groovy, but it can build other languages as well. The goal of a Gradle execution, also known as a Gradle build, is to execute a set of tasks, in sequence. Each build runs according to a well defined build lifecycle, during which Gradle instantiates a complex domain model of the project in memory: a Gradle instance, a Settings instance and the project itself.

Build Lifecycle

A build is a Gradle execution. Each build starts with instantiation of a Settings and Gradle instance, then of at least one project, which in turn contains tasks, and it can be configured and controlled with properties. Depending on the specific of the build, other Gradle core types are instantiated as well. The lifecycle of a Gradle build consists in an initialization, configuration and an execution phase. Code can be written to react to a build's lifecycle events.

Initialization Phase

The build starts with the initialization phase. Gradle creates a Gradle instance and a Settings instance, then executes the settings script, which can be used to update the state of its Settings delegate. In case of a simple project, Gradle creates the Project instance. For a multi-project build, and depending on which project is executed, Gradle figures out which of the project dependencies need to participate in the build. It creates a project representation for each of the projects, defining the build's project hierarchy. The sub-projects are declared using the "include" or "includeFlat" Settings methods in settings.gradle. Note that at the initialization phase, Project instances are not accessible from the settings script. Project data can be accessed, and some of it mutated, via a ProjectDescriptor interface instead. Extra properties for Gradle and Settings object instances can be declared at this phase. None of the build scripts is executed in this phase.

Configuration Phase

The code declared in build.gradle is executed in order in which it was declare, against the root project instance and its sub-projects. The plugins declared in the build scripts are downloaded and initialized in their corresponding Project instances. According to the configuration on demand principle, only relevant projects are configured. Tasks are instantiated and configured, by executing their configuration closures. Any configuration code is executed with every build of the project. Gradle constructs a task DAG. The incremental build features determines if any of the tasks in the model are required to run.

Execution Phase

The execution phase requires that one or more tasks is specified on command line. Task actions are executed in the correct order, as determined by their dependencies. Task considered up-to-date are skipped and a a task is executed only once.

Configuration Scripts and Core Types

Convention over Configuration

Subjects

TO DEPLETE

Gradle Concepts TO DEPLETE