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

Gradle多模块项目:如何仅导出Elasticsearch依赖共享子项目功能

问题解决:Gradle多模块项目中仅导出Elasticsearch相关依赖

你可以通过Gradle的api依赖配置实现仅导出Elasticsearch相关依赖,同时保持其他依赖不对外暴露。

核心逻辑

Gradle的implementation依赖仅在当前模块内部生效,不会传递给依赖该模块的下游模块;而api依赖会暴露给所有依赖当前模块的下游模块,刚好匹配你只导出Elasticsearch相关依赖的需求。

修改步骤

在module e的build.gradle.kts中,将Elasticsearch相关的implementation替换为api,其余依赖保持implementation不变:

dependencies {
    // Kotlin - 仅当前模块使用,不导出
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")

    // Starter - 仅当前模块使用,不导出
    implementation("org.springframework.boot:spring-boot-starter")

    // Elasticsearch - 导出给依赖该模块的其他模块
    api("co.elastic.clients:elasticsearch-java:8.12.1")
    api("org.elasticsearch:elasticsearch-geo:8.12.1")
    api("jakarta.json:jakarta.json-api:2.1.1")

    // Jackson - 仅当前模块使用,不导出
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.15.3")
    implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.3")

    // 公共POJO模块 - 若下游模块不需要直接访问core的POJO,保持implementation即可
    implementation(project(":core"))

    // Logging - 仅当前模块使用,不导出
    implementation("io.github.microutils:kotlin-logging-jvm:3.0.5")

    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation(platform("org.junit:junit-bom:5.9.1"))
    testImplementation("org.junit.jupiter:junit-jupiter")
}

效果验证

修改完成后,依赖module e的其他模块(如a、b、c)就能直接访问Elasticsearch的模型类,同时不会获取到module e内部使用的Kotlin反射、Jackson等依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:56:10