Настройка пути к классам по-прежнему не может найти внешнюю банку

Я пытаюсь запустить тестовую банку VLCJ из командной строки. VLCJ требует два внешних JAR-файла

  • jna.jar
  • платформа.jar

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

java -classpath "C:\Users\Constantin\workspace\Java Libraries\JNA" -jar executable.jar

Он не может найти класс из библиотек JNA. Я очень новичок в Java, и мои поиски не дают возможного ответа. Поэтому я надеялся, что кто-то может помочь ответить:

Как это отладить? Почему не находит банку? Я делаю что-то не так с моим -classpath?

Заранее спасибо!

Константин


person Constantin    schedule 25.02.2012    source источник
comment
@RanRag Нет; согласно параметрам Java, один раз -jar, все остальные настройки пути к классам будут игнорироваться.   -  person Dave Newton    schedule 25.02.2012
comment
@DaveNewton: спасибо удалили мой комментарий.   -  person RanRag    schedule 25.02.2012


Ответы (1)


Включите файлы jar явно или с помощью простого подстановочного знака *, но также включите исполняемый файл jar. Укажите класс main исполняемого файла jar в командной строке (он будет в манифесте).

java -classpath "C:\Users\Constantin\workspace\Java Libraries\JNA\*;executable.jar" com.foo.Bar

(Где com.foo.Bar — это класс, содержащий метод main, точку входа приложения.)

См. документацию по параметрам Java -- после указания jar вся остальная информация о пути к классам отбрасывается, и указанный вами jar должен содержать все пользовательские классы.


Не имеет отношения, но я всегда стараюсь избегать путей с пробелами в Windows. Ну, везде, но особенно когда речь идет о вещах, связанных с Java. Это должно работать и, как правило, работает, но бывают крайние случаи, когда это не работает (я смотрю на вас, некоторые версии некоторых серверов приложений).

person Dave Newton    schedule 25.02.2012
comment
Привет, Дэйв, я изучил документ по параметрам Java. Спасибо за ссылку. Я извлек META-INF/MANIFEST.MF и установил путь к классам. Будет ли этот путь к классам перезаписан или он перезаписывает? Какие параметры я использую, чтобы включить все файлы jar и установить основной класс? - person Constantin; 25.02.2012
comment
@Constantin Честно говоря, не уверен - если jar устанавливает свой собственный путь к классам, он, вероятно, будет использовать его. Если он включает в себя рассматриваемые банки, может быть достаточно поместить их туда, где их ожидает исполняемый файл jar... но не совсем уверен, мне придется попробовать. - person Dave Newton; 25.02.2012
comment
Я понял! java -cp "C:\Users\Constantin\...\JNA\*;C:\Users\Constantin\...\vlcj\vlcj-1.2.2-test.jar" uk.co.caprica.vlcj.test.basic.TestPlayer - person Constantin; 25.02.2012