web-dev-qa-db-ja.com

javacにJARファイルを検索させる方法は? (Eclipseはそれらを見ることができます)

私がEclipseにいるとき、プロジェクトはエラーなしでコンパイルされますが、javacでコンパイルしようとすると、一部のパッケージが不足していると表示されます...

コンパイルコマンドと以下のエラーテキストの一部をコピーしました。

javac -classpath lib/ -d bin/ src/*.Java
src/Cleaner.Java:5: package net.sourceforge.jgeocoder does not exist
src/MyUtilities.Java:19: package org.Apache.commons.codec.binary does not exist

Eclipseでは、すべての.JARファイルをビルドパスに追加しました。プログラムは正常にコンパイルされます。

Eclipse IDEの代わりにjavacを使用すると、jarが見つからないのはなぜですか?

19
theangryhornet

-classpath lib/は、javaclibでクラスファイルのツリーを検索するようにします。 JARアーカイブがある場合は、-classpath lib/*.jarを使用する必要があります。CLIで展開されているのではなく、CLIが*で使用しているエスケープメカニズムを使用して、確実にjavacに到達するようにします。

javacコマンドリファレンス(windows) を参照してください。

17

既存の回答は、それでも有益な情報ですが、javac -classpath docsを調べなければならないのではないかと私は疑問に思いました。ここにあなたが知りたいかもしれないものの改訂があります:

javac -cp "lib/" Example.Javaは、.class内のすべてのlib/ファイルをロードします。
javac -cp "lib/\*" Example.Java.jar内のすべてのlib/ファイルをロードしますが、.classファイルはロードしません。
javac -cp "lib/;lib/\*" Example.Javaは、.jar内のすべての.classおよびlib/ファイルをロードします。

ノート:

  • 上記の例で使用されている*(ワイルドカード)文字はエスケープされています(\の前の*に注意してください)。 \はbash用で、他のものを使用している場合は異なる場合があります。 Java sdkユーティリティ、javacのような、ワイルドカードを解釈する独自の方法です。私が知る限り(間違っている場合は修正してください) )、Windowsコマンドラインは*を展開しないため、エスケープする必要はありません。-cp lib\*で問題ありません。
  • ;は、javac -cp ".;a/;b/;c/" Example.Javaのようにパスを区切ります。これにより、現在のディレクトリ、a、b、cのディレクトリにある.classファイルがロードされます。
  • 区切り記号(;)を使用する場合は、クラスパスを引用符で囲みます(例のように)。
14