IntelliJ中Java 17运行Snowpark Java示例失败求助
Snowpark Java示例运行报错:IllegalAccessError
运行Snowflake官方Snowpark Java示例时出现异常,该示例曾正常运行一次,之后无法使用,完整错误信息如下:
Exception in thread "main" java.lang.IllegalAccessError: class com.snowflake.snowpark.internal.UDFClassPath$ (in unnamed module @0x4218d6a3) cannot access class sun.net.www.ParseUtil (in module java.base) because module java.base does not export sun.net.www to unnamed module @0x4218d6a3 at com.snowflake.snowpark.internal.UDFClassPath$.$anonfun$getPathUsingClassLoader$1(UDFClassPath.scala:101) at scala.Option.map(Option.scala:230) at com.snowflake.snowpark.internal.UDFClassPath$.getPathUsingClassLoader(UDFClassPath.scala:89) at com.snowflake.snowpark.internal.UDFClassPath$.getPathForClass(UDFClassPath.scala:72) at com.snowflake.snowpark.internal.UDFClassPath$.<init>(UDFClassPath.scala:23) at com.snowflake.snowpark.internal.UDFClassPath$.<clinit>(UDFClassPath.scala) at com.snowflake.snowpark.Session.sessionInfo$lzycompute(Session.scala:86) at com.snowflake.snowpark.Session.sessionInfo(Session.scala:76) at com.snowflake.snowpark.Session$.com$snowflake$snowpark$Session$$setActiveSession(Session.scala:1195) at com.snowflake.snowpark.Session$SessionBuilder.createInternal(Session.scala:1327) at com.snowflake.snowpark.Session$SessionBuilder.create(Session.scala:1320) at com.snowflake.snowpark_java.SessionBuilder.create(SessionBuilder.java:71) at com.carnegielearning.snowpark.SnowparkTemplate.main(SnowparkTemplate.java:22) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131) Process finished with exit code 1
已尝试以下操作但未解决问题:
- 重装2019、2020、2021、2022版本的IntelliJ IDEA
- 改用Eclipse运行
- 切换Java 11、15、16、17、19版本
解决方案
1. 添加JVM启动参数
该错误源于Java 9+模块系统限制,Snowpark内部代码尝试访问Java核心模块的非公开API。在运行配置中添加以下JVM参数,允许java.base模块将sun.net.www包暴露给未命名模块:
--add-exports java.base/sun.net.www=ALL-UNNAMED
- IDEA中:编辑运行配置,在VM options输入框中添加上述参数
- Maven中:在
pom.xml的maven-surefire-plugin配置里添加jvmArgs - Gradle中:在
build.gradle的run任务里配置jvmArgs
2. 升级Snowpark依赖版本
旧版本Snowpark可能存在与高版本JDK的兼容性问题,建议升级到最新稳定版。以Maven为例,更新依赖:
<dependency> <groupId>com.snowflake</groupId> <artifactId>snowpark</artifactId> <version>最新稳定版本号</version> </dependency>
3. 清理项目缓存
- IDE中清理缓存(IDEA:
File -> Invalidate Caches...,勾选Clear file system cache和Clear local history后重启) - 清理本地Maven/Gradle仓库的Snowpark相关依赖,重新下载
内容的提问来源于stack exchange,提问作者Vinicius
相关产品推荐
相关产品推荐

