JRake
2006 年 12 月 18 日
現在 JRuby 變得越來越成熟,許多人開始思考要採取行動,以 rake 取代 ant,進而改善建置腳本的世界。
我以前的同事 Matt Foemmel 已經開始著手進行這件事,並在 FoemBlog 上撰寫進度報告。Matt 寫的建置腳本數量比大多數人還多,而我們在 2000 年左右都誤以為基於 XML 的建置檔案是可行的途徑。現在我們都認為需要一種完整的腳本語言。
建置腳本的問題在於需要同時具備宣告式和程序式品質。建置檔案的核心是定義任務及其之間的相依性。這是宣告式部分,也是 ant 和 make 等工具擅長的領域。問題是隨著建置變得越來越複雜,這些結構就不夠用了。你會開始需要條件式邏輯;特別是需要能夠定義自己的抽象化。(請參閱 我的 rake 文章 以取得範例。)
Rake 的優點在於它能同時提供這兩者。它提供一個簡單的宣告式語法來定義任務和相依性,但由於這個語法是一個內部的 DomainSpecificLanguage,因此你可以無縫地融入 Ruby 的所有功能。
對於 Java 建置來說,Rake 的一個重大問題是難以避免啟動 Java VM 的次數過多。JRake 在 JRuby 上執行,而 JRuby 會在 Java VM 內部執行,因此這個問題就消失了。
我經常聽到有人反對將 rake 用於建置,理由是它會增加人們必須學習的另一種語言。這個論點忽略了一點,那就是 ant 本身就是一種語言。它符合 XML 規範的事實並不會改變你仍然必須了解所有不同 ant 任務如何運作並相互配合的事實。當然,如果你已經知道 ant,那麼學習 rake 就需要額外的努力;但如果沒有任何既有觀念,我不認為 rake + ruby 會更難,而且腳本語言還能為你做許多其他事情。(我相信每個程式設計師都應該至少熟悉一種腳本語言,因為它們有許多有用的功能。)
由於 ant 投入了許多資源,它還會存在一段時間,但我們認為 rake 是未來的更好解決方案。