如何为GeoTools项目确定正确Java 11模块名及解决Envelope类缺失问题?
解决GeoTools Java 11模块系统迁移的依赖问题
1. 如何查找GeoTools的Java模块名
由于GeoTools早期版本未提供显式的module-info.java,属于自动模块,获取正确模块名可通过以下几种实用方式:
- 查看JAR的MANIFEST.MF:打开GeoTools依赖JAR文件,查看
META-INF/MANIFEST.MF中的Automatic-Module-Name字段,这是官方指定的模块名(如果存在)。 - 从JAR文件名推导:若没有
Automatic-Module-Name,自动模块名由JAR文件名生成——去掉版本号,将连字符、下划线替换为点。例如gt-cql-28.2.jar对应的自动模块名是gt.cql。 - 使用jdeps工具分析:通过JDK自带的
jdeps命令查看模块信息,执行:
输出结果中会显示该JAR对应的模块名。jdeps --list-deps path/to/gt-cql.jar
针对你遇到的gt-cql模块无法解析的问题,大概率是模块名使用错误,建议用上述方法确认后替换,比如实际模块名可能是gt.cql而非org.geotools.cql。
2. 解决org.locationtech.jts.geom.Envelope类缺失问题
org.locationtech.jts.geom.Envelope属于JTS Topology Suite库,该库已提供显式模块支持,对应的模块名为org.locationtech.jts。你只需在module-info.java中添加:
requires org.locationtech.jts;
同时确保你的Maven/Gradle依赖中已引入JTS相关包(通常GeoTools依赖会间接引入,若缺失需手动添加)。
额外提示
GeoTools官方Java 11迁移文档中提到的依赖,在模块系统中需要对应自动模块名,建议你先确认所有依赖JAR的模块名,再逐一添加requires语句。如果遇到依赖传递问题,可以用jdeps --module-path . --check your-module-name来分析模块依赖缺口。
内容的提问来源于stack exchange,提问作者Luke Turner
相关产品推荐
相关产品推荐

