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

Gradle多模块项目如何用单条命令发布所有子项目,能否自定义任务?

直接使用内置命令实现单条发布

你无需额外配置,直接在项目根目录执行以下命令即可一次性发布所有子项目:

  • 发布到你配置的远端Maven仓库:
    ./gradlew publish(Windows系统使用 gradlew.bat publish)
  • 发布到本地Maven仓库:
    ./gradlew publishToMavenLocal(Windows系统使用 gradlew.bat publishToMavenLocal)

原理是maven-publish插件会为每个配置了发布规则的子项目自动生成同名的publish任务,在根目录执行该任务时Gradle会自动聚合执行所有子项目的对应发布任务。

自定义任务实现发布需求

完全支持自定义任务,你可以在根项目的build.gradle.kts中添加如下配置,创建专属的聚合发布任务:

tasks.register("publishAllSubprojects") {
    // 任务归类到publishing分组,方便在任务列表中查找
    group = "publishing"
    description = "聚合发布所有子项目到配置的Maven远端仓库"
    // 依赖所有子项目的publish任务
    dependsOn(subprojects.map { sub -> sub.tasks.named("publish") })
}

如果需要自定义发布到本地Maven的任务,只需要将依赖的任务改为publishToMavenLocal即可:

tasks.register("publishAllToMavenLocal") {
    group = "publishing"
    description = "聚合发布所有子项目到本地Maven仓库"
    dependsOn(subprojects.map { sub -> sub.tasks.named("publishToMavenLocal") })
}

如果有部分子项目不需要参与发布,也可以添加过滤规则,比如跳过名称包含test的子项目:

dependsOn(subprojects
    .filter { !it.name.contains("test") }
    .map { sub -> sub.tasks.named("publish") }
)

注意事项

请确认你的subprojects配置块中已经提前应用了maven-publish插件,否则子项目会找不到发布任务:

subprojects {
    // 必须先应用maven-publish插件,后续的publishing配置才会生效
    apply(plugin = "maven-publish")
    // 你原来的publishing配置块
    publishing {
        publications.create<MavenPublication>("mavenJava") {
            val subprojectJarName = tasks.jar.get().archiveBaseName.get()
            artifactId = if (subprojectJarName == "vader") "vader" else "vader-$subprojectJarName"
            from(components["java"])
            pom {
                name.set(artifactId)
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Gopal S Akshintala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 04:30:03