ClassDefNotFoundError пока класс в пути к классам - PullRequest
0 голосов
/ 31 января 2012

Я пытаюсь запустить ParSeMiS . Согласно документации, в каталоге lib требуется наличие ant, prefuse и antlr банок. Я положил все необходимые банки в нем. Однако, когда я пытаюсь запустить его, я получаю следующую ошибку:

Exception in thread "main" java.lang.NoClassDefFoundError: antlr/TokenStreamException
    at de.parsemis.miner.environment.Settings.parseFileName(Settings.java:198)
    at de.parsemis.miner.environment.Settings.parseOption(Settings.java:312)
    at de.parsemis.miner.environment.Settings.parse(Settings.java:170)
    at de.parsemis.miner.environment.Settings.parse(Settings.java:122)
    at de.parsemis.Miner.run(Miner.java:358)
    at de.parsemis.Miner.main(Miner.java:61)
Caused by: java.lang.ClassNotFoundException: antlr.TokenStreamException
    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:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 6 more

Теперь я убедился, что в банке antlr присутствует antlr/TokenStreamException.class. Я попытался добавить jar вручную в classpath, экспортировав переменную CLASSPATH и установив ее с помощью переключателя -cp. Тем не менее, ничего из этого не работает, и я все еще получаю это исключение. Кто-нибудь может помочь мне понять, что не так? Спасибо.

Ответы [ 2 ]

1 голос
/ 31 января 2012

Проблема в том, что вы используете -jar, который игнорирует переменную среды CLASSPATH. Вы должны указать свои зависимости в манифесте, , как показано здесь , например,

Class-Path: lib/ant.jar lib/antlr-3.4-complete.jar lib/prefuse.jar

(Однако должен по-прежнему работать с явной опцией -cp. Однако я предполагаю, что вы указали что-то неправильно при указании этого, и предположили, что это было той же основной причиной, что и ошибка при использовании переменная окружения.)

0 голосов
/ 12 января 2013

Я понимаю, что этот вопрос очень старый, но у меня была точно такая же проблема, и я нашел эту ветку.Для будущих поколений я публикую информацию о том, как я в конечном итоге заставил его работать:

Как упоминалось выше, при запуске с -jar java, очевидно, игнорирует путь к классам.Так что не запускайте его с -jar.вместо этого включите банки в путь и запустите класс напрямую.Обращаем внимание, должно работать следующее (пути указаны в моей системе Ubuntu 12.10):

java -cp /usr/share/java/antlr.jar:/full/path/to/parsemis.jar de.parsemis.Miner

Затем вы можете передать опции к описанному выше.Возможно, вы используете полные пути, а не ярлыки типа ~ / foo, так как они, очевидно, не раскрываются.

Конечно, если вы используете граф в формате Dot, как я, он умирает очень ранона жалобу на "неожиданный символ 0xA", но, по крайней мере, он идет дальше.

...