Gradle多模块项目中切换项目依赖与构件依赖的优化方案
解决Gradle多模块依赖开发/生产一键切换的方案
方案一:通过Gradle属性控制依赖切换
这是最简洁的实现方式,无需复杂配置,仅通过一个属性即可在两种依赖模式间切换。
步骤1:配置默认属性
在项目根目录的gradle.properties文件中添加默认配置:
# 默认开启项目依赖(开发模式) useProjectDependencies=true # 集中管理生产构件版本(可选,方便后续维护) serverVersion=0.1.3 projectModelsVersion=0.0.16 baseModelsVersion=0.0.22
步骤2:编写依赖逻辑
在需要切换依赖的模块的build.gradle.kts中,替换原有的依赖配置为以下代码:
// 映射模块路径与生产构件坐标 val moduleDependencyMap = mapOf( ":server" to "cz.simplecoin.server:${project.property("serverVersion")}", ":project-models" to "cz.simplecoin:project-models:${project.property("projectModelsVersion")}", ":base-models" to "cz.simplecoin:base-models:${project.property("baseModelsVersion")}" ) // 根据属性自动选择依赖方式 moduleDependencyMap.forEach { (modulePath, artifactCoords) -> if (project.findProperty("useProjectDependencies") == "true") { implementation(project(modulePath)) } else { implementation(artifactCoords) } }
切换方式
- 开发阶段:默认使用项目依赖,IDEA会自动关联源码并按需编译,无需额外操作。
- 生产构建:执行构建命令时添加参数切换为构件依赖:
./gradlew build -PuseProjectDependencies=false
方案二:利用Gradle构建变体(适合复杂场景)
如果项目需要更精细化的构建区分,可以通过构建变体定义开发/生产两套依赖:
步骤1:定义构建变体
在模块的build.gradle.kts中添加变体配置:
plugins { `java-library` } // 定义开发和生产变体 val dev by sourceSets.creating val prod by sourceSets.creating // 配置依赖 dependencies { // 开发变体使用项目依赖 dev.implementation(project(":server")) dev.implementation(project(":project-models")) dev.implementation(project(":base-models")) // 生产变体使用构件依赖 prod.implementation("cz.simplecoin.server:0.1.3") prod.implementation("cz.simplecoin:project-models:0.0.16") prod.implementation("cz.simplecoin:base-models:0.0.22") // 主源码集默认依赖开发变体 implementation(dev.output) } // 绑定构建任务到变体 tasks.register<Jar>("devJar") { from(dev.output) } tasks.register<Jar>("prodJar") { from(prod.output) }
切换方式
- 构建开发包:
./gradlew devJar - 构建生产包:
./gradlew prodJar
对于小型项目,方案一的属性控制方式足够简洁,且无需额外维护变体任务,更推荐使用。
内容的提问来源于stack exchange,提问作者Pavel Niedoba
相关产品推荐
相关产品推荐

