You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven转Gradle:多模块项目构建逻辑复用配置咨询

Gradle多模块Spring项目:统一配置与集中依赖管理解决方案

一、先搞定Version Catalog的全局配置

首先在项目根目录创建gradle/libs.versions.toml,集中管理所有版本和依赖:

[versions]
kotlin = "1.9.20"
springBoot = "3.2.0"
java = "17"

[libraries]
kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }
kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" }
spring-boot-starter-web = { module = "org.springframework.boot:spring-boot-starter-web", version.ref = "springBoot" }

[plugins]
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
spring-boot = { id = "org.springframework.boot", version.ref = "springBoot" }
io.spring.dependency-management = { id = "io.spring.dependency-management", version = "1.1.4" }

要让buildSrc能访问这个Catalog,需要在buildSrc/settings.gradle.kts中配置:

dependencyResolutionManagement {
    versionCatalogs {
        create("libs") {
            from(files("../gradle/libs.versions.toml"))
        }
    }
}

同时在buildSrc/build.gradle.kts中启用Kotlin DSL支持:

plugins {
    `kotlin-dsl`
}

repositories {
    mavenCentral()
}

这样buildSrc里就能通过libs变量直接引用Catalog中的版本和依赖了。

二、编写约定插件统一子项目配置

在buildSrc/src/main/kotlin下创建约定插件类,比如com.example.conventions.JavaKotlinConventionPlugin.kt:

package com.example.conventions

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.libs
import org.gradle.api.JavaVersion

class JavaKotlinConventionPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        project.run {
            // 应用基础插件
            plugins.apply("java")
            plugins.apply(libs.plugins.kotlin.jvm.get().pluginId)
            plugins.apply(libs.plugins.io.spring.dependency-management.get().pluginId)

            // 统一Java版本
            configure<JavaPluginExtension> {
                sourceCompatibility = JavaVersion.toVersion(libs.versions.java.get())
                targetCompatibility = JavaVersion.toVersion(libs.versions.java.get())
            }

            // 统一添加Kotlin核心依赖
            dependencies {
                implementation(libs.kotlin.stdlib)
                implementation(libs.kotlin.reflect)
            }
        }
    }
}

然后在buildSrc/src/main/resources/META-INF/gradle-plugins/com.example.conventions.java-kotlin.properties中注册插件:

implementation-class=com.example.conventions.JavaKotlinConventionPlugin

三、子项目快速应用统一配置

在根项目的build.gradle.kts中,让所有子项目自动应用约定插件:

subprojects {
    plugins.apply("com.example.conventions.java-kotlin")

    // 按需给特定子项目添加Spring Boot插件
    if (name in listOf("web-module", "service-core")) {
        plugins.apply(libs.plugins.spring.boot.get().pluginId)
    }
}

如果个别子项目有特殊需求,也可以在自己的build.gradle.kts中单独应用:

plugins {
    id("com.example.conventions.java-kotlin")
    id("org.springframework.boot")
}

关键注意点

  • Gradle 7.4及以上版本才支持在buildSrc中直接引用根目录的Version Catalog,确保你的Gradle版本达标。
  • 约定插件里的所有版本和依赖都从Catalog读取,彻底避免硬编码,后续升级只需修改libs.versions.toml。
  • 若不需要buildSrc,也可以用included builds实现类似效果,但buildSrc对于轻量约定场景更简洁。

内容的提问来源于stack exchange,提问作者Dominic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 09:23:09