Discussion:
Application fails with Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/xwpf/usermodel/XWPFDocument
Marco Lechner - FOSSGIS e.V.
2018-02-10 21:38:42 UTC
Permalink
Hi,

started using org.apache.poi.xwpf version 3.16 (defined as dependency in
projects pom.xml). When I test my application in my IDE (idea) it works
like a charm, but when I try to run the compiled jar from commandline using

$ java -jar target/dokpool-faq-importer.jar ./test/FAQs.docx

I get the following error message:

Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/poi/xwpf/usermodel/XWPFDocument
    at de.bfs.dokpool.faq.importer.FaqImporter.main(FaqImporter.java:23)
Caused by: java.lang.ClassNotFoundException:
org.apache.poi.xwpf.usermodel.XWPFDocument
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

The as far as I know relevant dependency packages seem to be included in
the jar-file. Tried with unzip -l:

$ unzip -l target/dokpool-faq-importer.jar
Archive:  target/dokpool-faq-importer.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
      411  2018-02-09 22:18   META-INF/MANIFEST.MF
        0  2018-02-09 22:18   META-INF/
        0  2018-02-09 22:18   de/
        0  2018-02-09 22:18   de/bfs/
        0  2018-02-09 22:18   de/bfs/dokpool/
        0  2018-02-09 22:18   de/bfs/dokpool/faq/
        0  2018-02-09 22:18   de/bfs/dokpool/faq/importer/
        0  2018-02-09 22:18   lib/
        0  2018-02-09 22:18   META-INF/maven/
        0  2018-02-09 22:18   META-INF/maven/de.bfs/
        0  2018-02-09 22:18   META-INF/maven/de.bfs/dokpool-faq-importer/
     1227  2018-02-09 22:18  
de/bfs/dokpool/faq/importer/FaqSchluesselBotschaft.class
     1183  2018-02-09 22:18  
de/bfs/dokpool/faq/importer/FaqBotschaften.class
   190432  2018-02-09 22:18   lib/gson-2.2.4.jar
   751238  2018-02-09 22:18   lib/commons-collections4-4.1.jar
    26514  2018-02-09 22:18   lib/stax-api-1.0.1.jar
  1433719  2018-02-09 22:18   lib/poi-ooxml-3.16.jar
     4824  2018-02-09 22:17  
META-INF/maven/de.bfs/dokpool-faq-importer/pom.xml
       99  2018-02-09 22:18  
META-INF/maven/de.bfs/dokpool-faq-importer/pom.properties
     2919  2018-02-09 22:18   de/bfs/dokpool/faq/importer/FaqImporter.class
     2224  2018-02-09 22:18   de/bfs/dokpool/faq/importer/Faq.class
  2730866  2018-02-09 22:18   lib/xmlbeans-2.6.0.jar
     4946  2018-02-09 22:18   de/bfs/dokpool/faq/importer/FaqUtils.class
  5871746  2018-02-09 22:18   lib/poi-ooxml-schemas-3.16.jar
     3124  2018-02-09 22:18  
de/bfs/dokpool/faq/importer/FaqTableParser.class
   284184  2018-02-09 22:18   lib/commons-codec-1.10.jar
    98365  2018-02-09 22:18   lib/curvesapi-1.04.jar
  2679259  2018-02-09 22:18   lib/poi-3.16.jar
---------                     -------
 14087280                     28 files

What can be the reason? Any idea why
org/apache/poi/xwpf/usermodel/XWPFDocument is not found? My
FaqImporter.java main() looks like this:

package de.bfs.dokpool.faq.importer;

...
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.openxml4j.opc.OPCPackage;

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

public class FaqImporter {

    public static void main(String[] args) {
        String docxpath = args[0];
        List<Faq> faqCatalog = new ArrayList<Faq>();

        try {
            FileInputStream fis = new FileInputStream(docxpath);
            XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));
            List<XWPFTable> xwpfTables = xdoc.getTables();
...

Shouldn't this be enough?

Javav ersion is

$ java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)

Marco

B�KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKCB��[��X��ܚX�KK[XZ[�\�\�][��X��ܚX�P�K�\X�K�ܙ�B��܈Y][ۘ[��[X[��K[XZ[
Marco Lechner - FOSSGIS e.V.
2018-02-10 22:06:09 UTC
Permalink
Sorry about the noise.
Fixed it - was just an error in the pom.xml.
Marco
Post by Marco Lechner - FOSSGIS e.V.
Hi,
started using org.apache.poi.xwpf version 3.16 (defined as dependency in
projects pom.xml). When I test my application in my IDE (idea) it works
like a charm, but when I try to run the compiled jar from commandline using
$ java -jar target/dokpool-faq-importer.jar ./test/FAQs.docx
org/apache/poi/xwpf/usermodel/XWPFDocument
    at de.bfs.dokpool.faq.importer.FaqImporter.main(FaqImporter.java:23)
org.apache.poi.xwpf.usermodel.XWPFDocument
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more
The as far as I know relevant dependency packages seem to be included in
$ unzip -l target/dokpool-faq-importer.jar
Archive:  target/dokpool-faq-importer.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
      411  2018-02-09 22:18   META-INF/MANIFEST.MF
        0  2018-02-09 22:18   META-INF/
        0  2018-02-09 22:18   de/
        0  2018-02-09 22:18   de/bfs/
        0  2018-02-09 22:18   de/bfs/dokpool/
        0  2018-02-09 22:18   de/bfs/dokpool/faq/
        0  2018-02-09 22:18   de/bfs/dokpool/faq/importer/
        0  2018-02-09 22:18   lib/
        0  2018-02-09 22:18   META-INF/maven/
        0  2018-02-09 22:18   META-INF/maven/de.bfs/
        0  2018-02-09 22:18   META-INF/maven/de.bfs/dokpool-faq-importer/
     1227  2018-02-09 22:18  
de/bfs/dokpool/faq/importer/FaqSchluesselBotschaft.class
     1183  2018-02-09 22:18  
de/bfs/dokpool/faq/importer/FaqBotschaften.class
   190432  2018-02-09 22:18   lib/gson-2.2.4.jar
   751238  2018-02-09 22:18   lib/commons-collections4-4.1.jar
    26514  2018-02-09 22:18   lib/stax-api-1.0.1.jar
  1433719  2018-02-09 22:18   lib/poi-ooxml-3.16.jar
     4824  2018-02-09 22:17  
META-INF/maven/de.bfs/dokpool-faq-importer/pom.xml
       99  2018-02-09 22:18  
META-INF/maven/de.bfs/dokpool-faq-importer/pom.properties
     2919  2018-02-09 22:18   de/bfs/dokpool/faq/importer/FaqImporter.class
     2224  2018-02-09 22:18   de/bfs/dokpool/faq/importer/Faq.class
  2730866  2018-02-09 22:18   lib/xmlbeans-2.6.0.jar
     4946  2018-02-09 22:18   de/bfs/dokpool/faq/importer/FaqUtils.class
  5871746  2018-02-09 22:18   lib/poi-ooxml-schemas-3.16.jar
     3124  2018-02-09 22:18  
de/bfs/dokpool/faq/importer/FaqTableParser.class
   284184  2018-02-09 22:18   lib/commons-codec-1.10.jar
    98365  2018-02-09 22:18   lib/curvesapi-1.04.jar
  2679259  2018-02-09 22:18   lib/poi-3.16.jar
---------                     -------
 14087280                     28 files
What can be the reason? Any idea why
org/apache/poi/xwpf/usermodel/XWPFDocument is not found? My
package de.bfs.dokpool.faq.importer;
...
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.openxml4j.opc.OPCPackage;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
public class FaqImporter {
    public static void main(String[] args) {
        String docxpath = args[0];
        List<Faq> faqCatalog = new ArrayList<Faq>();
        try {
            FileInputStream fis = new FileInputStream(docxpath);
            XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));
            List<XWPFTable> xwpfTables = xdoc.getTables();
...
Shouldn't this be enough?
Javav ersion is
$ java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Marco
---------------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: user-***@poi.apache.org
For additional commands, e-mail: user-***@poi.apache.org
Nick Burch
2018-02-11 11:17:11 UTC
Permalink
Post by Marco Lechner - FOSSGIS e.V.
org/apache/poi/xwpf/usermodel/XWPFDocument
    at de.bfs.dokpool.faq.importer.FaqImporter.main(FaqImporter.java:23)
org.apache.poi.xwpf.usermodel.XWPFDocument
The as far as I know relevant dependency packages seem to be included in
$ unzip -l target/dokpool-faq-importer.jar
Archive:  target/dokpool-faq-importer.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
*snip*
Post by Marco Lechner - FOSSGIS e.V.
   190432  2018-02-09 22:18   lib/gson-2.2.4.jar
   751238  2018-02-09 22:18   lib/commons-collections4-4.1.jar
    26514  2018-02-09 22:18   lib/stax-api-1.0.1.jar
  1433719  2018-02-09 22:18   lib/poi-ooxml-3.16.jar
Generally classloaders will only load classes from within a jar, not
jars-within-jars.

If you want to only have a single jar with everything in, you'll either
need to switch to a more "war-like" classloader to have jars within your
jar loaded, or use something like shading/shadowing when you build the jar
to have the classes of the dependencies in-lined within your jar

Nick
David Law
2018-02-11 11:50:10 UTC
Permalink
Hi all,

isn't that what the Eclipse *Export Wizard*...
"Runnable JAR File"
with the option
"Package required libraries into generated JAR"
...does?

It includes a "jarinjarloader" in the JAR.

All the best,
DaveLaw
Post by Nick Burch
Post by Marco Lechner - FOSSGIS e.V.
org/apache/poi/xwpf/usermodel/XWPFDocument
    at de.bfs.dokpool.faq.importer.FaqImporter.main(FaqImporter.java:23)
org.apache.poi.xwpf.usermodel.XWPFDocument
The as far as I know relevant dependency packages seem to be included in
$ unzip -l target/dokpool-faq-importer.jar
Archive:  target/dokpool-faq-importer.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
*snip*
Post by Marco Lechner - FOSSGIS e.V.
   190432  2018-02-09 22:18 lib/gson-2.2.4.jar
   751238  2018-02-09 22:18   lib/commons-collections4-4.1.jar
    26514  2018-02-09 22:18   lib/stax-api-1.0.1.jar
  1433719  2018-02-09 22:18   lib/poi-ooxml-3.16.jar
Generally classloaders will only load classes from within a jar, not
jars-within-jars.
If you want to only have a single jar with everything in, you'll
either need to switch to a more "war-like" classloader to have jars
within your jar loaded, or use something like shading/shadowing when
you build the jar to have the classes of the dependencies in-lined
within your jar
Nick
---------------------------------------------------------------------
Loading...