Appearance
构建多模块项目
项目结构
company-platform/
├── settings.gradle.kts
├── build.gradle.kts ← 根项目
├── gradle/
│ ├── libs.versions.toml
│ └── wrapper/
├── buildSrc/ ← 共享构建逻辑
│ ├── build.gradle.kts
│ └── src/main/kotlin/
│ ├── java-conventions.gradle.kts
│ └── spring-conventions.gradle.kts
├── common/ ← 公共库
│ └── build.gradle.kts
├── domain/ ← 领域模型
│ └── build.gradle.kts
├── service/
│ ├── user-service/ ← 用户服务
│ │ └── build.gradle.kts
│ └── order-service/ ← 订单服务
│ └── build.gradle.kts
└── gateway/ ← API 网关
└── build.gradle.ktssettings.gradle.kts
kotlin
rootProject.name = "company-platform"
pluginManagement {
includeBuild("buildSrc")
repositories {
gradlePluginPortal()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
}
}
include(
"common",
"domain",
"service:user-service",
"service:order-service",
"gateway"
)buildSrc/src/main/kotlin/java-conventions.gradle.kts
kotlin
plugins {
java
checkstyle
jacoco
}
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
tasks.withType<JavaCompile> {
options.encoding = "UTF-8"
options.compilerArgs.add("-parameters")
}
tasks.withType<Test> {
useJUnitPlatform()
testLogging { events("passed", "failed") }
}
checkstyle {
toolVersion = "10.12.5"
configFile = rootProject.file("config/checkstyle.xml")
}
tasks.named("check") {
dependsOn(tasks.named("jacocoTestReport"))
}buildSrc/src/main/kotlin/spring-conventions.gradle.kts
kotlin
plugins {
id("java-conventions")
id("org.springframework.boot")
id("io.spring.dependency-management")
}
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
dependencies {
"implementation"(platform(libs.findLibrary("spring-boot-bom").get()))
"testImplementation"(libs.findLibrary("spring-boot-test").get())
}各模块 build.gradle.kts
kotlin
// common/build.gradle.kts
plugins {
id("java-conventions")
`java-library`
}
dependencies {
api(libs.guava)
api(libs.slf4j.api)
implementation(libs.jackson.databind)
}kotlin
// domain/build.gradle.kts
plugins {
id("java-conventions")
`java-library`
}
dependencies {
api(project(":common"))
compileOnly(libs.lombok)
annotationProcessor(libs.lombok)
}kotlin
// service/user-service/build.gradle.kts
plugins {
id("spring-conventions")
}
dependencies {
implementation(project(":domain"))
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
runtimeOnly("com.mysql:mysql-connector-j")
}根项目 build.gradle.kts
kotlin
// 根项目不声明任何插件
// 仅提供通用任务,如生成版本报告
tasks.register("printVersions") {
group = "help"
doLast {
subprojects.forEach { p ->
println("${p.name}: ${p.version}")
}
}
}构建命令
bash
# 构建所有模块
./gradlew build --parallel
# 只构建用户服务
./gradlew :service:user-service:build
# 测试所有模块
./gradlew test --parallel
# 查看所有模块
./gradlew projects
# 查看模块间依赖
./gradlew :service:user-service:dependencies --configuration compileClasspath