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

如何配置多模块Gradle项目,发布到本地Maven仓库后全模块可用?

解决Gradle多模块库发布后只能访问主模块的问题

1. 先把模块间的依赖配置对

得保证ModuleA已经正确声明了对ModuleB、ModuleC的依赖,同时ModuleC也要声明对ModuleD的依赖,这样Gradle才能识别清楚模块间的层级关系。

在ModuleA的build.gradle(或build.gradle.kts)里加这些配置:

// Groovy写法
dependencies {
    implementation project(':ModuleB')
    implementation project(':ModuleC')
}
// Kotlin写法
dependencies {
    implementation(project(":ModuleB"))
    implementation(project(":ModuleC"))
}

ModuleC的build.gradle里也要加对ModuleD的依赖:

dependencies {
    implementation project(':ModuleD')
}
dependencies {
    implementation(project(":ModuleD"))
}

2. 统一配置发布插件和模块信息

首先在根项目的settings.gradle(或settings.gradle.kts)里确保所有模块都被包含进来:

// Groovy写法
include ':ModuleA', ':ModuleB', ':ModuleC', ':ModuleD'
// Kotlin写法
include(":ModuleA", ":ModuleB", ":ModuleC", ":ModuleD")

然后在根项目的build.gradle里统一配置Maven发布插件,不用每个模块单独写,省事儿:

// Groovy写法,根build.gradle
subprojects {
    apply plugin: 'java-library'
    apply plugin: 'maven-publish'

    group = '你的组名' // 比如com.example
    version = '1.0.0' // 自己填版本号

    publishing {
        publications {
            maven(MavenPublication) {
                from components.java
            }
        }
    }
}
// Kotlin写法,根build.gradle.kts
subprojects {
    apply(plugin = "java-library")
    apply(plugin = "maven-publish")

    group = "你的组名"
    version = "1.0.0"

    publishing {
        publications {
            create<MavenPublication>("maven") {
                from(components["java"])
            }
        }
    }
}

3. 让子模块依赖自动传递到主模块的POM里

当ModuleA依赖子模块时,Gradle默认会在ModuleA的POM文件里加上这些子模块的依赖条目,但得保证所有子模块都被发布到本地Maven仓库。执行publishToMavenLocal的时候,所有子模块都会一起发布,这样消费项目引入ModuleA时,会自动拉取ModuleB、ModuleC、ModuleD的依赖。

如果想让子模块的公开API能在消费项目里直接用,别用implementation,换成api来声明依赖,比如ModuleA里这么写:

dependencies {
    api project(':ModuleB')
    api project(':ModuleC')
}

这样消费项目不用单独引入子模块,就能直接用它们的类。

4. 消费项目的配置

消费项目只需要引入ModuleA的依赖就行,因为ModuleA的POM已经包含了所有子模块的依赖,Gradle会自动解析并把这些子模块拉进来:

// Groovy写法,消费项目build.gradle
dependencies {
    implementation '你的组名:ModuleA:1.0.0'
}
// Kotlin写法,消费项目build.gradle.kts
dependencies {
    implementation("你的组名:ModuleA:1.0.0")
}

5. 验证一下发布结果

执行完publishToMavenLocal后,去本地Maven仓库(默认是~/.m2/repository)里看看每个模块的pom.xml,确认ModuleA的pom里有ModuleB和ModuleC的依赖,ModuleC的pom里有ModuleD的依赖。这样消费项目就能通过引入ModuleA,直接用所有子模块的类和外部依赖了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:25:25