Skrócony formularz: Jeśli główny plik znajduje się w słoiku, prawdopodobnie będziesz potrzebować dodatkowego „-jar pathTo / yourJar / YourJarsName.jar” jawnie zadeklarowanego, aby działał (nawet jeśli „YourJarsName.jar” znajdował się w ścieżce klas) (lub , wyrażony w celu udzielenia odpowiedzi na pierwotne pytanie, które zostało zadane 5 lat temu: nie musisz ponownie jawnie ponownie określać każdego słoika, ale wydaje się, że nawet w java6 musisz ponownie sformułować własny słoik ...)
Długa forma: (Wyjaśniłem to do tego stopnia, że mam nadzieję, że nawet intruzi do java mogą z tego skorzystać)
Jak wielu tutaj używam Eclipse do eksportowania słoików: (Plik-> Eksportuj -> 'Plik Run Jble'). Istnieją trzy opcje dotyczące zaćmienia „Obsługa bibliotek” (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"
Zwykle używałbym opt2 (a opt1 zdecydowanie się zepsuł), jednak natywny kod w jednym ze słoików, z których korzystam, odkryłem przerwy w przydatnej sztuczce „jarinjar”, która wykorzystuje zaćmienie, gdy wybierzesz tę opcję. Nawet po uświadomieniu sobie, że potrzebuję opt3, a następnie znalezieniu tego wpisu StackOverflow, zajęło mi trochę czasu, aby wymyślić, jak uruchomić moją główną poza zaćmieniem, więc oto, co działało dla mnie, ponieważ jest przydatne dla innych ...
Jeśli nazwałeś swój jar: „fooBarTheJarFile.jar”, a wszystko jest ustawione na eksport do katalogu: „/ theFully / Qualified Path / toYourChosenDir”.
(co oznacza, że pole „Eksportuj miejsce docelowe” będzie brzmiało: „/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar”)
Po ukończeniu znajdziesz zaćmienie, a następnie umieści wszystkie biblioteki w folderze o nazwie „fooBarTheJarFile_lib” w tym katalogu eksportu, dając ci coś takiego:
/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
Następnie możesz uruchomić z dowolnego miejsca w systemie za pomocą:
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" -jar /theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar package.path_to.the_class_with.your_main.TheClassWithYourMain
(Dla Java Newbies: „pakiet.path_to.the_class_with.your_main” to zadeklarowana ścieżka pakietu, która znajduje się u góry pliku „TheClassWithYourMain.java”, który zawiera „main (String [] argumenty) {.. .} ”, który chcesz uruchomić spoza Java)
Pułapką, którą należy zauważyć: jest to, że posiadanie pliku „fooBarTheJarFile.jar” na liście słoików w zadeklarowanej ścieżce klasy nie wystarczy. Musisz jawnie zadeklarować „-jar” i ponownie określić lokalizację tego słoika.
np. to łamie:
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar;/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" somepackages.inside.yourJar.leadingToTheMain.TheClassWithYourMain
przekształcony ze ścieżkami względnymi:
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
(przy użyciu wersji Java „1.6.0_27”; za pośrednictwem 64-bitowej maszyny wirtualnej serwera OpenJDK w systemie Ubuntu 12.04)