:globe_with_meridians: [中文简体](README_zh.md) | [English](README.md)

# ip2region xdb java 生成实现

# 编译安装
通过 maven 来编译可运行 jar 程序：
```bash
# cd 到 maker/java 根目录
mvn clean compile package
```

然会会在当前目录的 target 目录下得到一个 ip2region-maker-{version}.jar 的打包文件。

# 数据生成

通过 `java -jar ip2region-maker-{version}.jar` 来生成 xdb 二进制文件：
```bash
➜  java git:(master) java -jar target/ip2region-maker-3.0.0.jar 
ip2region xdb maker
java -jar ip2region-maker-{version}.jar [command options]
options:
 --src string           source ip text file path
 --dst string           destination binary xdb file path
 --version string       IP version, options: ipv4/ipv6, specify this flag so you don't get confused
 --field-list string    field index list imploded with ',' eg: 0,1,2,3-6,7
 --log-level string     set the log level, options: debug/info/warn/error
```

例如，通过默认的 data/ipv4_source.txt 原始数据，在当前目录生成一个 IPv4 的 ip2region_v4.xdb 二进制文件：
```bash
java -jar target/ip2region-maker-3.0.0.jar --src=../../data/ipv4_source.txt --dst=./ip2region_v4.xdb --version=ipv4
...
2025-09-13 00:33:06 INFO  org.lionsoul.ip2region.xdb.Maker write done, dataBlocks: 13827, indexBlocks: (683843, 720464), indexPtr: (955933, 11042415)
2025-09-13 00:33:06 INFO  org.lionsoul.ip2region.MakerApp Done, elapsed: 2 s
```

例如，通过默认的 data/ipv6_source.txt 有原始据，在当前目录生成一个 IPv6 的 ip2region_v6.xdb 二进制文件：
```bash
java -jar target/ip2region-maker-3.0.0.jar --src=../../data/ipv6_source.txt --dst=./ip2region_v6.xdb --version=ipv6
...
2025-09-13 00:35:34 INFO  org.lionsoul.ip2region.xdb.Maker write done, dataBlocks: 120446, indexBlocks: (16789611, 16855074), indexPtr: (6585371, 647078145)
2025-09-13 00:35:34 INFO  org.lionsoul.ip2region.MakerApp Done, elapsed: 67 s
```

生成过程中数据字段自定义请参考 [xdb-文件生成#自定义数据字段](https://ip2region.net/doc/data/xdb_make#field-list)

# 数据 查询/bench 测试

已经完成开发的 [binding](../../binding/) 都有查询和 bench 测试程序以及使用文档，你可以使用你熟悉的语言的 searcher 进行查询测试或者bench测试，来确认数据的正确性和完整性。
