NoClassDefFoundError org/apache/poi/ss/usermodel/Classeur
Je suis en cours d'exécution d'un script shell qui appelle une classe java pour obtenir certaines données de la base de données et créer un rapport excel avec les données. Je reçois le message d'erreur Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Classeur lorsque le code frappe la ligne ci-dessous dans ma classe java:
XSSFWorkbook workbook = new XSSFWorkbook ();
C'est la façon dont j'ai défini le classpath:
CLASSPATH=${CLASSPATH}:<path-to-jars>/poi-2.5.1-final-20040804.jar
CLASSPATH=${CLASSPATH}:<path-to-jars>/poi-ooxml-3.11.jar
J'ai vérifié que les pots ont été téléchargés(via gradle), afin d'essayer de comprendre ce qui me manque ici. Quelqu'un peut-il m'aider avec ça?
Stacktrace:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Workbook
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at com.test.ExcelReportGenerator.writeExcel(ExcelReportGenerator.java:26)
at com.test.ReportRunner.createReport(ReportRunner.java:109)
at com.test.ReportRunner.main(ReportRunner.java:93)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.Workbook
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 15 more
Pourquoi n'utilisez-vous pas Gradle pour construire un fichier JAR exécutable? Je ne pense pas que le script doit être donné à votre classpath
OriginalL'auteur user1318369 | 2016-10-29
Vous devez vous connecter pour publier un commentaire.
Comme par ce Apache POI entrée de la FAQ, mélange de POI pots entre les différentes versions n'est pas pris en charge et cassera dans toutes sortes de façons, comme celui que vous avez trouvé. Ne pas le faire!
Vous avez besoin pour être à l'aide de votre PI pots tous de la même version. Je vous suggère de la dernière version, disponible ici (actuellement 3.15)
Vous devriez également examiner les composants et leurs dépendances page, pour s'assurer que vous avez tous les pots de votre utilisation de Apache POI. Eh bien, ou l'utilisation d'une gestion de la dépendance des outils comme Maven ou Gradle à gérer que pour vous!
OriginalL'auteur Gagravarr
J'ai téléchargé la dernière version de Apache POI binaires v3.17 ici et il a tous les pots pour créer xlsx fichier et ouvrez-le avec toute tracas.
Nécessaire pots sont montrés ci-dessous des captures d'écran (reportez-vous à sélectionné des pots) ARY.
OriginalL'auteur mannedear
pi 2.5.1 avait pas un tel paquet (et, par conséquent, une classe) inclus (vous pouvez le vérifier en analysant les fichiers jar comme ils sont pour l'essentiel des archives zip). Voir la source.
Mettre à jour les poi de la dépendance à la version 3. Cela a aussi l'avantage de répondre à la ooxml version.
OriginalL'auteur Ivan