2011-02-23 81 views
4

我使用javac進行增量構建時,似乎在我的項目中出現運行時錯誤。是否支持這種類型的工作流程?例如,如果A.java取決於B.java,並且B.java被修改;將javac重新編譯爲A.java,因爲它的依賴性改變了?當它們的依賴關係發生變化時,如何讓javac重新編譯源文件?

現在,我使用的javac Ant構建任務編譯:

<javac destdir="${classes.dir}" 
      srcdir="${src.dir}" 
      source="${javac.version}" 
      debug="${javac.debug}" 
      deprecation="${javac.deprecation}" 
      includeantruntime="build.sysclasspath=last"> 
     <classpath refid="compile.classpath" /> 
     <classpath refid="junit.classpath" /> 
    </javac> 

回答

8

由於您使用的螞蟻,檢查出depend任務。

0

這取決於B.java中的變化。如果沒有任何更改會影響到類如何呈現給A,那麼javac不需要重新編譯A.java以使更改生效。這就是說,如果你看到行爲在你認爲舊代碼正在被加載和運行的時候,我會比編譯過程更加懷疑部署/打包過程。因人而異。

5

javac命令行編譯器將編譯命令行上給出的每個源文件,並且還會編譯這些文件所依賴的所有文件(如果它們沒有較新的類文件)。

螞蟻javac任務嘗試變得更智能一些,以避免總是編譯所有內容 - 它只重新編譯已更改的文件(即比它們各自的類文件更新)。這不關注可能某個類的依賴性發生變化的情況,因此其他類也需要重新編譯。

在我當前的項目中,只要我在測試(當然還有任何生產部署之前)出現問題時就簡單地執行ant clean,這會刪除所有類文件。但是正如vanza所說,depend任務的任務是查找和刪除所有依賴變更班級的班級 - 在javac任務之前執行此操作,您應該很好。

相關問題