Краткая форма: если ваш main находится внутри jar, вам, вероятно, понадобится дополнительный '-jar pathTo / yourJar / YourJarsName.jar', явно объявленный, чтобы заставить его работать (даже если 'YourJarsName.jar' был в пути к классам) (или , выраженный в ответ на исходный вопрос, заданный 5 лет назад: вам не нужно повторно объявлять каждую банку явно, но кажется, что даже с java6 вам нужно повторно объявить свою собственную банку ...)
Длинная форма: (я сделал это явным до такой степени, что надеюсь, что даже нарушители Java могут использовать это)
Как и многие здесь, я использую eclipse для экспорта jar-файлов: (Файл-> Экспорт -> «Запускаемый файл JAR»). В eclipse (Juno) есть три варианта работы с библиотекой:
opt1: "Extract required libraries into generated JAR"
opt2: "Package required libraries into generated JAR"
opt3: "Copy required libraries into a sub-folder next to the generated JAR"
Обычно я использовал opt2 (а opt1 определенно ломался), однако в собственном коде одной из используемых мною jar-файлов я обнаружил разрывы с помощью удобного трюка jarinjar, который eclipse использует, когда вы выбираете этот вариант. Даже после того, как я понял, что мне нужен opt3, а затем нашел эту запись в StackOverflow, мне все же потребовалось некоторое время, чтобы понять, как запустить мой main за пределами eclipse, поэтому вот что сработало для меня, так как это полезно для других ...
Если вы назвали свою банку: «fooBarTheJarFile.jar» и все настроено на экспорт в каталог: «/ theFully / qualifiedPath / toYourChosenDir».
(это означает, что в поле «Место назначения экспорта» будет указано: «/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar»)
После того, как вы нажмете «Готово», вы обнаружите, что eclipse помещает все библиотеки в папку с именем fooBarTheJarFile_lib в этом каталоге экспорта, что дает вам что-то вроде:
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar01.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar02.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar03.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar04.jar
Затем вы можете запустить из любой точки вашей системы с помощью:
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" -jar /theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar package.path_to.the_class_with.your_main.TheClassWithYourMain
(Для новичков в Java: 'package.path_to.the_class_with.your_main' - это объявленный путь к пакету, который вы найдете в верхней части файла 'TheClassWithYourMain.java', который содержит 'main (String [] args) {.. .} ', который вы хотите запустить извне java)
Обратите внимание на ловушку: недостаточно иметь 'fooBarTheJarFile.jar' в списке jar-файлов в объявленном пути к классам. Вам нужно явно объявить '-jar' и повторно объявить местоположение этого jar-файла.
например это ломается:
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar;/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" somepackages.inside.yourJar.leadingToTheMain.TheClassWithYourMain
переформулирован с относительными путями:
cd /theFully/qualifiedPath/toYourChosenDir/;
BREAKS: java -cp "fooBarTheJarFile_lib/*" package.path_to.the_class_with.your_main.TheClassWithYourMain
BREAKS: java -cp ".;fooBarTheJarFile_lib/*" package.path_to.the_class_with.your_main.TheClassWithYourMain
BREAKS: java -cp ".;fooBarTheJarFile_lib/*" -jar package.path_to.the_class_with.your_main.TheClassWithYourMain
WORKS: java -cp ".;fooBarTheJarFile_lib/*" -jar fooBarTheJarFile.jar package.path_to.the_class_with.your_main.TheClassWithYourMain
(с использованием версии java "1.6.0_27"; через виртуальную машину 64-разрядного сервера OpenJDK в ubuntu 12.04)
person
Matt S.
schedule
29.06.2013
.
послеjar:
поставлен по ошибке, но ..... Стандартным символом для `текущего каталога 'является одиночная точка (.) Как в системах Unix, так и в Windows. - person KNU   schedule 20.11.2014.jar
часть, (2) должно быть как минимум 2 части, разделенные;
в Windows (что обычно:
в другом месте). Например:java -classpath ".;lib/*" Program
- person Evgeni Sergeev   schedule 12.12.2014