Привет, я получаю следующее исключение при запуске 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;
}
Я добавил зависимость к pom.xml: <dependency> <groupId> org.apache.poi </groupId> <artifactId> poi </artifactId> <version> 3.17 </version> </dependency>
Я согласен с @XtremeBaumer OP: проверьте, добавлены ли все зависимости - poi.apache.org/overview.html#components, вы всегда можете использовать maven или gradle для простоты, также проверьте версию - последняя версия - 3.17
Вы должны пойти с 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>, но все равно ошибка
удалите обычную зависимость poi, а также запустите обновление maven в проекте
уже пробовал это тоже, но все та же ошибка
Можете ли вы попробовать импортировать зависимости POI вручную? apache.org/dyn/closer.lua/poi/release/bin/… Загрузите zip-файл по указанной выше ссылке и вручную импортируйте все JAR внутри
Ты пробовал ? это сработало ?
Я загрузил вручную банку poixml. До этого я использовал HSSF. Сейчас меняю код на XSSF. Но, например, теперь я получаю в редакторе eclipse следующую ошибку: Тип org.apache.poi.ss.usermodel.CellType cannot be resolved. It is indirectly referenced from required .class files
Хорошо, теперь, после того, как вручную добавили банку пои. ошибки редактора исчезли. Теперь я собираюсь снова создать банку и посмотрим, что теперь будет
Хотя затмение больше не показывает ошибок. Терминал (командная строка) говорит, когда я делаю 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 ....
ну что ж, это проблема компилятора, и я не могу сказать вам, не проверив код. Проверьте эту ссылку - stackoverflow.com/questions/25706216/… - Это не решит, но может помочь
Позвольте нам продолжить обсуждение в чате.




Вам необходимо загрузить следующие файлы JAR и добавить их в свой путь сборки.
Если вы используете 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 не могли бы вы показать нам трассировку стека ошибок новой ошибки и метод, в котором она происходит,
@farahm Я обновил свой pom.xml, чтобы добавить зависимость XMLBeans
Я сделал то же самое, что и ты. Но все же: он работает в eclipse, но не в командной строке
Как вы это вызываете в командной строке? почему бы вам просто не экспортировать программу как исполняемый файл jar. Может ты там не так делаешь, тебе нужен -cp
Я делаю mvn package, а потом: java -jar ExcelCSVConverter-0.0.1-SNAPSHOT.jar
не могли бы вы показать вызов метода main () в вашей банке?
Хорошо, я нашел проблему. В 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>
Вы добавили правильные зависимости в путь к классам?