Я новичок в Java и не уверен, насколько подходящим является название моего вопроса.Пожалуйста, предложите какой-нибудь лучший заголовок.
У меня есть Java API, который имеет много исполняемых модулей, которые выполняют различные операции, связанные с синтаксическим анализом файлов .pst
в MS Outlook.И моя проблема в том, что я получаю это исключение, когда запускаю команду execute
для выполнения файла .class
одного модуля API (java -classpath /opt/Java/libs/JPST/lib/jpst.jar /opt/Java/libs/JPST/examples/GetInboxMessages/bin/Example
) -
Exception in thread "main" java.lang.NoClassDefFoundError: /opt/Java/libs/JPST/examples/GetInboxMessages/bin/Example
Caused by: java.lang.ClassNotFoundException: .opt.Java.libs.JPST.examples.GetInboxMessages.bin.Example
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: /opt/Java/libs/JPST/examples/GetInboxMessages/bin/Example. Program will exit.
Такдалеко ...
Вы можете проверить мой предыдущий вопрос , где я пришел к выводу, что я правильно выполняю команды compile
и execute
.Но я все еще получаю вышеупомянутое «исключение».
Я спросил разработчика API, который сказал, что я должен получить Eclipse или Netbeans IDE.Он сказал, что папка
examples
внутри структуры папок API - это целое рабочее пространство Eclipse.
, а также сказал, что
Itпроще скомпилировать и запустить все примеры.
А теперь ...
Итак, я настроил Eclipse Helios для Java.Может кто-нибудь сказать мне, как легко скомпилировать и запустить все примеры (я думаю, модули внутри папки примеров), используя IDE.Ранее я работал с Eclipse для PHP, но никогда для Java.
Структура папок API
Мне нужно выполнить файл .class
одного из этих модулей (много модулейвнутри примеров присутствуют папки directory
).В папке примеров API есть много таких модулей.Каждая из этих папок модулей содержит папку bin
(содержащую файл .class
) и папку src
(содержащую файл .java
).Мне нужно выполнить один такой .class
файл.
Существует каталог lib
, содержащий файл .jar
(на который должен ссылаться мой целевой файл .class
).Каталог lib
находится на том же уровне, что и каталог examples
.
Решение
Я убедился, что решение Джонатана работает (проверено только без использования elipse).Чтобы сделать это более понятным, classpath
необходимо включить все расположения классов в команды компиляции и выполнения.Итак, если вам нужно скомпилировать и выполнить Example.java
файл с зависимостью Parent.jar
, сделайте следующее: -
Скомпилируйте
javac -classpath /path/to/Parent.jar/file/Parent.jar:/path/to/Example.java/file/ Example.java
Выполните
java -classpath /path/to/Parent.jar/file/Parent.jar:/path/to/Example.class/file Example
И обратите внимание на разделитель - должно быть :
для Linux и ;
для Windows.
Спасибо,
Sandeepan