【问题标题】:GeoLite2 database gets corrupt when added to jarGeoLite2 数据库在添加到 jar 时会损坏
【发布时间】:2016-03-30 17:14:06
【问题描述】:

我正在尝试在我的 Java 应用程序中包含一个 Maxmind 数据库。我使用的数据库是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 文件添加到包中,然后将其解压缩,然后加载数据库,但这也不起作用。

谢谢

【问题讨论】:

    标签: java maxmind


    【解决方案1】:

    你没有提到你是如何创建 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>
    

    【讨论】:

    • 完成了这项工作。我不得不将版本更改为 2.6,但它可以工作。谢谢
    • 我有同样的错误信息,但是是 Ant 的 jar 任务。那也过滤吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多