web-dev-qa-db-ja.com

javacのクラスパスオプションとソースパスオプションの違い

私はSunのドキュメントとStack Overflowに関する多くの投稿を読みましたが、Javaコンパイラオプション-cp-sourcepath]の違いについてはまだ混乱しています。

私がこのディレクトリ構造を持っているとしましょう:

c:\Java\project1\src (where the Java source files are)  
c:\Java\project1\bin (where the Java class files will be or already are)  

また、パッケージMainClass.Javaにソースファイルcom.mypackageがあり、ソースフォルダーのディレクトリ構造は問題ないとします。

私はproject1ディレクトリにいて、実行します:

javac -d bin -sourcepath src src/com/mypackage/MainClass.Java  

または

javac -d bin -classpath src src/com/mypackage/MainClass.Java  

同じ結果が得られます。冗長モードでは、ソースファイルの検索パスはどちらの場合もsrcです。

誰かがこれらのオプションの詳細を理解するのを手伝ってくれるなら素晴らしいです。

35
Alex
 -classpath classpath

CLASSPATH環境変数でユーザークラスパスを上書きして、ユーザークラスパスを設定します。 CLASSPATHも-classpathも指定されていない場合、ユーザークラスパスは現在のディレクトリで構成されます。

-sourcepathオプションが指定されていない場合、ユーザークラスパスでソースファイルとクラスファイルが検索されます。

-sourcepath sourcepath

クラスまたはインターフェースの定義を検索するためのソースコードパスを指定します。ユーザークラスパスと同様に、ソースパスエントリはセミコロン(;)で区切られ、ディレクトリ、JARアーカイブ、またはZipアーカイブにすることができます。パッケージを使用する場合は、ディレクトリまたはアーカイブ内のローカルパス名にパッケージ名を反映させる必要があります。

ソースが見つかった場合、クラスパスを通じて見つかったクラスは自動再コンパイルの対象となることに注意してください。

25
stacker
  • sourcepathは、コンパイルするコードのルートです。
  • クラスパスには、コードだけでなく、必要なライブラリも含めることができます
11
Kartoch

CLASSPATHは、必要な.classファイルを探す場所をコンパイラーとクラスローダーに指示します。

Sourcepathは私があまり使用しないものです。通常は現在のディレクトリがソースパスであるため、これはオプションであると思います。 CLASSPATHはそうではありません。

5
duffymo
  • クラス(.class)ファイルのクラスパスが検索されます
  • sourcepathでソース(.Java)ファイル(.a.k.aクラスまたはインターフェースdefinitions)が検索されます

ただし、sourcepathが指定されていない場合、クラスパスでクラスファイルとソースファイルの両方が検索されます。

これにより、クラスパスだけを使用し、ソースパスを完全に回避することで、ほとんどの場合は物事をシンプルに保つことができると私は信じています。

クラスパスとソースパスの両方を使用する必要がある人々は、おそらく奇妙なディレクトリの内容をターゲットにしているでしょう。たとえば、ソースファイルとクラスファイルを含むフォルダがあり、ソースファイルのみを検索したい場合があります。

3
Niko Bellic