Maven打包jar后,GeoLite2数据库会损坏

博主在Java应用中尝试包含Maxmind数据库,删除数据库文件时项目可正常运行,但编译创建含数据库的jar文件后无法读取,解压发现文件大小改变。解决方案是Maven打包时禁用二进制文件的资源过滤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

我正在尝试在我的Java应用程序中包含一个Maxmind数据库。我使用的数据库是 GeoLite2-City.mmdb 的最新版本。

当我删除数据库文件时进入项目( src / main / resources / GeoLite2-City.mmdb ),我运行项目,我可以通过 com使用数据库。 maxmind.geoip2.DatabaseReader 并执行IP地址的查找。

然而,一旦我编译项目并创建一个包含数据库的jar文件,我就是无法读取文件中的数据库,我得到异常:

com.maxmind.db.InvalidDatabaseException:找不到MaxMind数据库元数据此文件中的标记(< InputStream>)。这是一个有效的MaxMind数据库文件吗?

解压缩.jar文件并查看mmdb文件我可以看到文件的大小已经从38Mb变为59Mb,我猜这是抛出异常的原因。

有没有人知道在.jar中打包这个文件的方法这样它可用吗?我已经尝试将原始.gz文件添加到包中,然后解压缩然后加载数据库,但这也不起作用。

解决方案

Maven打包时,则需要禁用二进制文件的资源过滤

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.7</version>
    <configuration>
      ...
      <nonFilteredFileExtensions>
        <nonFilteredFileExtension>mmdb</nonFilteredFileExtension>
      </nonFilteredFileExtensions>
      ...
    </configuration>
  </plugin>

这篇关于添加到jar后,GeoLite2数据库会损坏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值