Коротка форма: Якщо ваш основний знаходиться в банці, вам, мабуть, знадобиться додатковий '-jar pathTo / yourJar / YourJarsName.jar', явно оголошений, щоб він працював (навіть якщо «YourJarsName.jar» знаходився на класі) (або , виражений, щоб відповісти на початкове запитання, яке було задано 5 років тому: вам не потрібно чітко переосмислювати кожну банку, але, здається, навіть за допомогою java6 вам потрібно передекларувати власну банку ...)
Довга форма: (Я зробив це явним чином до того, що сподіваюся, навіть інтерлопери для Java можуть скористатися цим)
Як і багато хто тут, я використовую eclipse для експортування банок: (Файл-> Експорт -> 'Виконаний файл JAR'). Існує три варіанти пропозицій затемнення "Поводження з бібліотекою" (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 напевно був зламаним), однак нативний код в одній з банок, які я використовую, я виявив перерви зі зручним трюком "jarinjar", який затемнення використовує, коли ви виберете цей варіант. Навіть після того, як я зрозумів, що мені потрібен opt3, а потім знайшовши цей запис StackOverflow, мені все ж знадобився певний час, щоб зрозуміти, як запустити головну поза поза затемнення, тож ось що для мене спрацювало, як це корисно для інших ...
Якщо ви назвали ваш jar: "fooBarTheJarFile.jar", і все встановлено для експорту в dir: "/ theFully / кваліфікований шлях / toYourChosenDir".
(тобто поле "Експорт пункту призначення" буде читати: '/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar')
Після того, як ви закінчите, ви знайдете затемнення, а потім поміщає всі бібліотеки у папку з назвою '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.
наприклад, це перерви:
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-бітний сервер VM для OpenJDK на ubuntu 12.04)