2011-08-24 21 views
14

私はjavacでコンパイルしようとしたとき、私はEclipseでいる時、私のプロジェクトがエラーなしでコンパイルし、しかしそれは、私はいくつかのパッケージを欠けていると言う...JARファイルをjavacで見つける方法は? (Eclipseがそれらを見ることができる)

私は私のコンパイルコマンドをコピーして、以下のエラーテキストの一部:Eclipseで

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 

は、私がビルドパスにすべての.jarファイルを追加した、とプログラムがうまくコンパイルされます。

Eclipse IDEではなくjavacを使用するとjarファイルが見つからないのはなぜですか?

+0

Eclipseは*表示されていたので、どこに見えるのですか?javacはありませんでした:-)ここには魔法はありません。 –

答えて

15

-classpath lib/javacは、クラスファイルのツリーをlibに探します。 *それはjavacではなくjavac command reference (windows)を参照してください。CLI

によって拡張されて到達したことを確認すると、おそらくあなたのCLIは上があるものは何でもエスケープ機構を使用 - あなたがそこにJARアーカイブを持っている場合は、-classpath lib/*.jarを使用する必要があります。

+0

完璧な、そのトリックをした!ありがとうございました! – theangryhornet

8

現状の答えは、それなりの有益な情報として、javac -classpathのドキュメントを参照する必要があります。

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のコマンドライン*を展開しないように私はそれをエスケープする必要はありませんを教えてください:​​は大丈夫です。
  • ;は、javac -cp ".;a/;b/;c/" Example.javaのようにパスを区切ります。これにより、現在のディレクトリ、a、b、cのディレクトリに.class個のファイルがロードされます。
  • セパレータ(;)を使用する場合は、クラスパスを引用符で囲みます(例のように)。
関連する問題