IDE集成
Eclipse集成
导入Grails 项目
Grails会自动生成eclipse的.project和.classpath文件,因此要导入grails项目只需要在eclipse里右键点击"Package Explorer"并选择"Import",然后"Existing project into Workspace"并"Browse"选择你的项目路径即可,然后点击"Ok",接着"Finish"即可。
| 不要使用根目录或者路径里有空格的目录。 这是一个已知的问题,使用根目录或者路径里有空格的目录将导致grails无法正常运行。 |
设置eclipse环境变量
你需要在eclipse里设置一个classpath变量 "GRAILS_HOME",指向grails的安装路径(Windows -> Preferences... -> Java -> Build path -> Classpath Variables -> New)。
如果还没有在操作系统里设置一个GRAILS_HOME的环境变量,要正常的在eclipse里运行你的Grails项目,你还需要在"运行"对话框里的"环境"里设置,内容和上面设置的一致。
同时,如果你使用JSP的话,你还需要把JDK的tools.jar加到你的classpath里来,否则jetty会报编译错误,见:http://nuin.blogspot.com/2005/05/launch-jetty-from-eclipse-solving.html
| Groovy Eclipse 插件的问题 如果你正在使用Eclipse的Groovy插件,请确认你在导入grails项目前disable了 'Groovy Compiler Generating Class Files' (Eclipse -> Window -> Preferences -> Groovy Preferences)这个属性,默认情况下这个属性是enable并且会为每个groovy文件生成class文件并且放到项目的根目录下。当生成这些class类文件之后,会发现一些不期望的现象,比如无法给域对象生成controller和view。 |
运行Grails 程序
Grails会自动生成一个Eclipse运行配置,要运行该项目只需要使用"Run"下拉菜单打开运行对话框,在"Java Applications"里找到和项目名称一样的项,点击"Run",Grails程序会嵌入在eclipse中运行,并且在eclipse里所做的任何变化都会[自动重新装载|Chinese Auto Reloading]。
如果看到类似如下的异常:
org.mortbay.util.MultiException[java.io.FileNotFoundException: {yourpath}/web-app]
at org.mortbay.http.HttpServer.doStart(HttpServer.java:731)
at org.mortbay.util.Container.start(Container.java:72)
at grails.util.GrailsMain.main(GrailsMain.java:67)
你需要运行:
grails dev package
这将会把grails打包到web-app目录下,就和"grails run-app"命令一样。
在Eclipse里单步调试
如果你安装了最新的Groovy Eclipse 插件,便可以在eclipse里单步跟踪调试grails项目,你只需要:
- 打开你要调试的groovy文件(比如BookController.groovy),然后在需要停下的一行设置一个断点;
- 现在,调试这个程序,就和上面的运行一样,不过是使用"Debug"菜单,而不是"Run";
- 打开浏览器访问要执行这段代码的页面。
Eclipse 将会停在断点的那一行,你就可以查看变量并跟踪进你的代码了,如果你在项目里设置了grails的源代码,你同样也可以跟踪进去。
添加域对象等等
你可以将grails配置为一个外部工具(External Tool), 然后就可以创建域对象了,在eclipse里:
- 选择"Run > External Tools > External Tools...";
- 输入一个名字,例如:Grails;
- 在文件系统里找到grails.bat(或者*nix下的grails);
- 将工作目录设置为 ${project_loc};
- 参数设置为 ${string_prompt};
- 在Refresh这个tab里设置"Refresh resources upon completion"为 "project containing the selected resource";
- 在Common里, 在 "Display in favorites menu"里选中
现在你可以选择External Tool后面的下拉按钮(就是比运行多一个小箱子的那个图标),选择Grails,例如:
- 在External Tools的下拉列表里选择 Grails ;
- 在弹出的对话框里输入create-domain-class ;
- 在控制台窗口中根据提示完成命令;
- 在grails-app/domain中打开新创建的类。
编辑GSP文件
gsp文件不过是具有特殊标签库的jsp文件。gsp扩展名需要按照如下步骤添加:
- General -> Editors -> File Associations: 添加*.gsp,并将其链接到JSP Editor。
- General -> Content Types 展开Text -> JSP,并添加*.gsp
这将为gsp文件启用jsp编辑功能。要使用标签库,请在gsp的开始位置添加内容:
<%@ taglib prefix="g" uri="http://grails.codehaus.org/tags" %>
疑难解答
- 如果你在每次保存项目中*.groovy文件时都得到如下错误的话:
An internal error occurred during: "Building workspace". BUG! exception in phase 'conversion' in source unit '...' Error: duplicate class declaration for name: ... and class: org.codehaus.groovy.ast.ClassNode@...[name:...]
请尝试如下步骤:- 右击package explorer中的项目名称,并打开"Properties..."对话框。
- 选择"Builders",并确认"Groovy Builder"已经被检选。
- 选择"Java Compiler/Building",然后检选"Enable project specific settings"。
- 添加"*.groovy"*到"Filtered Resources"*文本输入框,以阻止".groovy"文件被复制到输出目录。注意目录是用","而不是";"来分割的。
- 应用修改并关闭对话框。
- 清理你的项目。请确认输出目录不再包含"*.groovy"文件。
- 如果Eclipse抱怨说它找不到设置断点所在的源文件,那么请确认下面几件事:
- 为groovy.*, org.codehaus.*所设置的步进过滤(Step filtering)已经启用 (更多有关信息可参考 http://groovy.codehaus.org/Debugging+with+Eclipse )
- 项目的构建输出是在一个单独的目录(比如 /bin )。确认在Project->Properties->Groovy Project Properties中该项是存在的。
- 其他一些建议:
- 确认grails-app/lib目录下的所有库文件都已经添加到项目中
- 在整个log4j.properties中使用详细(verbose)的日志/记录,直到所有东西都在Eclipse IDE中工作正常为止。有时候,如果一些库没有被找到,那么除非它被打印到控制台上,否则很难确定究竟是什么出了问题。
- 确保使用同一个JDK中的tools.jar以及运行时jar文件 rt.jar。注意某些情况下使用JRE替代rt.jar会产生问题。
- 有时grails产生的启动配置("launch configuration")与Ant的build.xml工作方式不同步。在Grails 0.3中,确保设置了下列VM 参数(注意不是程序参数而是VM参数 ):"-Dorg.mortbay.xml.XmlParser.NotValidating=true"。如果没有这一项,当从IDE中启动时会发生一个XML解析器异常。
Brute Force method:
If running from IDE has issues, most likely it is because some library is missing. Ensure that all libraries under GRAILS_HOME/dist, GRAILS_HOME/ant/lib, GRAILS_HOME/lib and your project folder/lib are added to the build path of the project.