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

本地GeoServer执行GetCapabilities报错,无法连接QGIS求助

解决GeoServer在OpenJDK17下GetCapabilities报错及客户端连接失败问题

问题原因

这个错误由Java 9及以上版本的模块系统(JPMS)限制导致:org.marlin.pisces.MarlinRenderingEngine属于未命名模块,它试图访问的sun.java2d.pipe.RenderingEngine是java.desktop模块的内部API,默认情况下该模块不会将这个包导出给未命名模块,从而触发非法访问错误。Web界面正常是因为它未触发WMS服务所需的渲染逻辑,而GetCapabilities请求或客户端连接会触发该逻辑。

解决方案

方案1:添加JVM模块访问参数

修改GeoServer的启动脚本(Ubuntu系统对应bin/startup.sh),在JAVA_OPTS中添加参数,允许未命名模块访问java.desktop的内部包:

JAVA_OPTS="$JAVA_OPTS --add-exports=java.desktop/sun.java2d.pipe=ALL-UNNAMED"
JAVA_OPTS="$JAVA_OPTS --add-opens=java.desktop/sun.java2d.pipe=ALL-UNNAMED"

操作步骤:

  • 打开GeoServer安装目录下的bin/startup.sh文件
  • 找到定义JAVA_OPTS的段落,将上述两行追加到现有参数后
  • 保存文件,重启GeoServer服务

方案2:禁用Marlin渲染引擎,使用默认渲染器

如果不想调整模块权限,可直接切换回Java默认渲染引擎:

  1. 在启动脚本的JAVA_OPTS中添加参数:
JAVA_OPTS="$JAVA_OPTS -Dsun.java2d.renderer=sun.java2d.pipe.AAShapePipe"
  1. 或者删除GeoServer安装目录下WEB-INF/lib中所有以marlin开头的jar文件(如marlin-*.jar),再重启GeoServer

验证

重启GeoServer后,重新执行GetCapabilities请求,确认返回正常XML响应,再尝试用QGIS连接,即可正常访问图层。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:35:08