利用 Intellij IDEA 10 开发多工程Grails应用的关键步骤及注意事项(随笔)

       Intellij IDEA 在目前来说应该是开发Groovy/Grails应用效率最高的一个IDE,虽然也有些很讨厌的小BUG,但比起目前的 Eclipse ,确切的说是Springsource Tool Suite 2.5.1(STS) 来说,IDEA 在代码智能提示和对Grails的支持深度上高出很多.也不知道这个SpringSource是怎么搞的,自家的东西(Grails所在的G2One被SpringSource收购,后者又被VMWare收购),做出来还不及一个捷克的IDE产品,STS在Groovy/Grails的集成开发上还有很远的路要走啊,虽然比起前些年的有很大进步。

      不过,要说的是,虽然 IDEA 目前在Groovy/Grails 的开发环境要好,在一般的 Grails 开发是可能没什么,但在比较大的应用,特别是多工程的开发中存在问题,或者说是我的无知导致的问题。下面一一记录,帮助我也帮助跟我一样,想用Grails做点东西同行了,希望能看到 Grails 在国内有一个更好的社区环境,两年前有过关注,两年过去了,现在的Grails比起以前来,有了很大的进步,同时在基于开发的效率来说,Grails是当仁不让的 Java版 的ROR,这是我再次考虑用它的两个主因。

    题外话说完了,下面进入正题,下面是我目前用 Intellij IDEA 在开发 Grails 的多工程时,遇到一个问题记录及解决方法,这里说的多工程是指比如 一个 Domain 的Grails 插件项目,一个Services 的 Grails 插件项目,一个 TagLib 的 Grails 插件项目,最后由一个 Grails 主项目引用前三者,同时,Services 项目也引用了 Domain项目:

1.在控制台输入: grails create-app mainApp

2.cd mainApp

3.创建子目录 plugins 。不过,也可以在mainApp的同级目录下创建子插件项目

4.用同样的命令“ grails create-app xx ”在 plugins 目录下创建三个子插件项目 Domain、Services、TagLib

5.编辑 mainApp/application.properties,加入项目要用的其他第三方插件

6.编辑 mainApp/grails-app/conf/BuildConfig.groovy,添加如下内容:

grails.plugin.location.'domain' =  'plugins/domain'
grails.plugin.location.'services' =  'plugins/services'
grails.plugin.location.'tagib' =  'plugins/taglib'

  如果子插件项目与mainApp项目在同级目录,请将 ‘plugins/domain’ 替换为 '../domain'

7.编辑 services/grails-app/conf/BuildConfig.groovy , 添加它引用的domain插件位置

grails.plugin.location.'domain' =  '../domain'

8.在各项目中的 xx//application.properties 的文件中加入要依赖的第三方插件

9.进入到mainApp项目的主目录,在控制台输入: grails run-app 启动一下该主项目,如果上面的操作正确,应该可以在 http://localhost:8080/mainApp 下看到可爱的Grails应用的初始页面。不做这一步的关键是,在后面的Intellij项目的Project Settings -> mainApp-grailsPlugins -> Modules -> Sources 中不会自动加载那些被引用的第三方插件项目,及domain,services,taglib项目,而第三方项目的源码必须在 run-app 后,才会在系统的 .grails/1.3.6/projects

/icescrum/plugins 目录中生成,并被后面生成的 Intellij 项目自动在 mainApp-grailsPlugins -> Modules ->Sources 中自动被引用。

10.依旧用控制台在mainApp的主目录下输入:grails integrate-with --intellij ,让 grails 为 mainApp项目 自动生成

     Intellij IDEA 项目。

11.启动 Intellij IDEA 程序,在 File > Open Project 中定位到 mainApp 目录,如果用的是Intellij 10的话,会提示是否要转换旧项目,点击是后它将自动构建该项目,并自动生成各子插件的子项目,该过程将持续一会后自动完成,点Grails View 视图即可看到各项目的情况。

12.最好在生成后关闭一下项目再打开。

13.如果在项目中依然发现有比如 services 插件项目无法找到 domain 插件项目的类的情况,对于此类情况,通常需要在

File > Project Settings -> Modules 找到 servieces 项目,将 Dependcies 列表框中的 domain项用右侧的 Move UP  移到前面,同时删除 Modules 中的 mainApp-grailsPluings项,否则在保存时会提示“在同一项目下两个模块不能共用同一根”的提示,如果再次打开该项目时还需要每次这样做一下,这应该是目录 IDEA 10.0.1的一个Grails开发的BUG了。

14.点击 Intellij 的 Run > Edit Configurations > Grails 将 Before launch 面板中的 “Make” 默认的勾选设置为未选中。

15.如果在调试或启动过程中提示堆空间不够,请在 Run > Edit Configurations > Grails 的 “VM Parameters” 中增加 “-XX:MaxPermSize=1024m -Xmx1024M -server”

16.我发现 Grails 项目的 Project Settings 更改是无效的,就算你更改了它也会自动恢复的,它可能是按 Grails 项目的相关配置信息自动配置的。要更改你必须得手动更改项目的application.properties文件、BuildConfig.groovy等信息才可以。

     以上是我遇到的问题即解决步骤和方法。特别说明,开发环境 MacOS 10.6(JDK 6_22) + Intellij IDEA Ultimate 10.0.1  + Groovy 1.7.5 + Grails1.3.6。

在使用 Intellij IDEA 开发 Grails 应用中有以下几点体会:

1.从 Eclipse 转到 Intellij 上非常不适应,很多东西老是潜意识去对号。快捷键也完全不一样,不过感觉 IDEA 的快捷键更短,更易记.

2.IntelliJ 在 Grails 的开发上确实比 SpringSource 的 STS 上更胜一筹,智能程度上非常高,这也是IDEA的优势所在了。

3.Intellij 在 Grails 开发上还有 BUG,比较头疼。

相关推荐