web-dev-qa-db-fra.com

Comment éviter Java.lang.NoSuchMethodError: org.Apache.poi.util.IOUtils.copy (Ljava/io/InputStream; Ljava/io/OutputStream;) dans Apache POI

J'ai un code pour ajouter un filigrane au fichier .doc existant.

Ce qui suit est le code que j'ai essayé jusqu'à présent

public static void main(String[] args)
{

    try
    {
        XWPFDocument xDoc = new XWPFDocument(new FileInputStream("test.doc"));
        XWPFHeaderFooterPolicy xFooter = new XWPFHeaderFooterPolicy(xDoc);
        xFooter.createWatermark("My Watermark");
    }
    catch(Exception e) {
        e.printStackTrace();
    }
}

Ce qui suit est ce que j'ai

Exception in thread "main" Java.lang.NoSuchMethodError: org.Apache.poi.util.IOUtils.copy(Ljava/io/InputStream;Ljava/io/OutputStream;)V
at org.Apache.poi.util.PackageHelper.open(PackageHelper.Java:50)
at org.Apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.Java:71)
at com.avi.Test.ReadDoc.main(Watermark.Java:38)
14
Avinash

J'ai eu cette erreur aujourd'hui:

Cela semble différent de votre erreur, mais assez similaire. Pour votre information, j'utilise maven pour gérer les bocaux. Après quelques expériences, j'ai découvert que le cas racine est le poi.jar et que la version de poi-ooxml.jar n'est pas cohérente.

Cette configuration recevra une erreur:

    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.12</version>
    </dependency>

    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.13</version>
    </dependency>

J'ai changé la version de poi.jar de 3.12 à 3.13

    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.13</version>
    </dependency>

    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.13</version>
    </dependency>

bingo, problème résolu. J'espère que cela aidera quelqu'un qui a rencontré ce type d'exception.

24
sofia

Voir l'entrée Apache POI FAQ sur ce sujet même . Ce qui est presque certainement arrivé, c’est que vous ayez ajouté une nouvelle copie de POI à votre chemin de classe, mais une version plus ancienne existait déjà (d’un besoin antérieur, de votre framework, etc.), et Java ne sait plus trop lequel utiliser.

Tout d'abord, vous souhaiterez utiliser un extrait de code comme celui-ci pour déterminer l'origine des POI:

ClassLoader classloader =
   org.Apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader();
URL res = classloader.getResource(
         "org/Apache/poi/poifs/filesystem/POIFSFileSystem.class");
String path = res.getPath();
System.out.println("Core POI came from " + path);

Utilisez-le pour identifier le ou les anciens pots et les retirer.

Ensuite, utilisez la page Composants POI pour déterminer les fichiers JAR que vous devez utiliser et leurs dépendances. Enfin, ajoutez les derniers bocaux à votre parcours, et vous serez prêt à partir!

6
Gagravarr

Vous avez presque certainement une ancienne version de POI sur votre chemin de classe.

Voir Le POI Apache FAQ

1
M. Abbas

Allez ici: http://poi.Apache.org/download.html

téléchargez le fichier tar.gz -> extrayez-le et ajoutez-y tous les fichiers jar à la compilation.

1
Xelian

Dès le début, poi-ooxml et version poi doivent être identiques. 

<dependency>
    <groupId>org.Apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.16</version> <---------------this.
</dependency>
<dependency>
    <groupId>org.Apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.16</version> <---------------this.
</dependency>
0
Tiina

J'ai eu les mêmes problèmes que vous, la solution est que vous devez importer tous les fichiers jar pour exécuter votre programme. Ceux-ci sont obligatoires pour l'exécution de votre projet.

  • Poi-3.10-Final.jar
  • Poi-ooxml-3.10-Final.jar
  • Poi-ooxml-schemas-3.10.jar
  • Xmlbeans-2.30.jar
0
venkyreddy

aligner les versions de pom de 'poi' et 'poi-ooxml' .__

<dependencies>
    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.17</version>
    </dependency>
    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.17</version>
    </dependency>
</dependencies>
0
Ziv.Ti