我有幾個簡單的類:Java爲什麼不依賴常量會導致重新編譯?
// 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構建文件:
<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>
我跑ant
,然後運行java -cp build Print
,我得到我期望的輸出,A: 100, B: 101
。精細。然後我編輯Consts.java來設置A = 200和B = 201並重新運行ant
。它說「編譯1個源文件」,這是Consts.java(通過查看類文件的時間戳來確認)。然後我重新運行java -cp build Print
並打印A: 100, B: 101
。至少可以說,這是意想不到的。
谷歌搜索表示Consts的值在編譯時被替換爲打印源。這很好,但我的問題是:爲什麼ant + javac不能重新編譯當Consts改變時打印?這兩者之間存在明顯的編譯時間依賴性。
(我剛剛有點所以很難通過這個問題,在我看來,這肯定是在的工具之一的錯誤。還是我失去了一些東西?)
相關:https://netbeans.org/bugzilla/show_bug.cgi?id=75236 –
@AndyTurner我認爲這個鏈接主要是說:螞蟻依賴性檢查不太好。這是否重要? – GhostCat