先说明一下我的工程情况,系统有一个主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中声明你自己需要的插件了。
哈哈,一切顺利。如果还有疑问,可以参考 3.7 Dependency Resolution
此外我已经成功使用Hudson对Grails进行持续集成,可以参考我转载的文章: [转载]Grails plugins on Hudson