不正なパスの警告はどこから来ているのでしょうか? 質問する

不正なパスの警告はどこから来ているのでしょうか? 質問する

コンパイラ警告 (JDK 1.5) 付きでプロジェクトをコンパイルすると、不正なパス要素の警告が多数表示されます。

警告:: [パス] 不正なパス要素 "C:\Users\User\MyJava\common\lib\junit.jar": そのようなファイルまたはディレクトリはありません 警告:: [パス] 不正なパス要素 "C:\Users\User\MyJava\common\lib\jdom.jar": そのようなファイルまたはディレクトリはありません 警告:: [パス] 不正なパス要素 "C:\Users\User\MyJava\common\lib\xerces.jar": そのようなファイルまたはディレクトリはありません 警告:: [パス] 不正なパス要素 "C:\Users\User\MyJava\common\lib\xml-apis.jar": そのようなファイルまたはディレクトリはありません

などなど。

これは IDEA 8.1.3 を使用しています。IDEA の構成 (プロジェクト全体を grep しました) でこれらのファイルを指すものがどこにも見つかりません。確かにその名前ではすべてもう存在しませんが、何がそれらを参照しているのでしょうか?

ベストアンサー1

@Yishai の言うことは正しいと思います (物事を軌道に乗せてくれた彼に賛成票を投じます)。私はいつもこれに遭遇します。Java 言語にとってひどい決定だったと思いますが、クラスパス設定を jar ファイル内の MANIFEST ファイルに入れることを許可しても問題ないと判断しました。つまり、基本的に、jar には他の場所にある他のクラスや 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 に対してアクションを実行する必要があるかがわかるはずです。

おすすめ記事