Опит за стартиране на зависим от POI клас на командния ред

Както се казва в заглавието, опитвам се да стартирам клас в командния ред, който използва POI библиотеката на Apache, но когато изпълня тази команда:

java -cp C:\Users\rperera\IdeaProjects\LinkingNames\libs; HyperlinkWriter

Получавам тази грешка:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/CreationHelper
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.getMethod0(Unknown Source)
    at java.lang.Class.getMethod(Unknown Source)
    at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.CreationHelper
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 6 more   

папката libs съдържа цялата папка POI, която е компресирана при изтегляне, така че не съм сигурен защо извежда тази грешка. Тествах и това с IntelliJ и вървеше добре. Знам, че начинът, по който Command Prompt и IntelliJ обработват библиотеките, е различен, но не съм сигурен защо това се случва.

Ще се радвам на всяка помощ! Благодаря!


person silverAndroid    schedule 05.08.2015    source източник
comment
Разархивирана ли е библиотеката, съдържаща POI jar?   -  person andrewdleach    schedule 05.08.2015
comment
Само да уточня, питаш дали бурканите са разкопчани?   -  person silverAndroid    schedule 05.08.2015
comment
да, разархивирана ли е папката, която сте изтеглили, съдържаща POI библиотеката?   -  person andrewdleach    schedule 05.08.2015
comment
Бурканите все още са с цип, но poi-bin-3.12-20150511.zip е разкопчан   -  person silverAndroid    schedule 05.08.2015
comment
Всички .jar файлове от вашето изтегляне в тази директория ли са, напр. poi-3.12-20150511.jar и т.н.?   -  person rgettman    schedule 05.08.2015
comment
Бих проверил за допълнителни POI буркани. Току-що имах подобен проблем при използване на компилация на maven и имаше декларирани противоречиви версии. Ако имате повече от един буркан, съдържащ класа org.apache.poi.ss.usermodel.CreationHelper, бих очаквал java.lang.ClassNotFoundException:   -  person BoatCode    schedule 05.08.2015
comment
@rgettman всички .jar файлове от изтеглянето са в директорията   -  person silverAndroid    schedule 05.08.2015
comment
@BoatCode проверих за допълнителни POI буркани, но не намерих допълнителни буркани, съдържащи класа   -  person silverAndroid    schedule 05.08.2015
comment
Бурканите в директория обикновено не са достатъчни. Какво се случва, ако изрично ги посочите в пътя на класа?   -  person Gagravarr    schedule 06.08.2015


Отговори (2)


Трябва действително да компилирате jar с оригиналните .java файлове и посочените POI буркани.

javac -cp \path_to_jars \path_to_java_files

и тогава

java MyProject
person andrewdleach    schedule 05.08.2015
comment
Опитах javac -cp C:\Users\rperera\IdeaProjects\LinkingNames\libs C:\Users\rperera\IdeaProjects\LinkingNames\src\HyperlinkWriter.java, но даде куп грешки, водещи до факта, че компилаторът се оплака, че POI пакетите не съществуват - person silverAndroid; 06.08.2015
comment
Премахнали ли сте допълнителни .class файлове? - person andrewdleach; 06.08.2015
comment
Премахнах всички генерирани от IntelliJ, но все още получавам грешките - person silverAndroid; 06.08.2015
comment
Не само компилирайте, но и стартирайте! Имате нужда и от тези буркани, изброени в пътя на класа за командата java по време на изпълнение! - person Gagravarr; 06.08.2015
comment
@Gagravarr Знам това, но не мога да го стартирам, освен ако не мога да го компилирам - person silverAndroid; 06.08.2015

Намерих отговора от предишен отговор на StackOverflow. Трябваше да добавя '*' в края и '.' след точка и запетая. Така че с моя пример, по отношение на компилирането, трябваше да направя:

javac -cp C:\Users\rperera\IdeaProjects\LinkingNames\libs\*;. C:\Users\rperera\IdeaProjects\LinkingNames\src\HyperlinkWriter.java

и след това, за да го стартирам (кредит на @andrewdleach), току-що направих:

java HyperlinkWriter
person silverAndroid    schedule 06.08.2015