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

Gradle多项目构建时合并reference.conf配置文件的方案咨询

解决Gradle多项目构建Fat Jar时合并reference.conf的问题

项目结构

app
|-reference.conf
lib1
|  |- reference.conf
lib2
   |-reference.conf
   lib3
      |- reference.conf

可用插件方案

社区有专门处理Typesafe Config合并的Gradle插件gradle-typesafe-config-plugin,它支持按项目层级自动合并reference.conf,并能控制合并顺序保证底层配置优先。配合Shadow插件构建Fat Jar的配置示例如下:

plugins {
    id 'com.github.johnrengelman.shadow' version '8.1.1'
    id 'net.ltgt.gradle.typesafe-config' version '1.1.0'
}

typesafeConfig {
    merge {
        // 按项目层级深度排序,底层项目配置后写入(覆盖顶层)
        order = { project -> project.path.split(':').size() }
        include 'reference.conf'
    }
}

shadowJar {
    from typesafeConfig.merge.outputFile
    exclude 'reference.conf' // 排除所有原配置文件
}

自定义实现方案

如果不想依赖第三方插件,可通过自定义Gradle任务实现需求:

步骤1:创建合并配置文件的任务

在根项目build.gradle中添加任务,收集所有reference.conf并按层级排序合并:

task mergeReferenceConf(type: Copy) {
    // 收集所有存在的reference.conf文件
    def confFiles = allprojects.collect { project ->
        project.file('src/main/resources/reference.conf')
    }.findAll { it.exists() }

    // 按项目层级深度排序:深度越大(越底层)越靠后,保证底层配置覆盖顶层
    confFiles.sort { file ->
        def project = allprojects.find { it.file('src/main/resources/reference.conf') == file }
        project.path.split(':').size()
    }

    // 合并为单个reference.conf到临时目录
    into "${buildDir}/tmp/mergedConf"
    from confFiles
    eachFile { file ->
        file.path = 'reference.conf'
    }
    duplicatesStrategy = DuplicatesStrategy.INCLUDE
}

步骤2:修改Fat Jar任务(以Shadow为例)

让Shadow Jar使用合并后的配置文件,排除原有配置:

plugins {
    id 'com.github.johnrengelman.shadow' version '8.1.1'
}

shadowJar {
    dependsOn mergeReferenceConf
    from mergeReferenceConf.outputs.files
    exclude 'reference.conf'
    // 其他Fat Jar相关配置...
}

关键说明

  • 排序逻辑:通过项目路径的层级深度判断优先级,底层项目配置会被追加到合并文件末尾。由于HOCON语法中后出现的配置会覆盖先出现的同名项,以此保证底层库配置优先生效。
  • 文件处理:非.conf格式的文件会按默认规则打包,仅**/*.conf文件会被合并为单个reference.conf。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:32:54