Grails 入门

 

1 下载和安装

让Grails运行起来的第一步是安装发行包。请按照如下步骤:

  • 下载 Grails的二进制发行包并解压到你指定的目录下
  • 新增 GRAILS_HOME 环境变量并指向你解压发行包时选择的目录
    • Unix/Linux系统上通常在你的profile文件中添加 export GRAILS_HOME=/path/to/grails 来设置环境变量
    • Windows系统上则是在 我的电脑/属性/高级/环境变量 中添加相同的环境变量
  • 现在需要添加 bin 目录到 PATH 环境变量中:
    • Unix/Linux系统上在profile中继续添加 export PATH="$PATH:$GRAILS_HOME/bin"
    • Windows系统上修改 我的电脑/属性/高级/环境变量 中的 Path 环境变量

如果Grails正常工作了那么你可以在终端窗口中键入 grails 命令并看到如下简单的输出:

 

Welcome to Grails 1.0 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /Developer/grails-1.0
No script name specified. Use 'grails help' for more info

 

2从Grails 1.0.x升级

尽管Grails开发团队试图将从Grails 1.0.x升级到Grails 1.1时带来的影响降到最低限度,但仍然有一些事项需要你认真考虑。重大变化描述如下。

 

Groovy 1.6

Grails 1.1现在和Groovy 1.6协同工作并且不再支持针对Groovy 1.5的代码编译。如果你有一个使用Groovy 1.5编写的组件库,在将它用于Grails 1.1之前,你需要针对Groovy 1.6来重新编译它。

 

Java 5.0

Grails 1.1现在不再支持JDK 1.4,如果你希望正常使用Grails,那么建议你继续使用Grails 1.0.x系列直到你能够升级你的JDK。

 

配置的变化

1) 为了系统的一致性,设置项 grails.testing.reports.destDir 已经被重命名为 grails.project.test.reports.dir

2) 下列设置已经从 grails-app/conf/Config.groovy 文件中移到了 grails-app/conf/BuildConfig.groovy 文件:

  •  
    • grails.config.base.webXml
    • grails.war.destFile
    • grails.war.dependencies
    • grails.war.copyToWebApp
    • grails.war.resources

3) 自从Java 5.0成为基线起, grails.war.java5.dependencies 选项已不再被支持(见上文)。

4) jsessionid的使用(现在被认为是有害的)默认是禁用的。如果你的应用程序需要用到jsessionid,你可以重新启用它,在 grails-app/conf/Config.groovy 文件中添加如下设置:

 

grails.views.enable.jsessionid=true

5) 用来配置Log4j的语法已经改变了。看看用户指南的 登录 一章可以获得更多信息。

 

插件的变化

Grails 1.1默认将不在你的 PROJECT_HOME/plugins 目录下储存插件。这可能导致你的应用程序出现编辑错误,解决办法是重新安装所有的插件或者在 grails-app/conf/BuildConfig.groovy 文件中设置下列属性:

 

grails.project.plugins.dir="./plugins"

 

脚本的变化

1) 如果你先前使用的是Grails 1.0.3或以下的版本,那么下边用于从GRAILS_HOME导入脚本的语法将不再被支持:

 

Ant.property(environment:"env")
grailsHome = Ant.antProject.properties."env.GRAILS_HOME"

includeTargets << new File ( "${grailsHome}/scripts/Bootstrap.groovy" )

取而代之的是 grailsScript 方法,它能导入一个命名的脚本:

 

includeTargets << grailsScript( "Bootstrap.groovy" )

2) 由于升级到了Gant,所有对变量 Ant 的引用应该改为 ant

3) 项目的根目录不再存于classpath中,像如下的资源加载方式将无法使用:

 

def stream = getClass().classLoader.getResourceAsStream("grails-app/conf/my-config.xml")

但是你可以使用Java文件API以及 basedir 属性来完成如上操作:

 

new File("${basedir}/grails-app/conf/my-config.xml").withInputStream { stream -> 
      // read the file  
}

 

命令行的变化

run-app-httpsrun-war-https 这两个命令已经被取消了,取而代之的是 run-app 命令带上特定的参数:

 

grails run-app -https

 

数据映射的变化

1) 枚举类型现在可以使用它们的String值来映射,而不再是ordinal值。当然你也可以通过如下方式改变你的映射来还原为旧的习惯:

 

static mapping = {
      someEnum enumType:"ordinal"
}

2) 双向的一对一关联现在可以使用在所有者端的一个单列和一个外键引用来映射。你不需要做任何修改,除非你想删除在相反端包含了重复数据的那一列。

 

REST支持

接收到的XML请求现在不能被自动解析了。要启用对REST请求的解析,你需要在URL映射中使用 parseRequest 变量:

 

"/book"(controller:"book",parseRequest:true)

其次,你也可以使用新的 resource 变量来开启默认解析:

 

"/book"(resource:"book")

3 创建一个应用程序

要创建一个Grails应用程序你首先需要熟悉 grails 命令的使用,使用方式如下:

 

grails [命令名称]

假如你需要执行的命令是 create-app

 

grails create-app helloworld

这将创建一个新的目录,其中包含了helloworld这个项目。你现在可以在终端里导航到这个目录:

 

cd helloworld

 

4 一个Hello World例子

要实现经典的"hello world!"例子你可以运行 create-controller 命令:

 

grails create-controller hello

这将在 grails-app/controllers 目录中创建一个名为 HelloController.groovy 的控制器(参见控制器一章获得更多内容)。

控制器能用来处理web请求并用来实现“hello world!”的例子,我们的实现代码如下:

 

class HelloController {
        def world = {
                render "Hello World!"
        }
}

完工。现在使用另一个称为run-app的新命令来启动容器:

 

grails run-app

这将在8080端口开启一个服务器,现在可以通过http://localhost:8080/helloworld这个URL来访问你的应用程序了。

你将看到如下截图所示的内容:

这是由 web-app/index.gsp 文件所呈现的Grails介绍页面。你会注意到它已经发现了你的控制器的存在,点击链接来访问控制器,我们可以看到浏览器窗口中打印除了“Hello World!”的文本。

 

5 设置IDE

IntelliJ IDEA

目前用于Groovy和Grails开发的IDE中,最成熟、最全面的是IntelliJ IDEA 7.0和它的JetGroovy插件。在大型项目中,Grails团队优先推荐使用IDEA。

 

TextMate

由于Grails关注的是简洁性,所以我们可以使用一些更简单的编辑器,例如在Mac环境下的TextMate,它对Groovy/Grails有着优秀的支持,可以从Texmate bundles SVN获得它。

 

Eclipse

对于EclipseGroovy Eclipse 插件提供了语法高亮和代码自动完成等功能。

 

在Grails的Wiki上有更多关于Groovy Eclipse插件的 详细讨论

Grails为你自动创建了用于Eclipse的.project 以及 classpath 文件,所以要在Eclipse中导入一个Grails项目,只需在“Package Explorer”中点右键并选择“Import”,随后选择“Existing project into Workspace”并“Browse”你的项目位置。

接着顺序点击“Ok”和“Finish”即可完成项目的导入和安装。

Grails也将自动安装一个项目对应的“Run Configuration”配置,随后可以在Eclipse的“Run”菜单中来使用它运行Grails。

 

6 约定优于配置

Grails使用“约定优于配置”原则来配置自己。这通常意味着文件的名称和位置被用来替代明确的配置,因此你需要熟悉Grails提供的目录结构。

以下是大致目录结构并链接到相关的章节:

 

7 运行应用程序

Grails应用程序可以使用 run-app 命令来运行在内置的Jetty服务器上,这个命令将默认在8080端口上启动一个服务器:

 

grails run-app

当然你也可以使用 server.port 变量来指定其他端口:

 

grails -Dserver.port=8090 run-app

更多关于 run-app 命令的信息可以在参考指南中找到。

8 测试应用程序

Grails 中的 create-* 系列命令可以为你在 test/integration 目录内创建集成测试代码框架。当然你还得自己来填写有效的逻辑测试代码,更多的信息可以参考 测试 一章。如果你要执行测试代码,那么可以运行 test-app 命令:

 

grails test-app

Grails也自动生成了用于Ant的 build.xml 文件,它可以委托Grails的 test-app 命令来运行测试代码:

 

ant test

当你使用如CruiseControl这样的持续集成平台来自动构建Grails应用程序时,使用Ant的方式将非常有用。

9 部署应用程序

Grails应用程序是通过Web应用程序档(WAR文件)的格式来部署的,它使用 war 命令来执行这个部署任务:

 

grails war

这将在你的项目根目录中产生一个WAR文件,你可以参照你的容器指南来部署它。

 

绝对不要使用 run-app 命令来作为部署的命令,因为它使Grails能够在运行期间自动重载,但这将带来许多性能和扩展性问题。

部署好Grails之后,你应该为你的容器JVM设置 -server 选项来分配足够的内容。一个较好的VM设置应该像这样:

 

-server -Xmx512M

10 创建工件

Grails提供了许多像 create-controllercreate-domain-class 这样方便的命令,可以使用它们来为你创建 控制器 等各种类型的工件。

这只是为了方便你进行开发,你也可以随意使用喜欢的IDE或文本编辑器来完成同样的工作。

例如,一个应用程序的基础部分是 域模型 ,我们可以像这样创建它:

 

grails create-domain-class book

这将在 grails-app/domain/Book.groovy 文件中创建一个域类,内容如下:

 

class Book {  
}

还有许多类似 create-* 这样的命令,你可以在命令行参考指南中了解它们

10 支持的 Java EE 容器

Grails支持相当广泛的容器,如下:

  • Tomcat 5.5
  • Tomcat 6.0
  • GlassFish v1 (Sun AS 9.0)
  • GlassFish v2 (Sun AS 9.1)
  • Sun App Server 8.2
  • Websphere 6.1
  • Websphere 5.1
  • Resin 3.2
  • Oracle AS
  • JBoss 4.2
  • Jetty 6.1
  • Jetty 5
  • Weblogic 7/8/9/10

一些容器还有不少Bug,但在多数情况下它们都能工作的很好。在Grails的wiki站点你能找到一份 开发中已知问题列表

11 生成一个应用

要使用Grails快速开始,经常用到的一个特性叫做 脚手架 ,它可以用来生成一个应用的骨架。要开始这样做,你可以使用 generate-* 这样的命令,如 generate-all 可以用来生成一个 控制器 以及相关的 视图

 

grails generate-all Book

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


背景:    8月29日,凌晨4点左右,某服务告警,其中一个节点直接down掉,收到告警的同事让运维重启。    9点左右,内存监控上发现内存异常,堆内存涨速很快,即便GC也没有什么效果,频繁GC。    9点38,服务各种超时,影响整个app使用。处理方式:    当时由于很想要
https://support.smartbear.comeadyapi/docs/soapui/steps/groovy.htmlGettestcaseobjectToobtaintheobjectwhichreferstothecontainingtestcase,usethefollowingcodesnippet:Groovy def case=testRunner.testCase; Byusingthe tes
有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能。查看最流行的扩展机制,比较性能并分析哪一个是最好的。  这是乐队之战,JMeter风格。 BeanshellV.JSR223V.JavaRequestSampler 在我们之前的帖子中,  JMeterPerformance和TuningTips  ( 由fantastik
Scala和Java为静态语言,Groovy为动态语言Scala:函数式编程,同时支持面向对象Groovy:jvm上的脚本,较好兼容java语法,Groovy加强了Java集成。 可配置化的优势,可以将一些简单的逻辑公开给外部编辑和使用,增强了互操作性,复杂逻辑来说,可配置化代码的调试则会比较麻烦 Scala和Java
出处:https://www.jianshu.com/p/ce6f8a1f66f4一、一些内部元件的访问testRunner.testCase开头1、向下访问testRunner.testCase.testSteps[testStepName]testRunner.testCase.getTestStepByName("新增一个空间")2、向上访问,用于访问同一项目中的其他testSuites和testCase下
在运行groovy的junit方法时,报了这个错误:java.lang.ExceptionInInitializerError atorg.codehaus.groovy.reflection.ClassInfo.isValidWeakMetaClass(ClassInfo.java:271) atorg.codehaus.groovy.reflection.ClassInfo.getMetaClassForClass(ClassInfo.java:241) atorg.codeha
基本语法1.Grovvy的注释分为//和/**/和java的一样.2.Grovvy语法可以不已分号结尾.3.单引号,里面的内容严格的对应java中的String,不对$符号进行转义.defs1='iamastudent$'printlns1iamastudent$4.双引号“”的内容中如果有$号的话,会先对表达式先求值.de
Tiobe发布了最新一期(3月份)编程语言欢迎度榜单,其榜单根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube统计出排名数据。TOP5几乎没有变化,Java和C语言牢牢占据前两名。Python相较去年上升一位进入TOP3,C++下
我有一个Google地图组件,作者可以在其中指定纬度和经度.我正在使用带有正则表达式的常规“输入”类型控件来验证它们是否是数字,但是,当试图解决指定范围的问题时(经度验证该值在[-180,180]内并且纬度[-90,90])但是,通过正则表达式进行验证似乎很麻烦,而且利用inputtype=“numb
我正在为未来的应用程序评估SpringBoot,并希望使用Groovy模板来实现其纯粹的可读性.不幸的是,我在迭代我添加到控制器返回的ModelAndView对象的对象列表时遇到了麻烦.这是我的控制器:@RestController@RequestMapping("/ships")publicclassShipsController{@Autowired
我有一个基于Spring的java应用程序,其中包含一些有用的组件.作为系统的一部分,我有一个groovy脚本,来处理一些报告.我想从groovy脚本中调用spring组件.当我用Java编写时,我需要在@Component中使用@Autowired注释,即@ComponentclassReporter{@AutowiredSearchServicesearchS
在Grailsi18n插件definedthusly中定义了一个messageSourcebean:messageSource(PluginAwareResourceBundleMessageSource){basenames=baseNames.toArray()fallbackToSystemLocale=falsepluginManager=manager....}是否可以覆盖我的resources.groovy中的fa
我正在寻找一种方法来反向工程RDBMS表(MSSQLServer)并生成JPA@EntityGroovy类.我们目前没有选择使用Grails和/或GORM,因此Grailsdb-reverse-engineer插件似乎很接近但不太正确.它生成符合GORM的类而不是JPA实体类.我们目前有一个gradle构建,它利用org.hibernate.tool.ant.Hibe
https://blog.csdn.net/Gdeer/article/details/83062523一、直接运行groovy程序因为groovy插件和android插件不兼容,所以不能在原始项目上使用groovy。 新建module,创一个JavaLibrary,取名lib。  修改lib/build.gradleapplyplugin:'java-library'depe
一、自动生成GET请求脚本1、配置Createascript在ngrinder管理台主页,点击script–>Createascript,并填写脚本名称和请求的url,如下所示:点击Create按钮,nGrinder会自动生成对应的脚本结构,如果没有参数需要设置的话,可以直接运行了。二、详细解析GET请求脚本ngrinder自动生成的脚本
我正在关注使用列表和地图作为构造函数的this博文.为什么以下列表无法强制反对?classTest{staticclassTestObject{privateinta=1;protectedintb=2;publicintc=3;intd=4;Strings="s";}stati
Information:java:Errorsoccurredwhilecompilingmodule'security'Information:javac1.8.0_131wasusedtocompilejavasourcesInformation:2019/6/98:31-Buildcompletedwith1errorand0warningsin3s116msError:java:读取E:\repository\org
ngrinder中的groovy脚本结构类似junit,同时在junit的基础之上封装了自己的注解,用来控制脚本的运行。一、运行逻辑图如下:此处只列出了groovy脚本的逻辑,jython脚本是类似的,在此不再单独介绍。二、各注解的使用比较三、关注点在ngrinder中,通常使用单进程多线程就足够大部分测试了,所以:
我有一个switch语句来处理javaenumfoo,并使用spock编写一些groovy单元测试.我已经添加了一个测试,它验证当前是否处理了每种类型的foo而没有抛出异常.现在我想测试一个无法识别的foo类型会导致抛出异常.要做到这一点,我将不得不嘲笑枚举,并已经看到这里概述的解决方案:MockingJ
我有一个groovy实体ClientInvoiceAttachmentExt,它扩展了java实体ClientInvoiceAttachment.ClientInvoiceAttachment具有@Id注释,但仍然看到“没有为实体指定的标识符”错误这是我的堆栈跟踪[Mar0317:11:54]ERROR|org.springframework.web.context.ContextLoader|Contex