Debug Grails in Tomcat, using Eclipse

49 views
Skip to first unread message

Simmy

unread,
Nov 27, 2009, 1:23:11 AM11/27/09
to Grails联盟-GrailsUnion
因为正在做的项目最终要deploy到Tomcat,并且要用到Tomcat中的security role,所以找到了一种方法可以在Tomcat
+Eclipse的环境debug Grails Application.

Environment:
- Windows XP
- Eclipse 3.5
- Tomcat 6.0.20

1. Install Eclipse
相信大家都知道怎么做
2. Install Tomcat 6.0.20, configure Tomcat plugin in Eclipse
preferences->Tomcat, set your Tomcat home
3. Install Sysdeo Tomcat plugin V321
http://www.eclipsetotale.com/tomcatPlugin.html
4. Create a Grails app
5. Create grails-app/conf/BuildConfig.groovy

import grails.util.GrailsUtil

appName="yourProjectName";
switch (GrailsUtil.getEnvironment()) {
case "production":
grails.war.exploded=false;
grails.project.work.dir = "${grailsSettings.grailsWorkDir}/
projects/${appName}/stage-production";
break;
case "development":
grails.war.exploded=true;
grails.project.work.dir = "${grailsSettings.grailsWorkDir}/
projects/${appName}/stage-development";
break;
case "test":
grails.war.exploded=false;
grails.project.work.dir = "${grailsSettings.grailsWorkDir}/
projects/${appName}/stage-test";
break;
}

6. Modify build.xml, change grails macro to be the following:

<macrodef name="grails">
<attribute name="script" />
<attribute name="args" default="" />
<attribute name="env" default="production" />
<sequential>
<grailsTask script="@{script}" args="@{args}"
classpathref="grails.classpath" environment="@{env}">
<compileClasspath refid="compile.classpath" />
<testClasspath refid="test.classpath" />
<runtimeClasspath refid="app.classpath" />
</grailsTask>
</sequential>
</macrodef>

7. Modify build.xml, change

<property name="web.deploy.properties" value="${basedir}/
deploy.properties" />
<property name="rpm.version" value="1" />
<property name="rpm.release" value="1" />

<target name="war" depends="-init-grails" description="-->
Creates a WAR of a Grails application">
<grails script="Clean" />
<property file="${web.deploy.properties}" />
<grails script="War" args="${ant.project.name}-${deploy.env}-$
{rpm.version}-${rpm.release}.war" env="${deploy.env}" />
</target>
<target name="-init-dev">
<copy file="${basedir}/deploy-dev.properties" tofile="$
{web.deploy.properties}" overwrite="true" />
</target>
<target name="war-dev" depends="-init-dev,war" description="Build war
for development" />

8. create deploy-dev.properties

deploy.env=development

9. Run Ant task, war-dev
You will see the task generate unpacked war in the path you configured
in BuildConfig.groovy.

10. Create your projectName.xml under tomcat_home/conf/Catalina/
localhost

<?xml version="1.0" encoding="UTF-8"?>

<Context path="yourProjectName" docBase="yourProjectWorkingDir/stage"
privileged="true"
antiResourceLocking="false"
antiJARLocking="false"
reloadable="true">
</Context>

11. Now, you are able to debug Grails app in Tomcat, and Eclipse.
Click Sysdeo Tomcat Run button, put a break point in your controller,
your will see how the debug works.

希望这些内容对大家有用。

Xinwangw

Liu Chao

unread,
Nov 27, 2009, 1:30:31 AM11/27/09
to grail...@googlegroups.com
这改的地方也太多了吧。。。
直接远程调试不行么?

2009/11/27 Simmy <xinw...@gmail.com>

wang xin

unread,
Nov 27, 2009, 1:33:10 AM11/27/09
to grail...@googlegroups.com
这样做的好处是,不用每次都deploy war到tomcat。设置的时候,是麻烦了一些,不过考虑到以后开发的时候,可以缩短一点时间,也就这么做了。

2009/11/27 Liu Chao <liuc...@gmail.com>



--
Xin Wang
xinw...@gmail.com

Rain Yan

unread,
Nov 27, 2009, 8:18:57 PM11/27/09
to grail...@googlegroups.com
远程调试就可以了,使用grails-deug run-app,在Eclipse里面Remote Debug设置好端口5005及项目就行了。这样也不用每次都deploy的。

2009/11/27 wang xin <xinw...@gmail.com>



--
Programs are but dreams, Born in formless, shapeless Zen. We are but dreamers.
http://rainboyan.com

Alex wang

unread,
Nov 28, 2009, 8:40:09 AM11/28/09
to grail...@googlegroups.com
远程调试我用的比较少,因为我一直觉得调试尽量少用IDE的模式,不过有时候远程调试确实能很快发现问题,可以用用。另外调查下,用远程调试的人多吗? 有什么好的建议?
---------------------------------------------
Alex wang
website:颠覆软件 http://www.foxlog.org
twitter: http://twitter.com/foxlog
douban: http://www.douban.com/people/foxlog
gmail: idea.wang[at]gmail.com


2009/11/28 Rain Yan <rain...@gmail.com>

Liu Chao

unread,
Nov 28, 2009, 9:09:02 AM11/28/09
to grail...@googlegroups.com
调试是个坏习惯,不但万不得已,比如应用开发时没事但上了生产就出问题,不得已远程调试一下。

2009/11/28 Alex wang <idea...@gmail.com>

Ali Yang

unread,
Nov 28, 2009, 10:24:49 PM11/28/09
to grail...@googlegroups.com
调试是个坏习惯?

2009/11/28 Liu Chao <liuc...@gmail.com>
调试是个坏习惯,不但万不得已,比如应用开发时没事但上了生产就出问题,不得已远程调试一下。

--
Ali Yang
----------------------------------------
Blog: http://ssailyang.javaeye.com
Twitter: https://twitter.com/aliyang
MSN: yang_...@hotmail.com
QQ: 407131746
----------------------------------------

Liu Chao

unread,
Nov 29, 2009, 12:18:52 AM11/29/09
to grail...@googlegroups.com
应该说过度依赖于调试而不专注于代码本身的清晰合理是个坏习惯,不是调试本身的错。

2009/11/29 Ali Yang <yang...@gmail.com>

wang xin

unread,
Nov 29, 2009, 1:33:32 AM11/29/09
to grail...@googlegroups.com
在开发环境中,我们从来不用远程调试,只有上了生产系统,如果是出了很难在stage上重现的问题,才可能会用到。经理也尽量不让我们在生产系统上用远程调试。

2009/11/29 Liu Chao <liuc...@gmail.com>



--
Xin Wang
xinw...@gmail.com

phoenix clt

unread,
Nov 29, 2009, 9:12:44 AM11/29/09
to grail...@googlegroups.com
调试基本靠 debug, 平时调试也靠 debug ,调试完了, 保留重要的 debug , 看日志 再 参考一下数据 基本上就够了。

2009/11/29 wang xin <xinw...@gmail.com>

wang xin

unread,
Nov 29, 2009, 6:05:37 PM11/29/09
to grail...@googlegroups.com
你说的debug是指debug log吗?

2009/11/30 phoenix clt <clt.p...@gmail.com>



--
Xin Wang
xinw...@gmail.com

clt

unread,
Nov 29, 2009, 8:25:03 PM11/29/09
to grail...@googlegroups.com

嗯,debug log, 自从 很早用 jbuilder 的时候 debug 功能出错不能用后, 就
一直用 debug log 调试,现在已经 习惯了。
Reply all
Reply to author
Forward
0 new messages