私は、単純なクラスのカップルがあります:私は、定数に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つの間に明確なコンパイル時の依存関係があります。後にさらに少し周りを見た
(私は、この問題のビットのでハード持って、確かにツールの一つのバグである私には思える。または私は何かが足りないのですか?)
関連:https://netbeans.org/bugzilla/show_bug.cgi?id=75236 –
@AndyTurnerリンクは、主に次のように言います:アリ依存性チェックは良いとは思いません。それはここのポイントですか? – GhostCat