java - GeoLite2 数据库在添加到 jar 时损坏

标签 java maxmind

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

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

但是,一旦我编译项目并创建包含数据库的 jar 文件,我就无法读取文件中的数据库,出现异常:

com.maxmind.db.InvalidDatabaseException: Could not find a MaxMind DB metadata marker in this file (<InputStream>). Is this a valid MaxMind DB file?

解压缩 .jar 文件并查看 mmdb 文件,我可以看到文件的大小已从 38Mb 更改为 59Mb,我猜测这就是引发异常的原因。

有谁知道如何将此文件打包到 .jar 中以便可以使用吗?我尝试将原始 .gz 文件添加到包中,然后解压缩,然后加载数据库,但这也不起作用。

谢谢

最佳答案

您没有提及如何创建 JAR,但假设您使用的是 Maven,则需要 disable resource filtering对于二进制文件,例如:

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

关于java - GeoLite2 数据库在添加到 jar 时损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34449733/

相关文章:

java - 如何从 MaxMind 的 GeoLite2 City 本地 mmdb 和关联的 Java API 获取电话区号?

sitecore - 在 Sitecore 中根据访问者的 GEOIP 覆盖上下文语言?

c - GeoLiteCityv6.dat 里面有城市和地区数据吗?

node.js - 从nodejs中包含重音字符的文件中读取

java - 我的 bundle 正在使用哪个版本的软件包?

java - 如何使用 rxjava 和 rxandroid 在 imageview 上设置可绘制对象

java - 通信链路故障,本地主机上的 MySQL 数据库未连接

java - 静态与静态Java 中的动态绑定(bind)

java - 如何将文本输出写入文件?