一般來說,有適用於集成Java Groovy的兩種方法:
- 使Java代碼編譯並在運行時
執行Groovy代碼
- 編譯和打包Groovy代碼作爲構建的一部分,就像你可以使用Java代碼
使用1.如果您需要「腳本」解決方案,並且只有在運行時才知道要執行的Groovy代碼。例如,代碼可以從數據庫加載,或輸入到GUI屏幕中。如果您只是想通過在Groovy中編寫應用程序的某些部分來簡化您的工作,請使用2.使用XML解析和測試的兩個典型示例(當然還有更多)。
假設您對2.更感興趣,您可以分別編譯Groovy或Java,也可以一起編譯Java。如果單獨編譯它們,靜態引用只能朝一個方向進行,就像有兩個Java模塊一樣。如果將它們編譯在一起,可以任意混合使用Groovy和Java代碼,就好像它是同一模塊中的所有Java代碼一樣。
通過稱爲聯合編譯的Groovy編譯器功能,可以將Java和Groovy代碼編譯在一起。不幸的是,GMaven在聯合編輯方面存在着嚴重的問題,並且沒有跡象表明這種情況很快就會改變。對於小型項目你可能會得到它,但對於大型項目它會咬你(我去過那裏)。有解決方案,但它們不是免費的。如果您對(G)Maven開放源代碼開放,請考慮切換到Gradle,它具有更好的Groovy支持。 (免責聲明:我是Gradle的開發人員之一。)
如果您決定堅持GMaven,請確保正確配置其配置。幾乎我看到的每一個項目在這一步都失敗了,往往沒有意識到這一點。 GMaven文檔已過時,但Groovy郵件列表包含有關該主題的多篇文章。您也可以從Spock(我自己的項目之一)複製配置。
要啓用GMaven聯合編譯,請添加generateStubs
目標。只要你的項目在沒有這個目標的情況下編譯,就離開它。還有一個generateTestStubs
的目標,但它很少需要。
這是短篇小說。長話短說,看看即將到來的曼寧書Making Java Groovy。 (我不隸屬於作者。)
您是否使用過groovy-eclipse-compiler進行聯合編譯?它掛接到maven-compiler-plugin。 – 2011-08-09 15:01:44