Изменяет ли параметр java -jar параметры пути к классам? - PullRequest
6 голосов
/ 06 декабря 2011

У меня есть файл jar, в котором упоминается основной класс в манифесте.Когда я пытаюсь выполнить банку, используя следующую команду

java -cp .;./* com.foo.MainClass

Код выполняется и работает.

Когда я пытаюсь выполнить банку, используя следующую команду

java -cp .;./* -jar myjar.jar

Я получаю исключения по классам для некоторых jar-файлов, которые находятся в той же папке, что и myjar.jar.Я надеюсь, что опция -cp будет включать эти файлы в путь к классам.Я изменил свой код для печати свойства java.class.path.В первом случае он перечислил все jar-файлы в текущем каталоге, а во втором - просто myjar.jar

Я также изменил манифест, добавив в него элемент Class-Path со всеми jar-файлами.Тогда вторая команда работает.Но в моем коде я пытаюсь загрузить класс aribtrary, имя которого указано в командной строке, поэтому я хочу, чтобы путь к классу содержал все jar-файлы в папке.Как мне заставить работать вторую команду в этом сценарии?

Ответы [ 3 ]

6 голосов
/ 06 декабря 2011

С this ,

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

0 голосов
/ 08 октября 2013

Здесь - хорошее обсуждение этого вопроса.

0 голосов
/ 06 декабря 2011

Вам понадобится ваш собственный загрузчик классов, чтобы справиться с этим. -jar учитывает только информацию в Манифесте, и подстановочные знаки там не допускаются.

Может пригодиться пример перезагружаемого класса: http://www.exampledepot.com/egs/java.lang/ReloadClass.html

...