2016-11-02 8 views
9

私は、単純なクラスのカップルがあります:私は、定数にJava依存関係がないと、再コンパイルが行われないのはなぜですか?

<project name="Test" default="compile" basedir="."> 
    <!-- set global properties for this build --> 
    <property name="src" location="src"/> 
    <property name="build" location="build"/> 

    <target name="compile"> 
    <mkdir dir="${build}"/> 
    <!-- Compile the java code from ${src} into ${build} --> 
    <javac srcdir="${src}" destdir="${build}" debug="on" /> 
    </target> 

    <target name="clean"> 
    <delete dir="${build}"/> 
    </target> 
</project> 

私はjava -cp build Printを実行し、antを実行します。

// src/Consts.java 
public class Consts 
{ 
    public static final int A = 100; 
    public static final int B = 101; 
} 

そして:

// src/Print.java 
public class Print 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("A: " + Consts.A + " B: " + Consts.B); 
    } 
} 

私は、単純なAntビルドファイルを持っているが私が期待している出力、A: 100, B: 101を得てください。ファイン。次に、Consts.javaを編集してA = 200とB = 201に設定し、antを再実行します。これは、 "1つのソースファイルをコンパイルする"と言います。これはConsts.javaです(クラスファイルのタイムスタンプを見て確認します)。その後、java -cp build Printを再実行し、A: 100, B: 101を印刷します。それは予期せぬことであった。

Googleでは、Compsからの値がコンパイル時にPrintソースに代入されることを示しています。これは問題ありませんが、私の質問は次のとおりです:なぜConst +が変わったときにant + javacは再コンパイルしませんでしたか? 2つの間に明確なコンパイル時の依存関係があります。後にさらに少し周りを見た

(私は、この問題のビットのでハード持って、確かにツールの一つのバグである私には思える。または私は何かが足りないのですか?)

+1

関連:https://netbeans.org/bugzilla/show_bug.cgi?id=75236 –

+1

@AndyTurnerリンクは、主に次のように言います:アリ依存性チェックは良いとは思いません。それはここのポイントですか? – GhostCat

答えて

4

Andy Turnerのリンクを見れば、私はそれがそうであると思ったよりもはるかに愚かだと思う。

注:javac taskからApache Antが再構築を必要とするクラスを検索 にソースファイルとクラスファイルの名前のみを使用しています。ソースをスキャンすることはないので、 はネストされたクラス、 にソースファイルとは異なる名前が付けられたクラスなどの知識がありません。 の存在/変更時刻以外に基づく依存性チェックについては、 タスクを参照してください。これらの制限の

最も明白な例では、タスクは一定のプリミティブデータ型 が他でエクスポートしたときに再コンパイルするためにどのクラスわからない ことです。

ザ・も、この明示的に述べていdepend taskを述べましたクラスが変更されました。たとえば、 のような定義の変更

public final class定数{public final static boolean DEBUG = false; }

は他のクラスでは選択されません。

私の場合を正確に説明しているようです。私は、私にとってこのすべての教訓は、(a)蟻を使わない、(b)そうするならば、常にビルドの前にきれいにすることです。

関連する問題