5

オラクル認定の勉強中 試験中に発生する可能性のあるすべてのシナリオを試しています。たとえば、ここではシェル コマンド ライン (UNIX ベース) について少し疑問があります。

というフォルダーとmyProject、というサブフォルダーがあるとします。myProject/source.

ファイルSubFile.javaはフォルダmyProject/sourceにあり、別のファイルFile.javamyProjectフォルダにあります。

次のコマンドを入力すると、さまざまな動作が得られます。

cd source(したがって、現在私は「myProject/source」にいます)

javac -sourcepath ../ File.java
// コマンド ../ は、「フォルダー」にアクセスするために機能しません。その後、フォルダーからコンパイルFile.javamyProjectてサブフォルダーに戻った後、次のようにします。

javac -classpath ../ SubFile.java

// フラグを使用すると、フォルダーにアクセスするための構文を-classpath受け入れるように見えます。../super

なぜこのように機能するか知っていますか?さらに、フラグのあるsuperフォルダーにアクセスする機会はありますか?-sourcepath

4

1 に答える 1

4

参照するかどうかにSubFileもよりますFile

次のコードを検討してください。

public class SubFile {
    private static File file = new File();
}

このファイルがソース フォルダーにあると仮定し、ソース フォルダーにいると仮定すると、

javac -sourcepath ../ SubFile.java

ソースフォルダー内にコンパイルさSubFile.javaれ、親フォルダー内にコンパイルされます。これらのファイル間に依存関係がない場合、コンパイラはコンパイルしません(つまり、コンパイラは .xml 上のすべてのファイルを自動的にコンパイルしません)。SubFile.classFile.javaFile.classFile.javasourcepath

でコンパイルする場合、別のソース パスを明示的に指定しない限り-classpath、ソース ファイルのクラスパスも検索されます。 次の場合、コンパイラはエラーをスローします (以前に File.class ファイルを消去したと仮定します)。

javac -classpath .. -sourcepath \temp SubFile.java

詳しくは、javac - Java プログラミング言語コンパイラーおよびjavac のクラスパスとソースパスのオプションの違いも参照してください。

これら 2 つのリンクの重要なポイントは次のとおりです。

注: クラス パスを介して見つかったクラスは、そのソースも見つかった場合、自動再コンパイルの対象となる場合があります。

于 2013-02-26T11:07:28.363 に答える