2011-02-25 72 views
8

我目前正在將Groovy與現有Java項目集成。 Groovy腳本基本上將XML解析爲對象,然後將使用現有的DAO來保存,更新等。我有2個項目。一個時髦。一個java。使用Maven(我使用了gmaven插件),我構建了Java,然後構建了Groovy項目。將Groovy與Java集成

我希望能夠從Java項目中調用Groovy腳本,反之亦然(如果需要的話)。我確信有辦法做到這一點,但我無法做到這一點。

例如我的Java類

State(1 Field) 
StateDAO 

的Groovy腳本得到根本稱爲解析XML文檔,然後填充使用DAO與價值,S一張桌子和現在的一切我都樣子的do將其發佈到數據庫中。

如果您有任何建議,請讓我知道。謝謝!

回答

24

一般來說,有適用於集成Java Groovy的兩種方法:

  1. 使Java代碼編譯並在運行時
  2. 執行Groovy代碼
  3. 編譯和打包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。 (我不隸屬於作者。)

+0

您是否使用過groovy-eclipse-compiler進行聯合編譯?它掛接到maven-compiler-plugin。 – 2011-08-09 15:01:44

5

對於上面的Peter的第一個建議,我將使用Java的示例集合起來運行Groovy腳本in a blog post awhile back,它與code samples on github一起提供。 我也可以支持他關於GMaven和聯合編輯的評論 - 它可行,但最終會導致更多的問題而不是價值。 +1也考慮到了Gradle。雖然我大部分使用Java進行生產的經驗都來自於Java源代碼和Groovy測試代碼,但迄今爲止,它對我來說是完美無缺的。 祝你好運!