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

如何将含Gradle插件的多模块项目调整为可Maven发布结构?

解决方案:调整项目结构以支持本地运行与Maven统一发布

问题背景

需要整合以下组件:

  • 可访问共享Kotlin库的Gradle插件
  • 共享Kotlin库(可被插件及所有业务库模块使用)
  • 可同时访问Gradle插件与共享Kotlin库的Android库模块(如module1、module2)

现有问题

当前使用复合构建(includeBuild("gradle-plugin"))实现本地依赖,虽能正常本地运行,但根项目的publishToMavenLocal/publish任务无法识别gradle-plugin子构建内的plugin和shared模块,无法统一发布所有模块到Maven仓库。

现有项目结构

根目录/
├── settings.gradle.kts
├── gradle-plugin/
│   ├── settings.gradle.kts
│   ├── plugin/
│   └── shared/
└── library/
    ├── module1/
    └── module2/

根目录settings.gradle.kts配置:

includeBuild("gradle-plugin")
include("library/module1")
include("library/module2")

gradle-plugin/settings.gradle.kts配置:

include("plugin")
include("shared")

调整方案

将gradle-plugin下的子模块改为根项目的直接子模块,取消复合构建模式,具体步骤如下:

1. 调整项目结构

删除gradle-plugin目录下的settings.gradle.kts,将plugin和shared作为根项目的子模块管理,结构变为:

根目录/
├── settings.gradle.kts
├── gradle-plugin/
│   ├── plugin/
│   └── shared/
└── library/
    ├── module1/
    └── module2/

2. 修改根目录settings.gradle.kts

替换原配置为直接包含所有子模块:

include("gradle-plugin:plugin")
include("gradle-plugin:shared")
include("library:module1")
include("library:module2")

3. 配置模块间依赖

  • Gradle插件模块依赖共享库:在gradle-plugin/plugin/build.gradle.kts中添加项目依赖:

    dependencies {
        implementation(project(":gradle-plugin:shared"))
        // 保留原Gradle插件依赖,如gradleApi()、kotlin("jvm")等
    }
    
  • 业务库模块依赖共享库:以library/module1/build.gradle.kts为例:

    dependencies {
        implementation(project(":gradle-plugin:shared"))
        // 其他业务依赖
    }
    
  • 业务库模块使用Gradle插件:在业务库模块的build.gradle.kts中直接通过插件ID引入(需确保插件模块已配置gradlePlugin块注册ID):

    plugins {
        id("com.example.your-plugin-id") // 替换为你的插件ID
        id("com.android.library")
        kotlin("android")
    }
    

    插件模块的gradlePlugin配置示例(gradle-plugin/plugin/build.gradle.kts):

    plugins {
        `java-gradle-plugin`
        kotlin("jvm")
    }
    
    gradlePlugin {
        plugins {
            create("yourPlugin") {
                id = "com.example.your-plugin-id"
                implementationClass = "com.example.YourPluginImplementation"
            }
        }
    }
    

效果验证

  • 本地运行:所有模块通过project()依赖实现本地引用,编译、运行、调试体验与原复合构建一致。
  • 统一发布:执行根项目的publishToMavenLocal或publish任务,Gradle会自动触发所有子模块的发布流程,包括plugin、shared、module1、module2,所有模块都会被发布到目标Maven仓库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:53:21