2012-06-28 6 views
7

をjarファイルを作成します。私は、次のディレクトリ階層持つコマンドラインから

ここ
SigarTest 
src 
    SigarTest 
    .java files 
bin 
    SigarTest 
    .class files 

を、SigarTestはパッケージ名です。ルートフォルダは、jdkのbinフォルダにあります。そこから 、私のプロジェクトのjarファイルを作成するには、次のコマンドを実行しているイム -

tools.jarを、モンゴ-2.7.3.jarとsigar.jarが必要とと同じフォルダにあるされている
./jar cfe temp.jar SigarTest.SigarMain SigarTest/bin/ tools.jar sigar.jar mongo-2.7.3.jar 

ルートディレクトリ(jdkのbinフォルダ)。しかし、それを実行すると、私は得る

ClassNotFoundException : SigarTest.SigarMain 

私は間違って何をしていますか?

+0

jar cfe temp.jar SigarTest.SigarMain.class SigarTest/bin .... try彼 –

+0

@AlpeshPrajapati:それは私がやったことと同じですか? – Cygnus

+0

あなたはSigarTest.SigarMainの後に.classを追加していません... –

答えて

5

使用後入力ファイル引数を処理する間

が一時的jarコマンドの実行中にディレクトリ(cdDIR)を変更-Cdir option。 temp.jarにSigarTest/binがあることを

$ rm -rf temp.jar 
$ jar cfe temp.jar SigarTest.SigarMain SigarTest/bin/ tools.jar sigar.jar mongo-2.7.3.jar 
$ jar tf temp.jar 
META-INF/ 
META-INF/MANIFEST.MF 
SigarTest/bin/ 
SigarTest/bin/SigarTest/ 
SigarTest/bin/SigarTest/SigarMain.class 
tools.jar 
sigar.jar 
mongo-2.7.3.jar 
$ java -jar temp.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: SigarTest/SigarMain 
Caused by: java.lang.ClassNotFoundException: SigarTest.SigarMain 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 

注:あなたがあなたの質問にjarコマンドを実行し、temp.jarの内容を一覧表示する場合は、次のような出力が表示されます

間違っています。 temp.jarを実行するとClassNotFoundExceptionが返されます。SigarMainはパッケージに入っています。

$ rm -rf temp.jar 
$ jar cfe temp.jar SigarTest.SigarMain -C SigarTest/bin/ . tools.jar sigar.jar mongo-2.7.3.jar 
$ jar tf temp.jar 
META-INF/ 
META-INF/MANIFEST.MF 
SigarTest/ 
SigarTest/SigarMain.class 
tools.jar 
sigar.jar 
mongo-2.7.3.jar 
$ java -jar temp.jar 

SigarMainが正しいパッケージにあり、temp.jarを実行するとClassNotFoundExceptionをスローしません:今すぐ-CDIRオプションを使用して、次のjarのコマンドを検討してください。

+0

ありがとうLOT !!それは解決しました:) – Cygnus

+0

Btwは、-Cを実行すると、ディレクトリ名に続くファイルまたはその名前に続くすべての値だけが変更されたディレクトリですか?これによると、それは後者の権利でしょうか? – Cygnus

+1

ドキュメントは少し混乱しています。いくつかのテストから、私はそれがちょうど '-C SigarTest/bin /にある理由を説明している1つのファイルであることがわかりました。 tools.jar'、 'SigarMain.class'は' SigarTest/bin/'から取得され、' tools.jar'は 'jar'が実行されたディレクトリから取得されます。また' -C'を複数回指定することもできます。 – creemama

関連する問題