私が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が見つからないのはなぜですか?
-classpath lib/
は、javac
がlib
でクラスファイルのツリーを検索するようにします。 JARアーカイブがある場合は、-classpath lib/*.jar
を使用する必要があります。CLIで展開されているのではなく、CLIが*で使用しているエスケープメカニズムを使用して、確実にjavac
に到達するようにします。
javacコマンドリファレンス(windows) を参照してください。
既存の回答は、それでも有益な情報ですが、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
ファイルがロードされます。;
)を使用する場合は、クラスパスを引用符で囲みます(例のように)。