短い形式:メインがjar内にある場合、それを機能させるために明示的に宣言された追加の「-jar pathTo / yourJar / YourJarsName.jar」が必要になるでしょう(「YourJarsName.jar」がクラスパス上にあったとしても)(または、5年前に尋ねられた元の質問に答えるために表明されました:各jarを明示的に再宣言する必要はありませんが、java6を使用している場合でも、独自のjarを再宣言する必要があるようです...)
長い形式:(Javaへの侵入者でさえこれを利用できることを願って、これを明示的にしました)
多くのように、ここではEclipseを使用してjarをエクスポートしています(File-> Export-> 'Runnable JAR File')。「ライブラリー処理」Eclipse(Juno)オファーには3つのオプションがあります。
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のネイティブコードは、そのオプションを選択するとEclipseが活用する便利な「jarinjar」トリックで壊れていることを発見しました。私がopt3が必要であることを認識し、このStackOverflowエントリを見つけた後でも、Eclipseの外でメインを起動する方法を理解するにはまだ時間がかかりました。他の人に役立つので、ここで私がうまくいったことを...
jarに "fooBarTheJarFile.jar"という名前を付け、すべてがdir: "/ 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'は、 'main(String [] args){.. 。} 'Javaの外部から実行したいことを意味します)
注意すべき落とし穴:宣言したクラスパスのjarのリスト内に '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"を使用。ubuntu12.04のOpenJDK 64ビットサーバーVM経由)