2016-09-24 7 views
0
build> jar cvfe test\MyJavaLibrary.jar Main -C test\java Main.class foo\SomeClass.class 
foo\SomeClass.class : no such file or directory 
added manifest 
adding: Main.class(in = 444) (out= 308)(deflated 30%) 

対応するディレクトリ構造を見つけることができません作成することは、代わりに最後の引数としてtest\java\foo\SomeClass.classを使用した場合、それが正しく動作することを非常に奇妙であるjarコマンドはファイル

build/ 
    test/ 
    java/ 
     foo/ 
     SomeClass.class 
     Main.class 

です。ファインですが、最初の引数で同じことをすると、それは動作しません。つまり、test\java\Main.classです。この動作は非常に矛盾しているようです。

foo\SomeClass.class以上が見つからないのはなぜですか?Jarを作成する正しい方法は何ですか?

Javaバージョン「1.8.0_102」

答えて

1

あなたは、コマンドラインから実行している実行ファイルはbuildディレクトリで起動するように見える、とのような、それはどこかを知りませんfoo\SomeClass.classファイルはbuildに関連しています。これは、なぜtest\java\foo\SomeClass.classが動作するのかを説明します(実行ディレクトリを基準にしてファイルを見つける方法を知っています)。

あなたはbuild内部のトップレベルにfooフォルダを持っているとしたら、私はそれが正常に働くだろうと考えていますが、fooは、ディレクトリの二つの層内にネストされているため、実行可能ファイルはどこそれとフォルダを探しには考えていません現在のディレクトリの名前。

+0

しかし、それはありません、 '-Cテストの\ java'フラグは何のためにあるのかですか?さもなければ、それは 'Main.class'をどのように見つけるでしょうか? –

+0

"-C test \ java"オプションの影響を受けるのは最初のパスだけでしょうか? –

+1

あなたが正しいです、引数は次の入力ファイルにのみ影響します。私が追加した答えを見てください。 –

1

これまで私が見たことのないドキュメントページで答えが見つかりました。

-Cdir 次のinputfiles引数を処理している間に一時的にディレクトリをdirに変更します。複数の-Cディレクトリ入力ファイルセットが許可されています。

明らかに、指定された入力だけでなく、すべての入力に対して-C引数を配置する必要があります。

出典:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jar.html