Grails 1.3的依賴管理

用Grails做項目以來,基本上一直都是各自獨立的項目,也很少使用CI(持續集成)來進行管理,因此對Grails的包管理也沒有什麼迫切的需求,也就沒有考慮包的複用性問題,其實從Grails1.2開始,好像就有包的管理了,在1.3中更加強了,此外還可以跟maven進行集成(Grails默認是使用IVY進行管理的),實在是方便的很。現在就我所實踐的一些包管理簡要說說。

先說明一下我的工程情況,系統有一個主web app工程,姑且叫做app1吧,其他的都是插件,比如plug1,plug2等,現在我希望整個工程像maven那樣進行管理。好了,既然grails支持maven插件和發佈(mavne-publisher插件,由Grails領導人創造),讓我們開始吧。

把插件發佈到我自己的mavne服務器上,這個基本上就是做些配置就好了,比如在BuildConfig中增加
grails.plugin.repos.distribution.myRepository="http://xxx.com/maven2"
grails.project.dependency.distribution = {
remoteRepository(id:"kindsoftRepo", url:"ftp://host/mavenrepository/") {
authentication username:"user", password:"password"
}
}

其中dependency.distribution最好放在$HOME/.grails/setting.groovy中,這樣安全相對好點。安裝了maven-publisher以後,執行
grails maven-deploy --repository=kindsoftRepo

至此,把插件發佈到maven服務器已經OK了。

那麼在app1的工程中如何解決對plug1的依賴呢,這個Grails是通過grails.project.dependency.resolution來解決的,默認的app1將會在
        grailsPlugins()
grailsHome()
grailsCentral()
mavenCentral()
進行插件搜索,如果找到就會自動按照所依賴的插件。那麼發佈到私有maven服務器的將如何加入了,在我的項目中,我是沒法通過自定義grailsRepo,mavenRepo來解決這個問題,還好Grails還提供了Custom Resolver的方式,我的示例代碼:
		def libResolver = new org.apache.ivy.plugins.resolver.URLResolver(m2compatible:true)
libResolver.addArtifactPattern("http://xxx.com/maven2/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]")
libResolver.name = "kindsoft-repository"
libResolver.settings = ivySettings
resolver libResolver

以上代碼要放在grails.project.dependency.resolution.repositories中,然後,你就可以在grails.project.dependency.resolution.plugins中聲明你自己需要的插件了。

哈哈,一切順利。如果還有疑問,可以參考[url=http://grails.org/doc/latest/guide/3.%20Configuration.html#3.7%20Dependency%20Resolution]3.7 Dependency Resolution[/url]

此外我已經成功使用Hudson對Grails進行持續集成,可以參考我轉載的文章:[url=http://agile-boy.iteye.com/blog/704903][轉載]Grails plugins on Hudson[/url]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章