Apache POI Classnotfound Exception org.apache.poi.ss.usermodel.Cell

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

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

ОБНОВИТЬ:

До сих пор у меня была только зависимость 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;
    }

Вы добавили правильные зависимости в путь к классам?

XtremeBaumer 27.08.2018 13:53

Я добавил зависимость к pom.xml: <dependency> <groupId> org.apache.poi </groupId> <artifactId> poi </artifactId> <version> 3.17 </version> </dependency>

farahm 27.08.2018 13:54

Я согласен с @XtremeBaumer OP: проверьте, добавлены ли все зависимости - poi.apache.org/overview.html#components, вы всегда можете использовать maven или gradle для простоты, также проверьте версию - последняя версия - 3.17

Wilfred Clement 27.08.2018 13:55

Вы должны пойти с poi-ooxml

XtremeBaumer 27.08.2018 13:56

Я добавил оба: <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>, но все равно ошибка

farahm 27.08.2018 13:59

удалите обычную зависимость poi, а также запустите обновление maven в проекте

XtremeBaumer 27.08.2018 14:00

уже пробовал это тоже, но все та же ошибка

farahm 27.08.2018 14:01

Можете ли вы попробовать импортировать зависимости POI вручную? apache.org/dyn/closer.lua/poi/release/bin/… Загрузите zip-файл по указанной выше ссылке и вручную импортируйте все JAR внутри

Wilfred Clement 27.08.2018 14:03

Ты пробовал ? это сработало ?

Wilfred Clement 27.08.2018 14:13

Я загрузил вручную банку poixml. До этого я использовал HSSF. Сейчас меняю код на XSSF. Но, например, теперь я получаю в редакторе eclipse следующую ошибку: Тип org.apache.poi.ss.usermodel.CellType cannot be resolved. It is indirectly referenced from required .class files

farahm 27.08.2018 14:16

Хорошо, теперь, после того, как вручную добавили банку пои. ошибки редактора исчезли. Теперь я собираюсь снова создать банку и посмотрим, что теперь будет

farahm 27.08.2018 14:19

Хотя затмение больше не показывает ошибок. Терминал (командная строка) говорит, когда я делаю mvn package: package org.apache.poi.xssf.usermodel does not exist, package org.apache.poi.xssf.usermodel does not exist, cannot find symbol [ERROR] symbol: class XSSFCell ....

farahm 27.08.2018 14:22

ну что ж, это проблема компилятора, и я не могу сказать вам, не проверив код. Проверьте эту ссылку - stackoverflow.com/questions/25706216/… - Это не решит, но может помочь

Wilfred Clement 27.08.2018 14:25

Позвольте нам продолжить обсуждение в чате.

Wilfred Clement 27.08.2018 14:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
14
1 441
1

Ответы 1

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

POI Apache
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'

@farahm не могли бы вы показать нам трассировку стека ошибок новой ошибки и метод, в котором она происходит,

Ranielle Canlas 28.08.2018 10:32

@farahm Я обновил свой pom.xml, чтобы добавить зависимость XMLBeans

Ranielle Canlas 28.08.2018 10:34

Я сделал то же самое, что и ты. Но все же: он работает в eclipse, но не в командной строке

farahm 28.08.2018 10:38

Как вы это вызываете в командной строке? почему бы вам просто не экспортировать программу как исполняемый файл jar. Может ты там не так делаешь, тебе нужен -cp

Ranielle Canlas 28.08.2018 10:45

Я делаю mvn package, а потом: java -jar ExcelCSVConverter-0.0.1-SNAPSHOT.jar

farahm 28.08.2018 10:46

не могли бы вы показать вызов метода main () в вашей банке?

Ranielle Canlas 28.08.2018 10:51

Хорошо, я нашел проблему. В pom.xml у меня было: <artifactId>maven-jar-plugin</artifactId>. Но мне нужен был <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.4.1</version> <configuration> <!-- get all project dependencies --> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs>

farahm 28.08.2018 10:57

Другие вопросы по теме