gradle-glossary
gradle-glossary copied to clipboard
Glossary of Gradle terms both common and uncommon
== Glossary of Gradle terms
[[artifact]]
=== Artifact
'Artifact' is usually used in the context of publishing to designate a file whose name has a 'classifier' and 'extension'. Two artifacts in a <
Confusingly, when used in the context of <<maven-publication-format, Maven coordinates>>, an artifactId refers to a list of the above artifacts. For an example, the okhttp
artifactId contains jar, sources and javadocs artifacts.
[[build]]
=== Build
A 'build' is the aggregate of the atomic pieces of work performed by Gradle. A build is made up of <<project,projects>> and those projects have a collection of <<task, tasks>>. A build usually has an outcome of SUCCESS or FAILURE. You can run a build using the gradle
or gradlew
commands.
[[build-script]]
=== Build script
A build.gradle
script. The existence of a build script, along with an entry in the
<<settings-script,settings script>> (other than for the root build script, which requires no entry),
is what defines a Gradle <<module,module>>.
[[configuration]]
=== Configuration
A https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.Configuration.html[Configuration], at
the most basic level, is a bucket of dependencies. The most common configurations, which most people
would have seen, are api
and implementation
. A great place to learn more about configurations
is the documentation for the https://docs.gradle.org/current/userguide/java_library_plugin.html[java-library]
plugin.
While the usage as a bucket of dependencies is the most common for Gradle users, configurations can also https://docs.gradle.org/current/userguide/declaring_dependencies.html#sec:resolvable-consumable-configs[be used in other ways] by plugin authors:
- as a https://docs.gradle.org/current/javadoc/org/gradle/api/file/FileCollection.html[FileCollection]
as an input to tasks (e.g.
runtimeClasspath
). - as an outgoing https://docs.gradle.org/current/userguide/variant_model.html#understanding-variant-selection[variant]
to be later https://docs.gradle.org/current/userguide/publishing_customization.html#sec:publishing-custom-components[published]
(e.g.
apiElements
)
The word "configuration" is one of the most overloaded in the Gradle world. See also <<configuration-phase,configuration phase>>.
[[configuration-phase]]
=== Configuration phase
A Gradle build is composed of two primary phases, the configuration phase (not to be confused with
<
[[convention-plugin]]
=== Convention plugin
A <
See also https://developer.squareup.com/blog/herding-elephants/[Herding elephants: Wrangling a 3,500-module Gradle project].
[[ecosystem-plugin]]
=== Ecosystem plugin
A <java
and java-library
), Groovy,
Scala, Android, Kotlin, etc. Many plugins are maintained by <<gradle,Gradle>> itself, and are
part of the Gradle distribution.
[[execution-phase]] === Execution phase The second primary phase of a Gradle build, the execution phase happens after the <<configuration-phase,configuration phase>> is complete. This is where all <<task,tasks>> actions are executed. This phase has multiple levels of parallelism.
[[gradle]] === Gradle https://gradle.org/[Gradle] is the open-source build system developed and maintained by https://gradle.com/[Gradle, Inc.], a for-profit company.
[[init-script]]
=== Init script
An init, or https://docs.gradle.org/current/userguide/init_scripts.html[initialization script], is
backed by an instance of the https://docs.gradle.org/current/javadoc/org/gradle/api/invocation/Gradle.html[Gradle
type].
See also <<plugin,Plugin>>.
[[maven-build-tool]] === Maven (build tool) https://maven.apache.org/[Maven] is a build tool like Gradle but using a more declarative syntax based on XML. For publishing dependencies, Maven uses the <<maven-publication-format, Maven publication format>>.
[[maven-publication-format]]
=== Maven (publication format)
The Maven publication format is the format used by most of the JVM ecosystem to publish and consume binary dependencies.
Each dependency is identified by a "$group:$artifact:$version
string called "Maven coordinates". These dependencies
can then be consumed by accessing files (by HTTP or on the local filesystem) at $root/$group/$version/
. For an example, the files for com.squareup.okhttp3:okhttp:4.9.3
are available at https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/4.9.3/
While originally made for the <<maven-build-tool, Maven build tool>>, Gradle also supports the Maven publication format. In order to provide more flexibility, Gradle also introduced https://docs.gradle.org/current/userguide/publishing_gradle_module_metadata.html[Gradle module metadata] to provide more information about the dependencies than a regular https://maven.apache.org/guides/introduction/introduction-to-the-pom.html[pom file]
[[maven-central]] === MavenCentral https://search.maven.org/[MavenCentral] is the main repository that hosts <<maven-publication-format, Maven publications>>. It is operated by a company named https://www.sonatype.com/[Sonatype] and is the default repository for a lot of the ecosystem. Other repositories exists like (now defunct) https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/[jcenter] or the https://maven.google.com/web/index.html[Google Maven repository].
[[module]]
=== Module
An informal term for a <
This is one of the other very heavily overloaded terms in the Gradle world. See also <<project,Project>>.
[[plugin]] === Plugin Gradle is built on a plugin system. Gradle itself is primarily composed of infrastructure, such as a sophisticated dependency resolution engine, common to all project types. The rest of its functionality comes from plugins, including "core" plugins distributed with <<gradle,Gradle>> itself, third-party plugins, and <<script-plugin,script plugins>> in a given build.
There are three kinds of plugin, based on the context in which they are applied:
. Project plugins that implement Plugin<Project>
, applied in <<build-script,build scripts>>.
. Settings plugins that implement Plugin<Settings>
, applied in <<settings-script,settings scripts>>.
. Init (Gradle) plugins that implement Plugin<Gradle>
, applied in <<init-script,init scripts>>.
Plugins may be implemented as so-called binary plugins (that is, by explicitly implementing one of the specific generic interfaces described above), or as <<precompiled-script-plugin,precompiled script plugins>>. This distinction is merely an implementation detail.
cf. <<script-plugin,script plugins>>.
[[precompiled-script-plugin]]
=== Precompiled script plugin
Equivalent to a <<plugin,plugin>>, but written such that it looks like a build script,
https://docs.gradle.org/current/userguide/custom_plugins.html#sec:precompiled_plugins[precompiled script plugins]
can be written in Groovy or Kotlin by applying the 'groovy-gradle-plugin'
or kotlin-dsl
plugin,
respectively.
[[project]]
=== Project
Often referred to as a "module", every Gradle project is backed by a
https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html[Project] instance, hence the name.
The most common type of <
[[publication]]
=== Publication
A Gradle https://docs.gradle.org/current/javadoc/org/gradle/api/publish/Publication.html[Publication] is a list of
<<artifact, artifacts>>, and possibly associated metadata. Most of the times, you will deal with https://docs.gradle.org/current/dsl/org.gradle.api.publish.maven.MavenPublication.html[MavenPublications] to publish in the
<<maven-publication-format, Maven publication format>> with the https://docs.gradle.org/current/userguide/publishing_maven.html[maven-publish
] plugin
[[script-plugin]]
=== Script plugin
A gradle script that can be applied to other gradle scripts, including <<build-script,build scripts>>,
<<settings-script,settings scripts>>, and <<init-script,init scripts>>. Can be written in Groovy or
Kotlin, and are applied to other scripts via
https://docs.gradle.org/current/javadoc/org/gradle/api/plugins/PluginAware.html#apply-java.util.Map-[PluginAware.apply].
For example, apply from: 'complicated_thing.gradle'
. Depending on the type of script they are
applied to, they're backed by either a <<project,Project>> instance, a <<settings-script,Settings>> instance,
or a <<init-script,Gradle>> instance.
[[settings-script]]
=== Settings script
A settings.gradle
script. A https://docs.gradle.org/current/javadoc/org/gradle/api/initialization/Settings.html[settings script]
has a large number of responsibilities, but one of the most important is declaring the set of <<project,projects>>
that are part of the build, via include ':project1'
and so on.
[[software-component]]
=== SoftwareComponent
A https://docs.gradle.org/current/javadoc/org/gradle/api/component/SoftwareComponent.html[SoftwareComponent] is a list of artifacts
built by Gradle. It's a relatively recent API used to connect <<configuration, outgoing configurations>> and <<publication, publications>>. Most of the times, you will
use already existing components such as java
or the https://proandroiddev.com/android-library-distribution-with-maven-publish-28ac59b8ecb8[android ones]
to configure your maven publications. If you're a plugin author, you will most likely deal with https://docs.gradle.org/current/javadoc/org/gradle/api/component/AdhocComponentWithVariants.html[AdhowComponentWithVariants]
[[task]] === Task Each <<project,projects>> is made up of one or more tasks. Each task ought to be atomic (but often isn't), with inputs and outputs. Gradle executes tasks to perform its work. Task examples include: compiling source code, creating artifacts (such as jars or apks), generating Javadoc, running static analysis (e.g. lint), deleting temporary files, or publishing to a repository, etc. When a https://docs.gradle.org/current/userguide/more_about_tasks.html[Gradle task] is asked to run we can see the outcome of the task. This will be one of EXECUTED, SKIPPED, FAILED, FROM-CACHE, UP-TO-DATE, NO-SOURCE or blank (meaning executed).