Eclipse中Grails Web应用程序的调试支持不佳

时间:2010-02-13 18:44:49

标签: eclipse groovy grails

我是一名日常 C#/ ASP.NET MVC / Visual Studio 用户,我刚刚在 JAVA / GRails / Eclipse 中启动了一个项目,但我是发现使用Eclipse的调试功能非常困难,并且发现它们与Visual Studio相比有些限制。特别是,我发现以下相当令人失望,但我不知道它们是否是Eclipse作为一个普通IDE的限制,或者我正在尝试使用它来使用Grails进行开发。

  1. Visual Studio的“立即窗口”看起来很差 - 在VS中我在调试过程中一直使用立即窗口,我发现在eclipse中等效的是“< strong>显示“查看。然而,在VS中我可以输入一个对象的名称(例如“?user”),并且在点击后我给出了对象的所有属性/方法,在eclipse中我必须突出显示表达式,然后明确告诉它检查,执行等。完成后,它会将检查结果添加到另一个窗口,迫使我介于两者之间。

  2. 显示视图似乎无法实际评估属性或方法。例如,如果我有一个User类的实例,并且在Display窗口中输入userInstance.FirstName或调用userInstance.FullName()之类的方法,则会得到评估失败错误:“方法FullName()未定义为类型对象“。此外,如果我为实例添加一个手表,我可以看到属性,但再次无法看到该方法。但是,该方法将精细评估为代码块中的表达式(证明它确实存在并被识别)

  3. 此外,尽管各种文档声明可以通过简单地突出显示对象来添加手表,但是右键单击并添加Watch这个选项似乎不存在,所以我不得不在显示中键入对象查看,突出显示它并从显示视图上下文菜单中添加一个手表。

  4. 评估User.get(params.id)等表达式(再次在“显示”视图中)会返回错误,如下所示:

  5.   

    User.get(params.id)
           评估失败。            原因:params无法解决

    然而,它在踩过代码时评估得很好。这是由于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;
        }
    }
    

    UserController.groovy:

    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。

    由于

4 个答案:

答案 0 :(得分:3)

我在6个月前评估了Groovy / Grails开发的所有3个主要Java IDE,IntelliJ IDEA远远领先于其他两个。我不知道他们之后是否有所改进,但我今天仍在使用IntelliJ并且对它非常满意。它支持调试Groovy非常出色,可以让你完成上面描述的所有事情。我知道这不是免费的,但在我看来,它值得每一分钱。

答案 1 :(得分:1)

首先,在使用Grails和Groovy时,SpringSource Tool Suite得到了很大的改进。所以我建议你尝试一下。但是你仍然会遇到同样的问题。

对于第1点,我也错过了立即窗口。

点2-4不起作用的原因是由于Groovy的动态特性,Eclipse只知道如何使用Plain Java Objects,而它们是Java对象时Groovy添加到Objects中,例如Dynamic方法Eclipse不知道。

我不能谈论Netbeans of Idea,但你可能想要查看它们。

答案 2 :(得分:0)

一旦您获得了使用该平台的经验,习惯于任何非IDE编辑器(我喜欢Far Manager附带的编辑器)都是小菜一碟。

就我个人而言,我没有使用这些IDE来创建最新的项目,而且它比我工作的任何其他项目都要快得多。

有趣的是,因为我没有IDE告诉我,我拼错了一些东西,我创建了很多单元测试(你应该做的事情),我正在使用自动测试插件进行测试。这样的乐趣很多,当我打字时,我没有什么能阻止我 - 只是纯粹的创作:)

答案 3 :(得分:0)

请注意,从STS 2.5.1开始,在Groovy堆栈帧上停止时,Groovy会有扩展的调试支持。现在,显示视图和表达式视图识别Groovy语法,并且可以按照您期望的方式评估Groovy代码。

所以,这意味着您的第2点和第4点现在正在运作。