2009-06-02 16 views
1

在最近與我們的ant腳本混雜在一起後,我開始懷疑是否有更好的可能。具有適當依賴性處理的Java構建器

我需要一個能夠知道爲我重新編譯所有需要的.java文件的構建器。

例如,對於這種結構

public class A { ] 
public class B extends A {} 
public class C { 
    B b; 
} 
  1. 對於:編譯( 'C')將知道編譯A,B,C.
  2. 對於:乙改變,編譯( 'C')將知道剛剛重新編譯乙

我知道幾種替代方案,Ivy這看起來像是我們目前的java builder的一個擴展。 Scons我們目前使用它來構建C++代碼,scons在做C代碼的上述行爲方面非常出色。然後有Maven的報告是almost but not quite there

你會建議什麼?您使用自由軟件/商業爲您構建系統的工具是什麼?

謝謝, Maxim。

回答

0

行家,無論是對我個人和我的商業產品

0

在你的問題你描述類間的依賴關係。大多數構建系統,特別是Maven,更多地針對項目間依賴關係。我相信大多數系統只是重新編譯項目中的所有類,這些構建系統的大部分好處是儘可能少地構建項目。

Maven和Ivy都將允許您輕鬆指定項目的外部和內部依賴關係,包括您依賴的項目的版本。作爲構建過程的一部分,它們也會自動將外部庫(如apache commons)下載到本地計算機(如果它們尚未本地緩存),則可以手動下載和組織第三方jar文件,節省大量工作。

常春藤是螞蟻的延伸,就像你提到的一樣。我建議Maven。這是一個面向會議的構建系統,我已經成功地使用了,感覺非常成熟。 Maven要求開始使用的前期工作要少得多,而且是相當可擴展的。

+0

重:常春藤VS行家:啓動一個新的項目,我同意Maven的要求較少的前期努力。對於現有的項目(比如這個項目),常春藤可以簡單地「插入」,而Maven通常需要更多的初始努力來調整自己的期望。這是要求遵守公約的祝福和詛咒。 – 2009-07-13 00:51:33

1

ivy,scons或maven都不會幫你解決問題。

  1. 你是什麼意思「編譯('C')」?我不認爲這是你的ant文件。
  2. 對於這種情況,Ant應該按照需要工作:您已經描述了它的默認行爲。在同一個javac元素中,Ant只會重新編譯更改的類。查看javac任務的Ant manual條目,特別是'includeDestClasses'屬性。

你應該發佈一個你找不到的示例ant文件。