Appearance
buildSrc
buildSrc 是一个特殊目录,Gradle 会自动将其编译并加入构建脚本的 classpath,用于共享构建逻辑(自定义 Task、插件、版本常量等)。
目录结构
project-root/
├── buildSrc/
│ ├── build.gradle.kts ← buildSrc 自身的构建脚本
│ ├── settings.gradle.kts ← 可选
│ └── src/
│ └── main/
│ └── kotlin/
│ ├── Versions.kt ← 版本常量
│ ├── Dependencies.kt ← 依赖常量
│ └── java-conventions.gradle.kts ← 约定插件
├── core/
│ └── build.gradle.kts
└── web/
└── build.gradle.ktsbuildSrc/build.gradle.kts
kotlin
// buildSrc/build.gradle.kts
plugins {
`kotlin-dsl` // 支持编写 Kotlin DSL 插件
}
repositories {
mavenCentral()
gradlePluginPortal()
}
dependencies {
// 在约定插件中使用的 Gradle 插件
implementation("org.springframework.boot:spring-boot-gradle-plugin:3.2.0")
implementation("io.spring.gradle:dependency-management-plugin:1.1.4")
}版本常量
kotlin
// buildSrc/src/main/kotlin/Versions.kt
object Versions {
const val JAVA = 17
const val SPRING_BOOT = "3.2.0"
const val KOTLIN = "1.9.22"
const val JUNIT = "5.10.1"
const val GUAVA = "32.0.1-jre"
const val LOMBOK = "1.18.30"
}
object Libs {
const val SPRING_BOOT_WEB =
"org.springframework.boot:spring-boot-starter-web:${Versions.SPRING_BOOT}"
const val SPRING_BOOT_TEST =
"org.springframework.boot:spring-boot-starter-test:${Versions.SPRING_BOOT}"
const val JUNIT_JUPITER =
"org.junit.jupiter:junit-jupiter:${Versions.JUNIT}"
const val GUAVA =
"com.google.guava:guava:${Versions.GUAVA}"
const val LOMBOK =
"org.projectlombok:lombok:${Versions.LOMBOK}"
}约定插件(Convention Plugin)
kotlin
// buildSrc/src/main/kotlin/java-conventions.gradle.kts
plugins {
java
checkstyle
jacoco
}
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
tasks.withType<JavaCompile> {
options.encoding = "UTF-8"
}
tasks.withType<Test> {
useJUnitPlatform()
maxHeapSize = "1g"
}
// 代码检查
checkstyle {
toolVersion = "10.12.5"
configFile = rootProject.file("config/checkstyle.xml")
}
// 覆盖率
jacoco {
toolVersion = "0.8.11"
}
dependencies {
"testImplementation"("org.junit.jupiter:junit-jupiter:${Versions.JUNIT}")
"testRuntimeOnly"("org.junit.platform:junit-platform-launcher")
}kotlin
// buildSrc/src/main/kotlin/spring-boot-conventions.gradle.kts
plugins {
id("java-conventions") // 继承 java 约定
id("org.springframework.boot")
id("io.spring.dependency-management")
}
dependencies {
"implementation"(platform("org.springframework.boot:spring-boot-dependencies:${Versions.SPRING_BOOT}"))
"testImplementation"("org.springframework.boot:spring-boot-starter-test")
}在子项目中使用
kotlin
// web/build.gradle.kts
plugins {
id("spring-boot-conventions") // 应用约定插件,获得所有标准配置
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
}buildSrc vs 版本目录
| buildSrc | 版本目录 | |
|---|---|---|
| 主要用途 | 共享构建逻辑、约定插件 | 集中管理版本号 |
| 类型安全 | 是 | 是(生成访问器) |
| IDE 支持 | 完整 | 完整 |
| 修改后 | 触发重新配置 | 触发重新配置 |
| 推荐组合 | ✅ 两者结合使用 | ✅ 两者结合使用 |