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

GeoTools CartesianAuthorityFactory实例化失败及NetBeans运行异常排查

解决NetBeans中GeoTools运行时的ServiceConfigurationError与VerifyError问题

看起来你遇到的核心问题是JDK版本不兼容导致的,咱们一步步拆解分析:

问题根源

GeoTools 24.0 官方要求的运行环境是 JDK 11+(从GeoTools 23.x开始就不再支持JDK 8),但你的NetBeans默认使用的是OpenJDK 1.8,这就引发了一系列版本不兼容问题:

  • NoSuchFieldException: UNIT:高版本GeoTools依赖的单位库(比如systems.uom系列)在JDK 8下的API结构和JDK 11有差异,导致字段找不到。
  • VerifyError: Bad return type:JDK 11编译的字节码在JDK 8的JVM上运行时,会因为字节码验证规则不同,出现返回类型不匹配的错误(比如NoSuchAuthorityCodeException和FactoryException的继承关系在低版本JVM验证不通过)。
  • Docker环境正常是因为你在Docker里用了正确的JDK 11版本,和项目依赖的要求匹配。

具体解决方案

1. 切换NetBeans项目的JDK版本到OpenJDK 11

操作步骤:

  • 右键你的NetBeans项目 → Properties(属性)
  • 切换到 Libraries(库)标签页
  • 在 Java Platform(Java平台)下拉菜单中,选择你系统上的OpenJDK 11(如果没有,需要先在NetBeans中添加该平台:Tools → Java Platforms → Add Platform)

2. 确保Maven编译配置与JDK 11对齐

在你的pom.xml中添加或更新maven-compiler-plugin配置,强制用JDK 11编译:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source>11</source>
        <target>11</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>

3. 清理项目构建缓存

避免旧的JDK 8编译文件干扰:

  • 右键项目 → Clean and Build
  • 或者手动删除项目根目录下的target文件夹
  • 可选:清理NetBeans全局缓存 → Tools → Options → Java → Ant → Clear Cache

4. 确认Shade插件配置的正确性

你当前的maven-shade-plugin配置已经包含了ServicesResourceTransformer,这个配置是正确的(它负责合并GeoTools SPI所需的META-INF/services文件),Docker环境正常也验证了这一点,所以不需要调整这块。

验证

完成上述步骤后,重新运行CRS.decode("EPSG:4326")代码,应该就能正常加载CRS工厂,不会再出现那些异常了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:52:55