gradle-spring-boot-integration
npx skills add https://github.com/dawiddutoit/custom-claude --skill gradle-spring-boot-integration
Agent 安装分布
Skill 文档
Works with build.gradle.kts, application.yml, and Dockerfile configurations.
Gradle Spring Boot Integration
Table of Contents
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 taskio.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 /builder/dependencies ./
COPY /builder/spring-boot-loader ./
COPY /builder/snapshot-dependencies ./
COPY /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