@Yishaiにはその権利があると思います(ボールを転がすために彼に賛成票を投じます)。私はいつもこれに出くわします。Java 言語にとっては恐ろしい決定だったと思いますが、彼らはクラスパス設定を jar ファイル内の MANIFEST ファイルに入れることを許可しても問題ないと判断しました。したがって、本質的に、Jar は、別の場所にある他のクラスや jar を指すファイルを内部に持つことができ、それらが指している他のものが存在しない場合は、得ているような警告が表示されます。これらの警告は、コンパイル クラスパスにある Jar ファイルから出ています。したがって、本当に気にする場合は、問題のあるjarファイルを追跡し、jarファイルの内容を抽出し、マニフェストファイルの「クラスパス」設定を削除して再作成する必要があります.
#Extract the jar file
jar xvf myfile.jar
rm myfile.jar
emacs ./META-INF/MANIFEST.MF
*Find the entry "Class-path:" and remove it completely and save the changes
#Rebuild the jar file
jar cvf myfile.jar ./*
それでうまくいくはずです!
クラスパスに何が起こっているかを完全に制御したい場合は、これらのマニフェストファイルを検索し、それらがクラスパスを混乱させないようにする必要があるため、これらのメッセージを抑制したいだけではないと思います。について知る。
おそらく大量の jar ファイルに目を通さなければならないので、私は通常、それらを調べるのに役立つシェル ループを使用することになります。問題のすべての Jar を一時ディレクトリにコピーし、次のようなループを実行できます (bash 構文)。
for i in *.jar; do echo $i; jar xf $i; grep -i 'class-path' ./META-INF/MANIFEST.MF; done
これにより、現在のディレクトリ内のすべての Jar ファイルの名前が出力され、その内容が抽出され、クラスパス エントリのマニフェスト ファイルが grep されます。出力内の jar ファイルの名前の後に「Class-Path」が出力されている場合は、Jar のマニフェストにクラスパス設定があることを意味します。このようにして、アクションを実行する必要がある Jar を見つけ出すことができれば幸いです。