Grails面试试题:工具/Shell篇

Tomás Lin在其博客中公布了一套面试Grails开发人员的题目,本站将陆续公布问题的答案。今天公布的是工具/Shell部分的试题回答。

工具/Shell篇

  • 描述一下Grails的console、shell和交互模式(interactive modes)的区别?
    • console:在初始化的Grails环境中运行的Groovy图形控制台,启动方式:“grails console”;
    • shell:在初始化的Grails环境中运行的Groovy Shell,启动方式:“grails shell”;
    • 交互模式:以交互方式启动Grails CLI,类似在命令行下执行Grails命令,不同之处在于该模式只启动一次JVM,节省了每次执行Grails脚本时启动JVM的时间,同时它还使用JVM的JIT编译器优化Grails脚本,有效提升了需要反复执行的脚本(如单元测试)的执行速度。启动方式:“grails interactive”;
  • 在Grails console中如何获得Spring bean?
  • Grails Console有一个绑定变量ctx,它指向ApplicationContext对象,使用如下代码即可获得Spring Bean:

    ctx.getBean(beanId)
    

    详情可参见本站的《如何在Grails Console中调用GetBean》

  • 在Grails console下有哪些注意事项?
  • 【没弄明白原题的意思,故参考了Tomás Lin的答案】BootStrap.groovy中的内容不会执行;部分工程文件的改动会使Console重启,如Controller的变动不会引起重启,而Domain Class的文件则会。同时,Tomás的说重启时会造成原来输入的代码丢失,实际情况似乎不是这样,重启之后,原来输入的代码会被加载。但为了保险起见,如果代码太长了,最好还是保存在外部。

  • 当执行“grails bug-report”,会发生什么事情?
  • bug-report用于报告Bug,它仅将应用的源文件打包(不包括Jar文件、静态资源等)生成带有时戳的ZIP文件,它向Grails JIRA报告问题非常有用。

  • Grails中自带的环境有哪些?
  • Grails中自带的环境有:开发环境:development;产品环境:Production,测试环境:Test。

    同时,Grails还允许自定义环境,在运行时则需要通过grails.env参数来告知当前环境。详情请参见本站Grails 1.2参考文档速读(2):配置基础和环境

  • 如何改变应用程序使用的服务器端口?
  • grails run-app -Dserver.port=port number或者使用grails.server.port配置。

  • 请讲述run-app和run-war的区别?
  • run-war:将当前的应用程序打包成WAR,并在Jetty容器的8080端口运行应用。

    run-app:在Jetty容器的8080端口运行应用。

  • Grails中,如何创建自定义脚本?
  • 使用create-script命令创建,比如:

    //创建scripts/ExecuteReport.groovy
    grails create-script execute-report
    
  • 什么是_Events.groovy?它是干什么用的?
  • _Events.groovy中可定义事件处理函数,它可以存放在插件的scripts目录下,或者用户目录的.grails/scripts/下。当事件发生时,会调用所有的_Events.groovy文件。详情请参见本站Grails 1.2参考文档速读(5):第4章

  • 假如,我的应用程序处于编译循环中,我猜是因为一个类名跟文件名不一致造成的。我该怎么进行调试?
  • 使用verboseCompile:“grails compile -verboseCompile”,或者将grails.project.compile.verbose设置为true。

By huwh - Posted on 31 一月 2011