Apache POI Classnofound Исключение org.apache.poi.ss.usermodel.Cell - PullRequest
0 голосов
/ 27 августа 2018

Здравствуйте, я получаю следующее исключение при запуске фляги. Может кто-нибудь помочь, пожалуйста?

U2007750s-MacBook-Pro:target u2007750$ java -jar ExcelCSVConverter-0.0.1-SNAPSHOT.jar
    Error: A JNI error has occurred, please check your installation and try again
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Cell
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
        at java.lang.Class.getMethod0(Class.java:3018)
        at java.lang.Class.getMethod(Class.java:1784)
        at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
    Caused by: java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.Cell
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 7 more

UPDATE:

До сих пор у меня была только poi-ooxml зависимость в pom.xml:

     <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.17</version>
    </dependency>

Программа выполняется правильно в Eclipse. Только в командной строке возникает ошибка.

Теперь, по рекомендации вас, ребята, я также добавил вторую зависимость poi:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency> 

но все еще не успех. Теперь ошибка возникает для этого класса:

U2007750s-MacBook-Pro:target u2007750$ java -jar ExcelCSVConverter-0.0.1-SNAPSHOT.jar
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlbeans/impl/values/XmlValueOutOfRangeException
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
    at java.lang.Class.getMethod0(Class.java:3018)
    at java.lang.Class.getMethod(Class.java:1784)
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.apache.xmlbeans.impl.values.XmlValueOutOfRangeException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

Метод:

private static String getCellData(XSSFCell myCell) {
        String cellData = "";
        if (myCell == null) {
            cellData += CSV_SEPERATOR_CHAR;
        } else {
            try {
                switch (myCell.getCellTypeEnum()) {
                case STRING:
                case BOOLEAN:
                    cellData += myCell.getRichStringCellValue() + CSV_SEPERATOR_CHAR;
                    break;
                case NUMERIC:
                    cellData += getNumericValue(myCell);
                    break;
                case FORMULA:
                    cellData += getFormulaValue(myCell);
                default:
                    cellData += CSV_SEPERATOR_CHAR;
                }
            } catch (XmlValueOutOfRangeException e) {
                int a =2;
                //System.out.println("XmlValueOutOfRangeException for: "+ myCell.getRawValue());
                String rawValue = myCell.getRawValue();
                while(rawValue.startsWith("0")) {
                    rawValue = rawValue.substring(1);
                }
                cellData += rawValue+ CSV_SEPERATOR_CHAR;
            }
        }
        return cellData;
    }

1 Ответ

0 голосов
/ 28 августа 2018

Вам необходимо скачать следующие JAR-файлы и добавить их в путь сборки.

Apache POI
Apache POI-OOXML

Если вы используете Maven:

<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>
<dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>3.0.1</version>
</dependency>


А если вы используете Graddle:

// https://mvnrepository.com/artifact/org.apache.poi/poi
compile group: 'org.apache.poi', name: 'poi', version: '3.17'
// https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml
compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.17'
...