取得領先
VMware 提供訓練和認證,以加速您的進度。
了解更多Grails 看來正不斷壯大,而且似乎確實「有發展潛力」。我對於將其觸角稍微延伸到 Web 應用程式領域之外非常感興趣。如果您了解我關於 Spring Batch 的工作,您大概可以猜到我會如何發展。但對於本文,我只想分享一些我在 Grails 應用程式的基礎、低階部署和建置方面的一些經驗。
我對 Maven 2 有著愛恨交織的關係,而且我正學習喜愛 Grails,但遺憾的是,這兩者之間的配合並不好。如果能看到更緊密的整合,那就太好了。Maven 並非總是我們想要的,但有些東西確實讓它值得使用。它是一種標準(無論您喜歡與否),因此當我從某處下載專案時,我已經知道如何建置它、它的相依性是什麼,以及文件在哪裡。Grails 具有一些相同的功能,實際上還包含它自己相當精密的建置工具,該工具基於 Ant 的 Groovy 腳本。也許有一種中間方式,我們可以兩全其美?
我也了解此領域中的其他一些活動,我希望我們可以圍繞某些事物(可能由這個論壇和 Grails JIRA 中的討論驅動)凝聚在一起。例如,請參閱 Frederick Verbist 的 部落格 和 Arnaud Heritier 的 Maven 整合專案(目前幾乎還沒開始)。Grails 團隊傳統上對 Maven 不感興趣(例如,請參閱 此處),但我與 Graeme Rocher 進行了交談,他願意接受建議,因此我希望我們能夠在這裡取得一些進展。
本著朝 Maven 整合邁出一些簡單步驟的精神,我附上了一組 poms,這些 poms(大致)描述了我所知道的 Grails 0.5.6 中 Grails 的相依性結構。如果您遇到問題,請忽略或變更 Spring 版本號碼 - Grails 0.5.6 使用 Spring 2.0,但我需要 2.1 才能用於我正在處理的專案。Graham 說 Grails 可能無法與較新版本的 Spring 正常工作,因此您的結果可能會有所不同。這就是 Maven 的美妙之處,對吧?您可以明確地、遞移地看到專案相依性,並且可以調整它們,以您控制的方式來滿足您自己的需求和風險偏好。
給 Maven 使用者的旁注:相依性外掛程式的工作效率比以前好多了,而且您可以使用 "mvn dependency:tree" 來取得相依性樹狀結構的列印輸出。這僅適用於全新的外掛程式,因此請確保 apache-snapshots 儲存庫位於您的外掛程式儲存庫中
<pluginRepositories>
<pluginRepository>
<id>apache-snapshots</id>
<url>http://people.apache.org/maven-snapshot-repository</url>
</pluginRepository>
</pluginRepositories>
比必須建置整個網站並在相依性報告中查找要方便得多,這是我過去經常做的事情。
在隨附的沙箱封存檔中,有三個 poms,每個 poms 都在自己的專案中
若要安裝 Grails poms,您應該不需要手動將任何成品新增至您的本機儲存庫。還有一些「奇怪的東西」(在任何我能找到的標準公用儲存庫中都無法使用),我已將其包含在 "spring-ext" 儲存庫(在 pom 中定義)中。如果您已連線到網際網路,它應該可以立即運作。
您將需要 Maven (2.0.*) 和 Grails (0.5.6) 才能執行範例應用程式。我使用的是 Maven 2.0.7。"grails" 和 "mvn" 啟動腳本需要位於您的路徑中,而且您需要定義 GRAIL_HOME 環境變數才能執行 Grails(標準安裝程序)。
還有一個測試專案使用上述 poms 來管理 Web 應用程式。我已決定堅持使用 Grails 目錄配置。Graham 告訴我,web-app/WEB-INF 中幾乎所有「可變」內容都將在 Grails 1.0 中移除,因此我認為使用 Grails 規定的結構是最好的方法(最不容易損壞,更容易被其他 Grails 開發人員理解)。
從 Grails 命令列啟動
$ cd test
$ mvn package
$ grails run-app
若要將其他相依性新增至測試專案,只需將它們新增至 pom 並重複執行此操作(或在 Eclipse 中不執行任何操作,請參閱下文)。Maven 是不是很棒?
請注意,Grails 相依性在專案 pom 中具有 scope=provided。這應該表示它們位於 Maven 和 Eclipse 的類別路徑中,但不會包含在任何 Maven 套件中(如果已實作)。
如果您不使用 Maven Eclipse 擴充功能,則可能可以使用 Eclipse Maven 外掛程式(也稱為 maven-eclipse-plugin)。使用 "mvn eclipse:eclipse" 來更新 .classpath 並重新整理,然後您應該可以正常運作,但無法與其他 Eclipse 專案中的變更自動同步。
您將需要先從命令列執行 "grails package"(僅一次)
$ cd test
$ grails package
這會為您產生 web.xml,並從 grails-app/conf 複製和篩選一些屬性檔案。顯然,長期的可能性是 web.xml 將是 web-app/WEB-INF 中唯一產生的檔案(因此每個人的來源控制系統中只有一個 svn:ignore)。
在 Eclipse 中,您可以匯入測試專案。然後您可以執行 Run... 並從 Java Applications 中選取 "test" 啟動器。您可以偵錯,並且可以動態變更程式碼,包括在 Grails 應用程式和相依專案中。
以下是一些已知問題或令人煩惱的事情
Maven 相依性外掛程式不允許我們排除提供的相依性(目前),這使得問題更加嚴重,因此當您執行 "mvn package" 時,所有 Grails 相依性最終都會出現在 ./lib 中。這對於 Grails 開發人員來說會很不舒服,因為它們通常是從 GRAILS_HOME/lib 複製而來的。理想情況下,在我們能夠說我們真正擁有 Maven-Grails 整合之前,這種爭鬥將得到解決。
例如,我們希望從 Grails 專案配置中建置 WAR 檔案。使用 Ant 和 Maven 來實現這一點並不難。理想情況下,它將作為 Maven 外掛程式實作 - 這幾乎是 Arnaud 的專案,所以我希望他取得一些進展,同時也希望他能從這裡的經驗中學習。
也缺少其他有用的生命週期階段。例如,測試無法從範例中的 Maven 驅動。