Eclipse中对Grails web应用程序的调试支持较差
我是一个日常的C#/ASP.NET MVC/visualstudio用户,我刚刚在JAVA/GRails/Eclipse中启动了一个项目,但是我发现使用Eclipse的调试功能非常困难,并且发现它们与visualstudio相比有些有限。特别是,我发现以下内容相当令人失望,但我不知道它们是Eclipse作为普通IDE的局限性,还是我正试图使用它进行Grails开发的事实Eclipse中对Grails web应用程序的调试支持较差,eclipse,groovy,grails,Eclipse,Groovy,Grails,我是一个日常的C#/ASP.NET MVC/visualstudio用户,我刚刚在JAVA/GRails/Eclipse中启动了一个项目,但是我发现使用Eclipse的调试功能非常困难,并且发现它们与visualstudio相比有些有限。特别是,我发现以下内容相当令人失望,但我不知道它们是Eclipse作为普通IDE的局限性,还是我正试图使用它进行Grails开发的事实 与VisualStudio的“即时窗口””相比,它似乎很差劲——在VS中,我在调试期间一直使用即时窗口,我发现在eclipse
评估失败。 原因:无法解析参数 但是,在遍历代码时,它的计算结果很好。这是因为Grails/Groovy的动态特性吗 代码片段: User.groovy:
class User {
String firstName
String lastName
String middleName
private String fullname
static constraints = {
firstName(blank:false)
lastName(blank:false)
middleName(blank:false)
}
public String FullName()
{
fullname = firstName + " " + lastName;
}
}
class UserController {
...
def show = {
User userInstance = User.get(params.id)
userInstance.FullName()
if (!userInstance) {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'user.label', default: 'User'), params.id])}"
redirect(action: "list")
}
else {
[userInstance: userInstance]
}
}
...
}
UserController.groovy:
class User {
String firstName
String lastName
String middleName
private String fullname
static constraints = {
firstName(blank:false)
lastName(blank:false)
middleName(blank:false)
}
public String FullName()
{
fullname = firstName + " " + lastName;
}
}
class UserController {
...
def show = {
User userInstance = User.get(params.id)
userInstance.FullName()
if (!userInstance) {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'user.label', default: 'User'), params.id])}"
redirect(action: "list")
}
else {
[userInstance: userInstance]
}
}
...
}
有谁能说这些是Eclipse的局限性、Eclipse的Grails插件还是其他什么。不管是什么情况,他们正在使使用JAVA开发MVC web应用程序的吸引力大大低于我使用的等效ASP.NET MVC
首先,SpringSource工具套件在使用Grails和Groovy时有了很大的改进。所以我建议你试试。但是,您仍然会遇到相同的问题 对于第1点,我也错过了即时窗口 点2-4不起作用的原因是因为Groovy的动态特性,Eclipse只知道如何处理普通Java对象,而当它们是Java对象时,Groovy会添加到对象中,例如Eclipse不知道的动态方法
我不能谈论Idea的Netbeans,但您可能想看看它们。大约6个月前,我评估了Groovy/Grails开发的所有3个主要Java IDE,IntelliJ Idea远远领先于其他两个。我不知道从那以后他们是否有所改进,但我今天仍然在使用IntelliJ,我对此非常满意。它对调试Groovy的支持非常好,允许您完成上面描述的所有事情。我知道它不是免费的,但在我看来,它值每一分钱。一旦您获得了使用该平台的一些经验,就可以适应任何非IDE编辑器(我喜欢Far Manager附带的编辑器)了 就我个人而言,我没有使用这两个IDE来创建最新的项目,而且它比我从事的任何其他项目都要快得多
有趣的是,因为我没有IDE来告诉我我拼错了一些东西,所以我创建了很多单元测试(你无论如何都应该这么做),我使用自动测试插件来做测试。这是一件非常有趣的事情,当我打字的时候,我没有什么可以阻止我的——只是纯粹的创作:)请注意,从STS2.5.1开始,当Groovy停止在Groovy堆栈框架上时,Groovy有扩展的调试支持。现在,display视图和expressions视图可以识别Groovy语法,并可以按照您期望的方式计算Groovy代码
因此,这意味着您的第2点和第4点现在正在发挥作用。嗨,斯科特,谢谢您的评论。你基本上证实了我所担心的情况。我可以理解对象的动态属性/方法的这些限制,但我似乎无法理解为什么我在对象中定义的属性/方法也是如此。如第2点所述,即使对于在设计类型定义的方法(例如FullName()方法),调试器似乎也不知道它们(方法FullName()未定义)。您或任何人知道为什么会这样吗?这仅仅是因为它是groovy类,所以eclipse根本不理解它吗?