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

Java连接Snowflake JDBC执行查询时的--add-opens模块报错问题求助

Java连接Snowflake JDBC执行查询时的--add-opens模块报错问题求助

嘿,我来帮你捋捋这个让人头大的问题!

首先你遇到的Unknown module: org.apache.arrow.memory.core报错,核心原因其实很简单:你用的Arrow Memory Core 18.3.0版本根本不是模块化JAR(也就是包里没有module-info.java),JDK的模块系统根本识别不到这个所谓的org.apache.arrow.memory.core模块名,自然会报错说找不到。

给你几个具体的解决步骤,按顺序试:

  • 第一步:直接删掉针对org.apache.arrow.memory.core的配置,只保留--add-opens=java.base/java.nio=ALL-UNNAMED这个VM参数就行。因为非模块化的JAR都会被JDK归到ALL-UNNAMED这个匿名模块里,不需要指定具体的模块名,直接给匿名模块开权限就够了。
  • 第二步:在Eclipse里确保VM参数配置正确:
    1. 右键你的项目 → Run As → Run Configurations
    2. 找到你的Java程序配置项,切到Arguments标签页
    3. 在VM Arguments输入框里只填--add-opens=java.base/java.nio=ALL-UNNAMED,别加多余的内容
  • 第三步:检查依赖版本兼容性:Snowflake JDBC 3.24.2配套的Arrow版本应该是17.x系列,你直接用了18.3.0,版本差得有点多,很容易出问题。建议换成和JDBC版本匹配的Arrow包,或者更省心的是直接用Snowflake JDBC的“胖包”(如果有的话),它会自带所有兼容的依赖,不用你自己手动加Arrow和JNA。
  • 第四步:试试降级JDK版本。JDK24是非常新的版本,Snowflake JDBC对它的适配可能还没跟上,毕竟LTS版本才是企业级应用的主流。换成JDK17或者JDK21,模块系统的兼容性问题会少很多。

另外你提到Arrow jar里看不到“core”模块,这完全正常,因为18.x的arrow-memory-core是传统的非模块化JAR,没有module-info.java,所以JDK不会把它识别为一个命名模块,这也是为什么你指定模块名会报错的根本原因。

按上面的步骤调整后,应该就能解决这个报错了,先从第一步的参数调整开始试,这是最直接的解决方案!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 08:38:08