Gradle Project and Build Script: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
 
(122 intermediate revisions by the same user not shown)
Line 1: Line 1:
=External=
=DEPLETE TO=
{{Internal|Gradle Project|Gradle Project}}


* https://docs.gradle.org/current/dsl/org.gradle.api.Project.html
=Overview=
* Build script structure https://docs.gradle.org/current/dsl/#N10060
 
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. The build.gradle configuration script is written in the Gradle DSL and it may contain any Groovy language element, [[#Variables|variable declarations]], [[#Top-Level_Script_Blocks|script blocks]], etc. [[Groovy]] single-quoted and double-quoted string literals can be used. The main difference is that double-quoted String literals support String interpolation.


=Internal=
In case of a [[#Multi-Project_Builds|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.


* [[Gradle_Concepts#Build_Lifecycle_and_Gradle_Objects|Gradle Concepts]]
build.gradle can be created automatically on project setup with [[Gradle_Operations#Start_a_Project|gradle init]]. To make build scripts more concise, Gradle automatically adds the set of default Gradle import statements to the script.


=Overview=
The default name of the build script is "build.gradle" and in most cases there is no need to change it. It can be changed, though, in [[Gradle_Settings_Script_and_Settings_Instance#Overview|settings.gradle]] by setting the "buildFileName" property of the  [[Gradle_Settings_Script_and_Settings_Instance#ProjectDescriptor_-_Access_to_Projects_from_Settings|ProjectDescriptor]] associated with the project whose build script name we want to change:


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.
<syntaxhighlight lang='groovy'>
project(':projectA').buildFileName = 'projectA.gradle'
</syntaxhighlight>


=Multi-Project Builds=
The project is a collection of [[Gradle Task#Overview|tasks]].


==Root Project==
=Top-Level Script Blocks=


==Multi-Project Build Layout==
==allprojects{}==


[[Gradle_Settings_Script_and_Settings_Instance#Project_Hierarchy|Project Hierarchy]]
Applies the given configuration closure, in order, to the current project and all of its ''sub-projects''.


=Internal=
{{Internal|Gradle_Multi-Project_Builds#allprojects|allprojects{...} usage examples}}


* [[Gradle_Concepts#Build_Script|Gradle Concepts]]
==subprojects{}==


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


All top level statements within a Gradle build script are delegated to the corresponding [[Gradle_Project#Overview|Project]] instance.
{{Internal|Gradle_Multi-Project_Builds#subprojects|subprojects{...} usage examples}}


=Top-Level Script Blocks=
==repositories{}==


==allprojects{}==
Used to declare and configure the repositories associated with this project. The repositories declared here will only be used to pull dependencies from, not publish against. For details on how to specify publishing repositories, see [[Gradle_Artifact_Publishing_Concepts#Overview|Gradle Artifact Publishing]]. This method executes the given configuration closure against the [https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.dsl.RepositoryHandler.html RepositoryHandler] for this project, which is passed to the closure as the closure's delegate. More details on on repositories and how to configured them are available in: {{Internal|Gradle Repositories#Overview|Gradle Repositories}}


Applies the given configuration closure, in order, to the current project and all of its ''sub-projects''.
=Project's Containers and Handlers=


==subprojects{}==
{{External|https://docs.gradle.org/current/dsl/#N10272}}


Applies the given configuration closure, in order, to all ''sub-projects'' of the current project.
* <span id='Repository_Handler'></span>[[Gradle_Repositories#Repository_Handler|Repository Handler]]
* <span id='Configuration_Container'></span>[[Gradle_Dependencies_and_Dependency_Configurations#Configuration_Container|Configuration Container]]
* Publishing extension:
** <span id='Publications_Container'></span>[[Gradle_Maven_Publish_Plugin#Mechanics|Publications Container]]
** <span id='Publishing_Repository_Container'>[[Gradle_Maven_Publish_Plugin#Mechanics|Publishing Repository Container]]


==artifacts{}==
=Reacting to Build Lifecycle Events=


==buildscript{}==
A [[Gradle_Concepts#Build_Lifecycle|build lifecycle]] can be reacted to with code similar to the following examples.


==configurations{}==
<font color=darkgray>More research necessary.</font>


==dependencies{}==
<syntaxhighlight lang='groovy'>
allprojects {
      afterEvaluate { project ->
          if (project.hasTests) {
              println "Adding test task to $project"
              project.task('test') {
                  doLast {
                        println "running tests for $project"
                  }
              }
          }
    }
}
</syntaxhighlight>


==repositories{}==
<syntaxhighlight lang='groovy'>
gradle.afterProject {project, projectState ->
      if (projectState.failure) {
          println "Evaluation of $project FAILED"
      }
      else {
          println "Evaluation of $project succeeded"
      }
}
</syntaxhighlight>


==sourceSets{}==
=Text Execution Configuration=


==publishing{}==
{{Internal|Testing_with_Gradle_Java_Plugin#Configuring_the_.22test.22_Task|Test Execution Configuration}}

Latest revision as of 09:51, 22 October 2020

DEPLETE TO

Gradle Project

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. The build.gradle configuration script is written in the Gradle DSL and it may contain any Groovy language element, variable declarations, script blocks, etc. Groovy single-quoted and double-quoted string literals can be used. The main difference is that double-quoted String literals support String interpolation.

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.

build.gradle can be created automatically on project setup with gradle init. To make build scripts more concise, Gradle automatically adds the set of default Gradle import statements to the script.

The default name of the build script is "build.gradle" and in most cases there is no need to change it. It can be changed, though, in settings.gradle by setting the "buildFileName" property of the ProjectDescriptor associated with the project whose build script name we want to change:

project(':projectA').buildFileName = 'projectA.gradle'

The project is a collection of tasks.

Top-Level Script Blocks

allprojects{}

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

allprojects{...} usage examples

subprojects{}

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

subprojects{...} usage examples

repositories{}

Used to declare and configure the repositories associated with this project. The repositories declared here will only be used to pull dependencies from, not publish against. For details on how to specify publishing repositories, see Gradle Artifact Publishing. This method executes the given configuration closure against the RepositoryHandler for this project, which is passed to the closure as the closure's delegate. More details on on repositories and how to configured them are available in:

Gradle Repositories

Project's Containers and Handlers

https://docs.gradle.org/current/dsl/#N10272

Reacting to Build Lifecycle Events

A build lifecycle can be reacted to with code similar to the following examples.

More research necessary.

allprojects {
      afterEvaluate { project ->
          if (project.hasTests) {
              println "Adding test task to $project"
              project.task('test') {
                   doLast {
                         println "running tests for $project"
                   }
              }
          }
     }
}
gradle.afterProject {project, projectState ->
      if (projectState.failure) {
          println "Evaluation of $project FAILED"
      } 
      else {
          println "Evaluation of $project succeeded"
      }
}

Text Execution Configuration

Test Execution Configuration