微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java.lang.IllegalAccessError:超类访问检查失败:类 org.apache.poi.openxml4j.util.ZipSecureFile

如何解决java.lang.IllegalAccessError:超类访问检查失败:类 org.apache.poi.openxml4j.util.ZipSecureFile

我尝试使用 org.apache.poi 读取和写入 excel 文件。当我尝试使用 XSSFWorkBook

访问 xlsx 文件时出现以下异常
Exception in thread "main" java.lang.IllegalAccessError: superclass access check Failed: class org.apache.poi.openxml4j.util.ZipSecureFile (in module org.apache.poi.ooxml) cannot access class org.apache.commons.compress.archivers.zip.ZipFile (in unnamed module @0xdd3b207) because module org.apache.poi.ooxml does not read unnamed module @0xdd3b207
    at java.base/java.lang.classLoader.defineClass1(Native Method)
    at java.base/java.lang.classLoader.defineClass(ClassLoader.java:1016)
    at java.base/java.lang.classLoader.defineClass(ClassLoader.java:1095)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:183)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:784)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassInModuleOrNull(BuiltinClassLoader.java:705)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:630)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:604)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
    at java.base/java.lang.classLoader.loadClass(ClassLoader.java:522)
    at org.apache.poi.ooxml/org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:312)
    at org.apache.poi.ooxml/org.apache.poi.ooxml.util.PackageHelper.open(PackageHelper.java:47)
    at org.apache.poi.ooxml/org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:299)

我的 pom.xml 中有以下依赖项

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.0.0</version>
</dependency>

这是我得到异常的代码

FileInputStream companyfileIS = new FileInputStream(companyfilePath);
        // OPCPackage pkg = OPCPackage.open(companyfilePath);

XSSFWorkbook companyFilewb = new XSSFWorkbook(companyfileIS);

不过,我对 xls 文件使用 hssfWorkbook 没有问题。

我错过了什么?

解决方法

假设您使用的是 JPMS。 Poi 表单版本 5 完全支持 JPMS。

将此添加到您的 module-info.java

   requires org.apache.poi.poi;
   requires org.apache.poi.ooxml;

另一个常见的原因是在 eclipse 监控项目时从命令行运行“mvn package”,导致重新编译和一些奇怪的不稳定问题。

,

从堆栈跟踪看起来您可能正在使用 OpenJ9。如果是这样,在最新版本中,他们修复了类似的错误。你可以尝试更新它吗?

信息:https://github.com/eclipse/openj9/issues/11274

,

此 Maven 项目展示了 Apache POI 5.0.0 和 JPMS 的工作示例。检查模块信息和 pom.xml 的重要部分。 -> https://github.com/seinecle/ApachePoi5.0.0-and-JPMS

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。