Gradle Plugins
Introduction
Plugins bundle tasks, defaults, and conventions. The java plugin compiles code; application adds run; java-library models shared APIs. This chapter maps the plugins you will use in JVM backends and points to publishing and quality plugins for real pipelines.
Prerequisites
How Plugins Apply
plugins {
id 'java'
id 'application'
}Applying a plugin:
- Registers tasks (
compileJava,test,jar, …) - Adds dependency configurations (
implementation, …) - Sets default directory layout (
src/main/java)
Versioned external plugins:
plugins {
id 'org.springframework.boot' version '3.4.0'
id 'java'
}Core JVM Plugins
java
Standard Java library or app without a default main:
plugins {
id 'java'
}Key tasks: compileJava, test, jar.
application
Adds runnable distribution and run task:
plugins {
id 'java'
id 'application'
}
application {
mainClass = 'com.example.App'
}./gradlew runCreates startup scripts under build/install/ with installDist.
java-library
For reusable modules—distinguishes api vs implementation:
plugins {
id 'java-library'
}Use in lib modules of a multi-project build; apps consume the library with implementation project(':lib').
Publishing: maven-publish
Publish to Maven Local or a remote repository:
./gradlew publishToMavenLocalArtifacts land in ~/.m2/repository—consumable by Maven or Gradle.
Quality: JaCoCo (Test Coverage)
./gradlew test jacocoTestReportOpen build/reports/jacoco/test/html/index.html.
Fat JAR (Shadow Plugin) — Brief
Runnable “uber JAR” with dependencies inside:
./gradlew shadowJar
java -jar build/libs/my-app.jarSpring Boot uses its own packaging plugin instead of Shadow.
Plugin vs Maven Plugin Mapping
| Need | Maven plugin | Gradle plugin |
|---|---|---|
| Compile Java | built-in | java |
| Run main | exec-maven-plugin | application |
| Unit tests | maven-surefire-plugin | test task (Surefire-like) |
| Fat JAR | maven-shade-plugin | Shadow / Spring Boot |
| Publish | maven-deploy-plugin | maven-publish |
Choosing Plugins for a New Project
| Project type | Plugins |
|---|---|
| CLI / demo app | java, application |
| Shared library | java-library, maven-publish |
| Spring Boot service | org.springframework.boot, io.spring.dependency-management, java |
| Android app | com.android.application (Android Gradle Plugin) |
Mini Example: Apply java-library in a Subproject
settings.gradle:
include 'api', 'app'api/build.gradle:
plugins {
id 'java-library'
}
dependencies {
api 'com.google.code.gson:gson:2.11.0'
}app/build.gradle:
plugins {
id 'java'
id 'application'
}
dependencies {
implementation project(':api')
}
application {
mainClass = 'com.example.Main'
}FAQ
Where are plugin versions defined?
In the plugins { id ... version } block or pluginManagement in settings.gradle.
Plugin not found on portal?
Check spelling and gradlePluginPortal() in pluginManagement.
Difference between plugins and apply plugin:?
Old apply plugin: 'java' style—prefer the plugins { } block in new projects.