Grails工程與maven集成
Grails其實也有自己的一些項目管理命令,如:grails package,grails test-app,grails war等。但是公司現在基本上都是用maven來管理項目,所以從管理上進行統一的目的,我們也讓grails工程由maven來管理。
Grails與maven集成是靠maven插件機制。
接下來描述下集成的步驟:
1、在$home/.m2/settings.xml中配置plugin group
<settings>
…
<pluginGroups>
<pluginGroup>org.grails</pluginGroup>
</pluginGroups>
</settings>
沒有配置之前,要運行grails:help命令要這樣寫:mvn org.grails:help,有了配置之后我們就可以這么寫:mvn grails:help。
2、我們創建一個maven管理的grails工程
Mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-4:generate
-DarchetypeGroupId=org.grails
-DarchetypeArtifactId=grails-maven-archetype
-DarchetypeVersion=1.2.0
-DgroupId=example -DartifactId=my-app
grails-maven-archetype這里用的是1.2.0版本,好像maven3集成的版本比這個要新。
3、進入my-app當前目錄,運行mvn initialize
在運行過程中可能會出現如下問題:
Resolving plugin JAR dependencies …
:: problems summary ::
:::: WARNINGS
module not found: org.hibernate#hibernate-core;3.3.1.GA
那么你在application.properties文件中添加plugins.hibernate=1.3.2
plugins.tomcat=1.3.2兩個插件。最后運行mvn compile重新編譯工程。
4、我們是用springsource tool suite開發,導入工程。項目中需要對excel操作,我們采用jxl.jar開源包。在pom文件中配置如下內容:
<dependency>
<groupId>jxl</groupId>
<artifactId>jxl</artifactId>
<version>2.4.2</version>
</dependency>
重新編譯下工程,但是引用jxl包中類的文件還是報錯,說找不到類。這怎么回事呢?我也很納悶,一般maven工程都是這樣就可以。
后來在官方文檔上看到一句話:pom=true。只要把這句話加到conf/BuildConfig.groovy文件中的grails.project.dependency.resolution方法中。如圖:

重新編譯,但是還是報錯。Ide還是無法引用jxl包中的類。后來發現在grails tools中找到了一個命令。

執行過后,已經加入到了grails dependencies中。
為什么會這樣呢,是因為有兩套機制造成的。
第一套機制:maven自身管理項目的機制。
第二套機制:grails也有自己的一套管理機制。
l 在絕大多數情況下maven通過grails的集成插件可以對工程進行打包,部署,運行測試等管理。
l Grails可以通過自己的grails war等命令進行打包,部署,運行測試等管理。
l Grails也可以通過配置pom=true讓grails那套管理機制用pom中的配置,不使用自己的管理機制。此時你就不用在conf/BuildConfig.groovy中管理依賴和資源庫等配置。