2015-10-29 25 views
9

So che questa domanda è stata posta spesso, ma non sono riuscito a trovare una soluzione adeguata. Quando si lavora conApache POI Errore di analisi

XWPFDocument xdoc = new XWPFDocument(srcFile); 

o

XSSFWorkbook workbook = new XSSFWorkbook(srcFile); 

finisco sempre con il seguente errore:

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) 

persone hanno suggerito di aprire PackageRelationshipCollection e riprovare. Ma questo non ha aiutato molto.

anche io ho i vasetti caricati:

<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> 

risposta

32

Dal 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.

tuo pom ha dipendenze da vasi di Apache POI da 3.11, 3.12 e 3.13, che come the FAQ explained isn't supported

È necessario modificare tutti quelli per essere 3.13, quindi funzionerà

Io suggerirei qualcosa di simile:

<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 --> 

In questo modo, è possibile garantire tutti i vostri vasetti punti di interesse sono della stessa versione!

+0

Grazie per l'aiuto. Questo ha fatto il trucco. – beingsuplab