30

コンパイラの警告 (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 しました) のどこにも見つかりません。それらはすべてその名前で実際にはもう存在しませんが、それらを参照するものは何ですか?

4

4 に答える 4

36

@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 を見つけ出すことができれば幸いです。

于 2009-08-28T04:58:18.140 に答える
28

これによると、問題は、サードパーティのjarファイルにマニフェストにこれらへの参照があることです。このメッセージは、コンパイルパラメータに-Xlint:-pathを追加することで無効にできます。

于 2009-08-28T02:34:09.007 に答える
0

CLASSPATH環境変数とコンパイルオプションが設定されている場所を確認しましたか?

于 2009-08-27T23:46:39.250 に答える
0

問題のパス要素は、JAR のマニフェスト ファイルにある可能性が最も高いです。問題のある JAR を見つけるには、マニフェスト ファイルのみを抽出し、含まれているクラスパスを表示する次のシェル スクリプトを実行できます。

for i in *.jar; do echo $i; /path/to/your/jdk/bin/jar xf $i META-INF/MANIFEST.MF; grep -i 'class-path' META-INF/MANIFEST.MF; done
于 2015-11-21T23:35:57.900 に答える