2015-10-29 119 views
9

我知道这个问题已经被频繁询问,但找不到合适的解决方案。 当Apache POI解析错误

XWPFDocument xdoc = new XWPFDocument(srcFile); 

XSSFWorkbook workbook = new XSSFWorkbook(srcFile); 

工作,我总是最后出现以下错误:

Exception in thread "main" java.lang.IllegalAccessError: tried to access method org.apache.poi.util.POILogger.log(ILjava/lang/Object;)V from class org.apache.poi.openxml4j.opc.PackageRelationshipCollection 
    at org.apache.poi.openxml4j.opc.PackageRelationshipCollection.parseRelationshipsPart(PackageRelationshipCollection.java:313) 
    at org.apache.poi.openxml4j.opc.PackageRelationshipCollection.<init>(PackageRelationshipCollection.java:163) 
    at org.apache.poi.openxml4j.opc.PackageRelationshipCollection.<init>(PackageRelationshipCollection.java:131) 
    at org.apache.poi.openxml4j.opc.PackagePart.loadRelationships(PackagePart.java:561) 
    at org.apache.poi.openxml4j.opc.PackagePart.<init>(PackagePart.java:109) 
    at org.apache.poi.openxml4j.opc.PackagePart.<init>(PackagePart.java:80) 
    at org.apache.poi.openxml4j.opc.PackagePart.<init>(PackagePart.java:125) 
    at org.apache.poi.openxml4j.opc.ZipPackagePart.<init>(ZipPackagePart.java:78) 
    at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:243) 
    at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:684) 
    at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:275) 
    at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37) 
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:266) 

人建议打开PackageRelationshipCollection,然后重试。但是这并没有多大帮助。

而且我已经罐子装:

<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi</artifactId> 
    <version>3.13</version> 
    <type>jar</type> 
</dependency> 
<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi-scratchpad</artifactId> 
    <version>3.13</version> 
    <type>jar</type> 
</dependency> 
<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi-ooxml</artifactId> 
    <version>3.12</version> 
    <type>jar</type> 
</dependency> 
<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi-ooxml-schemas</artifactId> 
    <version>3.11</version> 
    <type>jar</type> 
</dependency> 

回答

32

Apache POI FAQ

Can I mix POI jars from different versions?

No. This is not supported.

All POI jars in use must come from the same version. A combination such as poi-3.11.jar and poi-ooxml-3.9.jar is not supported, and will fail to work in unpredictable ways.

你的POM具有从3.11,3.12和3.13,在Apache POI罐子依赖其作为the FAQ explained isn't supported

您需要将所有这些更改为3.13,然后才能正常工作

我建议是这样的:

<properties> 
    <poi.version>3.13</poi.version> 
</properties> 
<dependencies> 
    <dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi</artifactId> 
    <version>${poi.version}</version> 
    </dependency> 
    <dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi-scratchpad</artifactId> 
    <version>${poi.version}</version> 
    </dependency> 
    <dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi-ooxml</artifactId> 
    <version>${poi.version}</version> 
    </dependency> 
    <!-- etc as needed --> 

这样一来,就可以确保您所有的POI罐子都来自同一版本!

+0

感谢您的帮助。那就是诀窍。 – beingsuplab