簡體   English   中英

java.lang.IllegalAccessError:超類訪問檢查失敗:class org.apache.poi.openxml4j.util.ZipSecureFile

[英]java.lang.IllegalAccessError: superclass access check failed: class 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);

不過,我在將HSSFWorkbook用於 xls 文件方面沒有問題。

我錯過了什么?

將假設您正在使用 JPMS。 Poi 表單版本 5 完全支持 JPMS。

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

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

另一個常見的原因是從命令行運行“mvn package”,而 eclipse 正在監視導致重新編譯和一些奇怪的不穩定問題的項目。

從堆棧跟蹤看起來您可能正在使用 OpenJ9。 如果是這樣,在最新版本中,他們修復了類似的錯誤。 可以試試更新嗎?

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

此 Maven 項目顯示了 Apache POI 5.0.0 和 JPMS 的工作示例。 檢查 module-info 和 pom.xml 的重要部分。 -> https://github.com/seinecle/ApachePoi5.0.0-and-JPMS

我的一個應用程序中也出現了這個錯誤。 我通過將使用 poi 的庫直接轉換為 JPMS 來解決它。

因此,在我的情況下,從非模塊化項目調用 XSSFWorkbook 時,poi 中的“commons-compress”似乎是一個傳遞依賴問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM