Skip to content

Spring Boot 插件

Spring Boot Gradle 插件简化了 Spring Boot 应用的构建和打包。

基本配置

kotlin
plugins {
    java
    id("org.springframework.boot") version "3.2.0"
    id("io.spring.dependency-management") version "1.1.4"
}

group = "com.example"
version = "0.0.1-SNAPSHOT"

java {
    sourceCompatibility = JavaVersion.VERSION_17
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-security")
    runtimeOnly("com.mysql:mysql-connector-j")
    compileOnly("org.projectlombok:lombok")
    annotationProcessor("org.projectlombok:lombok")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
}

tasks.named<Test>("test") {
    useJUnitPlatform()
}

常用任务

bash
# 构建可执行 JAR
./gradlew bootJar

# 运行 Spring Boot 应用
./gradlew bootRun

# 构建 WAR
./gradlew bootWar

# 生成构建信息(写入 build-info.properties)
./gradlew bootBuildInfo

bootJar 配置

kotlin
tasks.named<org.springframework.boot.gradle.tasks.bundling.BootJar>("bootJar") {
    archiveFileName.set("app.jar")
    
    // 主类(通常自动检测)
    mainClass.set("com.example.Application")
    
    // 分层 JAR(优化 Docker 镜像构建)
    layered {
        enabled.set(true)
    }
}

bootRun 配置

kotlin
tasks.named<org.springframework.boot.gradle.tasks.run.BootRun>("bootRun") {
    // 激活 dev profile
    args("--spring.profiles.active=dev")
    
    // JVM 参数
    jvmArgs("-Xmx512m", "-Dfile.encoding=UTF-8")
    
    // 环境变量
    environment("DB_HOST", "localhost")
    
    // 热重载(配合 DevTools)
    sourceResources(sourceSets["main"])
}

dependency-management 配置

kotlin
dependencyManagement {
    imports {
        // 导入 Spring Cloud BOM
        mavenBom("org.springframework.cloud:spring-cloud-dependencies:2023.0.0")
    }
    
    dependencies {
        // 单独覆盖某个版本
        dependency("com.google.guava:guava:32.0.1-jre")
    }
}

Docker 分层构建

dockerfile
# Dockerfile(利用 Spring Boot 分层 JAR 优化)
FROM eclipse-temurin:17-jre as builder
WORKDIR /app
COPY build/libs/*.jar app.jar
RUN java -Djarmode=layertools -jar app.jar extract

FROM eclipse-temurin:17-jre
WORKDIR /app
COPY --from=builder /app/dependencies/ ./
COPY --from=builder /app/spring-boot-loader/ ./
COPY --from=builder /app/snapshot-dependencies/ ./
COPY --from=builder /app/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]

下一步