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

gradle
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:

gradle
plugins {
    id 'org.springframework.boot' version '3.4.0'
    id 'java'
}

Core JVM Plugins

java

Standard Java library or app without a default main:

gradle
plugins {
    id 'java'
}

Key tasks: compileJava, test, jar.

application

Adds runnable distribution and run task:

gradle
plugins {
    id 'java'
    id 'application'
}
 
application {
    mainClass = 'com.example.App'
}
bash
./gradlew run

Creates startup scripts under build/install/ with installDist.

java-library

For reusable modules—distinguishes api vs implementation:

gradle
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:

bash
./gradlew publishToMavenLocal

Artifacts land in ~/.m2/repository—consumable by Maven or Gradle.

Quality: JaCoCo (Test Coverage)

bash
./gradlew test jacocoTestReport

Open build/reports/jacoco/test/html/index.html.

Fat JAR (Shadow Plugin) — Brief

Runnable “uber JAR” with dependencies inside:

bash
./gradlew shadowJar
java -jar build/libs/my-app.jar

Spring Boot uses its own packaging plugin instead of Shadow.

Plugin vs Maven Plugin Mapping

NeedMaven pluginGradle plugin
Compile Javabuilt-injava
Run mainexec-maven-pluginapplication
Unit testsmaven-surefire-plugintest task (Surefire-like)
Fat JARmaven-shade-pluginShadow / Spring Boot
Publishmaven-deploy-pluginmaven-publish

Choosing Plugins for a New Project

Project typePlugins
CLI / demo appjava, application
Shared libraryjava-library, maven-publish
Spring Boot serviceorg.springframework.boot, io.spring.dependency-management, java
Android appcom.android.application (Android Gradle Plugin)

Mini Example: Apply java-library in a Subproject

settings.gradle:

gradle
include 'api', 'app'

api/build.gradle:

gradle
plugins {
    id 'java-library'
}
 
dependencies {
    api 'com.google.code.gson:gson:2.11.0'
}

app/build.gradle:

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.

What comes next?

Testing with Gradle.