VSCode的Jupyter Notebook运行tabulizer的extract_tables报错问题
问题原因
这个报错是Java 9及以上版本引入的模块化系统(JPMS)权限限制导致的:rJava依赖的RJavaTools类默认没有权限访问java.util包下的内部类成员。代码在R控制台能正常运行、在VSCode Jupyter Notebook中报错,是因为两个环境的R启动时加载rJava的默认参数不一致,VSCode的IRkernel默认没有配置对应的Java访问权限参数。
解决方案
方案1:提前配置Java权限参数(优先尝试)
在你的代码最开头添加Java参数配置,再加载相关包即可,完整可运行代码如下:
# 配置Java模块访问权限,必须在加载rJava/tabulizer之前运行 options(java.parameters = c("--add-opens", "java.base/java.util=ALL-UNNAMED")) # 加载依赖包 library(tabulizer) # 原有业务代码 f <- system.file("examples", "data.pdf", package = "tabulizer") f1 <- extract_tables(f, output = "data.frame") f1[[1]]
方案2:统一两个环境的R配置
如果方案1无效,说明你的VSCode R内核和系统R控制台的环境配置不一致,按以下步骤排查:
- 分别在VSCode Jupyter和R控制台运行
Sys.getenv("JAVA_HOME"),对比返回结果,如果不一致,在用户目录下的.Renviron文件中添加全局JAVA_HOME配置,确保两个环境调用同一个Java环境。 - 卸载重装rJava和tabulizer包,避免包编译版本和Java版本不匹配:
remove.packages(c("rJava", "tabulizer")) # 重启R后执行安装 install.packages("rJava") install.packages("tabulizer")
方案3:降级Java版本
tabulizer对Java 8的兼容性最佳,Java 8没有模块化权限限制,切换到Java 8版本可直接解决该类兼容性问题。
内容的提问来源于stack exchange,提问作者Pablo Ballesteros
相关产品推荐
相关产品推荐

