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

使用Gradle构建Jar时GeoLite2数据库损坏问题求助

解决Gradle构建prod包后GeoLite2 City数据库无法读取的问题

问题核心原因

Gradle的processResources任务默认会对资源文件做文本过滤(比如替换占位符),二进制格式的.mmdb文件被过滤后结构会损坏,导致MaxMind无法识别数据库的元数据标记,进而触发InvalidDatabaseException。

正确的Gradle配置

你之前的配置只指定了资源来源,但没禁用过滤,修改build.gradle如下:

processResources {
    // 对所有.mmdb文件禁用过滤
    filesMatching('**/*.mmdb') {
        filtering.enabled = false
    }
    // 若你的mmdb在特定目录,可单独配置该目录下的文件
    from('src/main/resources/data') {
        include '**/*.mmdb'
        filtering.enabled = false
    }
}

额外检查点

  1. 资源读取方式:确保代码用getResourceAsStream读取数据库文件,不要直接用文件路径访问(jar包内资源无法通过File类读取):
InputStream dbStream = getClass().getResourceAsStream("/data/GeoLite2-City.mmdb");
DatabaseReader reader = new DatabaseReader.Builder(dbStream).build();
  1. 验证构建产物:构建完成后解压jar包,检查BOOT-INF/classes/data/下的.mmdb文件大小是否和本地原文件一致,也可以用MaxMind官方工具验证文件有效性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:25:29