Works with build.gradle.kts, application.yml, and Dockerfile configurations.
Gradle Spring Boot Integration
Table of Contents
- •Purpose
- •When to Use
- •Quick Start
- •Instructions
- •Examples
- •Commands Reference
- •Troubleshooting
- •See Also
Purpose
Set up and configure Spring Boot projects in Gradle with proper JAR creation, Docker optimization, and multi-module support. This skill covers bootable JAR setup, layered JARs for optimal Docker caching, and Spring Boot-specific task configuration.
When to Use
Use this skill when you need to:
- •Set up new Spring Boot projects with Gradle
- •Create executable JAR files for Spring Boot applications
- •Configure layered JARs for optimized Docker builds
- •Set up multi-module projects with shared libraries
- •Configure Spring Boot DevTools for hot reload
- •Inject build information into application.yml
- •Set up Spring Boot Actuator for monitoring
- •Configure testing with Spring Boot test starters
Quick Start
Minimal Spring Boot setup in build.gradle.kts:
plugins {
id("java")
id("org.springframework.boot") version "3.5.5"
id("io.spring.dependency-management") version "1.1.7"
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.test {
useJUnitPlatform()
}
Run and build:
./gradlew bootRun # Run locally ./gradlew bootJar # Create executable JAR ./gradlew bootRun --args='--spring.profiles.active=dev' # Run with profile
Instructions
Step 1: Apply Spring Boot Plugin
Configure the Spring Boot Gradle plugin for your project type:
// build.gradle.kts - Web Service (creates bootable JAR)
plugins {
id("java")
id("org.springframework.boot") version "3.5.5"
id("io.spring.dependency-management") version "1.1.7"
}
Key plugins:
- •
org.springframework.boot: Creates executable JARs, provides bootRun task - •
io.spring.dependency-management: Automatically imports Spring Boot BOM
Step 2: Configure Java Toolchain
Specify Java version for consistency:
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
Step 3: Add Spring Boot Dependencies
Use the BOM automatically imported by the plugin:
dependencies {
// Spring Boot starter (no version needed - from BOM)
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
// Development only (DevTools for hot reload)
developmentOnly("org.springframework.boot:spring-boot-devtools")
// Test dependencies
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
// Enable JUnit 5
tasks.test {
useJUnitPlatform()
}
Step 4: Configure Bootable JAR Creation
For services (executable JARs):
tasks.bootJar {
enabled = true
archiveClassifier = "" // No classifier for main artifact
}
tasks.jar {
enabled = false // Disable plain JAR
}
For libraries (plain JARs):
tasks.bootJar {
enabled = false // Not executable
}
tasks.jar {
enabled = true // Create library JAR
}
Step 5: Enable Layered JARs for Docker Optimization
Layered JARs separate dependencies by change frequency for better Docker caching:
tasks.bootJar {
enabled = true
layered {
enabled = true
application {
enabled = true
}
dependencies {
enabled = true
}
springBootLoader {
enabled = true
}
snapshot {
enabled = true
}
}
}
Layers (in order):
- •dependencies: Rarely-changing external dependencies
- •spring-boot-loader: Spring Boot loader classes
- •snapshot-dependencies: Snapshot/SNAPSHOT versions (changing)
- •application: Application classes (most frequently changing)
Extract layers in Dockerfile:
FROM eclipse-temurin:21-jre-alpine AS builder WORKDIR /builder COPY build/libs/app.jar . RUN java -Djarmode=layertools -jar app.jar extract FROM eclipse-temurin:21-jre-alpine WORKDIR /app COPY --from=builder /builder/dependencies ./ COPY --from=builder /builder/spring-boot-loader ./ COPY --from=builder /builder/snapshot-dependencies ./ COPY --from=builder /builder/application ./ ENTRYPOINT ["java", "org.springframework.boot.loader.launch.JarLauncher"]
Step 6: Configure Application Properties
Inject build information into application.yml:
tasks.processResources {
filesMatching("application.yml") {
expand(
"version" to project.version,
"name" to project.name,
"timestamp" to System.currentTimeMillis()
)
}
}
In application.yml:
spring:
application:
name: ${name}
info:
app:
name: ${name}
version: ${version}
build-timestamp: ${timestamp}
Step 7: Set Up Spring Boot DevTools for Local Development
Enable hot reload during development:
dependencies {
developmentOnly("org.springframework.boot:spring-boot-devtools")
}
Trigger reload:
- •IntelliJ: Build Project (Cmd/Ctrl + F9)
- •Eclipse: Save file
- •CLI: Run
./gradlew compileJavain separate terminal
Step 8: Configure Actuator for Monitoring
Add actuator endpoints and metrics:
dependencies {
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("io.micrometer:micrometer-registry-prometheus")
}
In application.yml:
management:
endpoints:
web:
exposure:
include: health,info,prometheus,metrics,env
metrics:
export:
prometheus:
enabled: true
endpoint:
health:
show-details: always
Examples
Example 1: Simple Web Service
// build.gradle.kts
plugins {
id("java")
id("org.springframework.boot") version "3.5.5"
id("io.spring.dependency-management") version "1.1.7"
}
group = "com.waitrose"
version = "1.0.0"
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-actuator")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.test {
useJUnitPlatform()
}
tasks.bootJar {
enabled = true
}
tasks.jar {
enabled = false
}
Build and run:
./gradlew bootJar # Create JAR: build/libs/app-1.0.0.jar java -jar build/libs/app-1.0.0.jar # Run JAR
For advanced examples including multi-module setups, layered JARs with Docker, build info injection, and testing configurations, see examples/advanced-examples.md.
Commands Reference
See references/commands-and-troubleshooting.md for complete command reference and troubleshooting guide.
See Also
- •gradle-dependency-management - Manage Spring Boot BOMs and versions
- •gradle-docker-jib - Build Docker images with Jib
- •gradle-testing-setup - Configure Spring Boot testing
- •Spring Boot Gradle Plugin Documentation
- •Spring Boot Reference Guide