Appearance
构建环境隔离
通过 Profile 区分环境
kotlin
// build.gradle.kts
val profile = project.findProperty("profile") as String? ?: "dev"
sourceSets {
main {
resources {
srcDir("src/main/resources")
srcDir("src/main/resources-$profile")
}
}
}bash
./gradlew build -Pprofile=prod通过环境变量区分
kotlin
val isCI = System.getenv("CI") != null
val buildEnv = System.getenv("BUILD_ENV") ?: "local"
tasks.named<Test>("test") {
if (isCI) {
maxParallelForks = 4
// CI 环境不显示测试输出(减少日志)
testLogging { showStandardStreams = false }
} else {
maxParallelForks = 1
testLogging { showStandardStreams = true }
}
}隔离敏感配置
properties
# ~/.gradle/gradle.properties(用户级,不提交 Git)
prod.db.password=secret-password
signing.key=gpg-key-content
maven.publish.password=nexus-passwordkotlin
// build.gradle.kts
val prodDbPassword = providers.gradleProperty("prod.db.password")
tasks.register("deployProd") {
doLast {
require(prodDbPassword.isPresent) { "prod.db.password 未配置!" }
// 使用密码部署
}
}Docker 化构建
dockerfile
# Dockerfile.build(用于 CI 构建环境)
FROM eclipse-temurin:17-jdk AS builder
WORKDIR /workspace
COPY gradlew .
COPY gradle gradle
COPY build.gradle.kts settings.gradle.kts gradle.properties ./
COPY src src
# 构建(利用 Docker 层缓存)
RUN ./gradlew build --no-daemon -x test
FROM eclipse-temurin:17-jre
WORKDIR /app
COPY --from=builder /workspace/build/libs/*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]下一步
至此你已完成所有核心章节的学习!