You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JTS与GeoTools创建几何对象时遇类找不到异常求助

解决方案

1. 补充缺失的GeoTools依赖

你当前的pom.xml缺少gt-jts依赖,org.geotools.geometry.jts.JTSFactoryFinder类正是在这个模块中。添加以下依赖到pom.xml:

<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-jts</artifactId>
    <version>28.5</version>
</dependency>

同时确认版本兼容性:GeoTools 28.x官方适配JTS 1.18.2,你的版本配置是正确的。

2. 确保依赖正确打包到WAR中

Maven编译正常但运行时找不到类,通常是依赖未被打包到WEB-INF/lib目录:

  • 检查所有依赖的scope是否为默认的compile(你的配置未指定scope,默认就是compile,无问题)。
  • 在Eclipse中右键项目 → Maven → Update Project,勾选Force Update of Snapshots/Releases,重新同步依赖。
  • 部署WAR时,确认WEB-INF/lib目录下包含jts-core-1.18.2.jar、gt-main-28.5.jar、gt-metadata-28.5.jar、gt-jts-28.5.jar这些文件。

3. 解决JavaEE容器的类加载冲突

错误信息显示部署在Service Module Loader(大概率是WildFly/JBoss容器),这类容器可能自带旧版本的JTS或GeoTools类,导致类加载冲突:

  • 在项目WEB-INF目录下创建jboss-deployment-structure.xml,添加以下内容排除容器自带的冲突模块:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.locationtech.jts" />
            <module name="org.geotools" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

这会强制容器使用WAR包中自带的JTS和GeoTools类。

4. 代码小提示(非当前错误,但后续会触发异常)

你创建Polygon的代码存在数组越界和坐标未闭合问题:

  • Coordinate[] coords = new Coordinate[] {};初始化了空数组,后续coords[i] = new Coordinate(x, y)会直接抛出数组越界异常,建议用List收集坐标再转数组。
  • 创建Polygon要求坐标数组首尾闭合(第一个和最后一个坐标相同),否则geometryFactory.createPolygon(coords)会报错。修改后的代码示例:
List<Coordinate> coordList = new ArrayList<>();
while (matcher.find()) {
    double x = Double.parseDouble(matcher.group(1));
    double y = Double.parseDouble(matcher.group(2));
    coordList.add(new Coordinate(x, y));
}
// 闭合多边形坐标
if (!coordList.isEmpty()) {
    coordList.add(coordList.get(0));
}
Coordinate[] coords = coordList.toArray(new Coordinate[0]);
Polygon polygon = geometryFactory.createPolygon(coords);

内容的提问来源于stack exchange,提问作者Clara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:39:50