2

これは、のタイムスタンプより前のタイムスタンプを持っているという条件で、をjavac再コンパイルしないほど賢いと言われています。私はそれが私のマシンではそのように機能しないことに気づきました、私は確かにどこかで間違っていますか?.java.java.class

P.javaはの下.../eg/accessにありP.java、アクセスのパッケージとして宣言されています

eg 
 |- access 
      |- P.class
      |- P.java

次に、実行すると、再コンパイルjavac P.javaされるたびに、それは正常ですか、それとも間違っていますか?

4

3 に答える 3

7

Javacはデフォルトで、毎回すべてを再コンパイルします。観察する動作は正しく、設計によるものです。

ただし、この動作のオプションを指定できるようです。

-Xprefer:{newer、source}

タイプのソースファイルとクラスファイルの両方が見つかったときに読み取るファイルを指定します。(タイプの検索を参照してください)。-Xprefer:newerを使用すると、タイプのソースファイルまたはクラスファイルの新しい方が読み取られます(デフォルト)。-Xprefer:sourceオプションを使用すると、ソースファイルが読み取られます。注釈プロセッサがSOURCEの保持ポリシーで宣言された注釈にアクセスできることを確認する場合は、-Xprefer:sourceを使用します。

取得元:http ://docs.oracle.com/javase/6/docs/technotes/tools/windows/javac.html

また、Eclipseのコンパイラについて考えているかもしれません。これは、インクリメンタルコンパイルを実行すると確信しています。または、そのような場合を理解するのに十分賢いantのjavacタスクです。

于 2011-11-25T15:43:57.077 に答える
5

毎回再コンパイルされるのが普通です。javacはインクリメンタルコンパイルを行いません。

于 2011-11-25T15:40:59.303 に答える
2

javacコマンドライン実行可能ファイルとjavacApacheAntのタスクを混同しているかもしれません。javacバイナリファイルより古いか新しいかに関係なく、ソースファイルを常に再コンパイルします。Antは、ファイルをいつ再コンパイルする必要があるかを理解するのに十分賢いですが、もちろん、この機能を利用するには、Antビルドシステムを使用する必要があります。

于 2011-11-25T15:43:35.937 に答える