私は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
です。
誰かがこれらのオプションの詳細を理解するのを手伝ってくれるなら素晴らしいです。
-classpath classpath
CLASSPATH環境変数でユーザークラスパスを上書きして、ユーザークラスパスを設定します。 CLASSPATHも-classpathも指定されていない場合、ユーザークラスパスは現在のディレクトリで構成されます。
-sourcepathオプションが指定されていない場合、ユーザークラスパスでソースファイルとクラスファイルが検索されます。
-sourcepath sourcepath
クラスまたはインターフェースの定義を検索するためのソースコードパスを指定します。ユーザークラスパスと同様に、ソースパスエントリはセミコロン(;)で区切られ、ディレクトリ、JARアーカイブ、またはZipアーカイブにすることができます。パッケージを使用する場合は、ディレクトリまたはアーカイブ内のローカルパス名にパッケージ名を反映させる必要があります。
ソースが見つかった場合、クラスパスを通じて見つかったクラスは自動再コンパイルの対象となることに注意してください。
CLASSPATHは、必要な.classファイルを探す場所をコンパイラーとクラスローダーに指示します。
Sourcepathは私があまり使用しないものです。通常は現在のディレクトリがソースパスであるため、これはオプションであると思います。 CLASSPATHはそうではありません。
ただし、sourcepathが指定されていない場合、クラスパスでクラスファイルとソースファイルの両方が検索されます。
これにより、クラスパスだけを使用し、ソースパスを完全に回避することで、ほとんどの場合は物事をシンプルに保つことができると私は信じています。
クラスパスとソースパスの両方を使用する必要がある人々は、おそらく奇妙なディレクトリの内容をターゲットにしているでしょう。たとえば、ソースファイルとクラスファイルを含むフォルダがあり、ソースファイルのみを検索したい場合があります。