Grails笔记二:grails 2.4.3版本下generate-*失效问题解析
最近在学grails框架,因为其敏捷性让我非常喜欢,不过有点让人恼怒的是也许因为grails框架太新了,所以关于grails的书籍很少,而且市面上的书籍大部分都是2007或者2009年的,官方文档又都是英文的,原谅我英语太差了~参照这些书籍学习却使用官方提供的最新grails,难免会有很多不同,需要不断尝试才能解决问题!(解决办法在随笔最后,不想看过程的可直接拉到最后)
回归正题,如果你在看grails权威指南(07版),甚至09年的一些关于grails的书籍,都可能会发生一种情况:使用grails的generate-*(generate-all等,参照下图图一)会发现命令无效的情况(图二)

图一

图二
顺便提一下,对于初学者(包括我自己)在刚开始使用grails命令的时候直接输入:grails help,会发现命令列表中没有上述或者一些其他的命令,如下图所示:

图三
对比上图可以发现没有generate-*命令,这是怎么回事呢?其实也很简单,图二的所有命令都是针对一个grails工程的,而图一所示的命令还包括了针对工程中各项文件的命令,出现二者的区别就在于:使用grails命令时是否是在grails工程里面。
拿图说话吧,在windows的情况下直接调出cmd窗口是类似于这样的:

图四
并不会进入grails工程里面,比如我有个叫myFirst的grails工程,如果使用cd myFirst后,再使用grails help就会出现图一所示的命令行了。
回到generate-*命令出现无效情况中,我可以确保自己在domian文件夹中一定有个Hello,如图五:

图五
那么为什么会出现这种情况呢?毫无疑问generate-*是对的,我们看下图五中Hello这个domian的路径,是不是不直接在domian文件夹下而多了一层以工程名(全部小写)的文件夹?
所以generate-*自然在domain根目录下是找不到这个领域模型的,那么也许有人会问,如果我把Hello这个领域模型放到domain的根目录下是不是就可以了呢?
不妨一试,我把book(我换了一个,参照图五可以看到它是没有被generate-all执行过的)放到了domain的根目录下(注意地址栏):
图六
使用generate-all命令,会出现下面的情况:

图七
很抱歉,这样会报错。所以目前认为这是不可行的。
那么该怎么解决图二所展示的问题呢?我查阅了一些其他牛人的说法,大致为把:grails generate-all domain-class-name换为grails generate-all projectName.domian-class。注意其中有个点,这个很重要。
我尝试了一下,使用grails generate-all myFirst.Book(我建立了一个名称为myFirst的grails工程),结果如下:

图八
结果还是一样,难道大神的说法是错误的吗?回到图五,其实我们会发现,在domain下有个叫myfirst的文件夹,与工程名很类似,但显然和工程名不一样,我尝试把grails generate-all myFirst.Book改为grails generate-all myfirst.Book,结果如下:

图九

图十
成功了,综上所述,这种问题的解决办法应该是把grails generate-* domain-class-name改为grails generate-* (domain下相应的文件夹名称).domain-class-name。
还有点需要注意的是,domain-class-name必须要和生成的groovy类名一致,区分大小写。
Grails笔记二:grails 2.4.3版本下generate-*失效问题解析的更多相关文章
- Grails笔记一:windows8.1操作系统cmd下grails命令无效
最近决定使用intellij idea工具来开发基于Grails框架的应用程序,,在安装好jdk 1.7以及配置好jdk和grails环境变量后进行grails测试,在win8.1的命令行窗口中输入以 ...
- 【工作笔记二】ASP.NET MVC框架下使用MVVM模式
ASP.NET MVC框架下使用MVVM模式 原文:http://www.cnblogs.com/n-pei/archive/2011/07/21/2113022.html 对于asp.net mvc ...
- jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}
笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- 学习笔记(二)--->《Java 8编程官方参考教程(第9版).pdf》:第七章到九章学习笔记
注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法者自负一切 ...
- Go语言学习笔记二: 变量
Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...
- JDBC学习笔记二
JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...
- DirectX11笔记(二)--Direct3D初始化1之基本概念
原文:DirectX11笔记(二)--Direct3D初始化1之基本概念 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737/art ...
随机推荐
- 4.Apache Spark的工作原理
Apache Spark的工作原理 1 Why Apache Spark 2 关于Apache Spark 3 如何安装Apache Spark 4 Apache Spark的工作原理 5 spark ...
- javascript编程解决黑白卡片问题
问题描述: 时间限制:1秒 空间限制:32768K 牛牛有n张卡片排成一个序列.每张卡片一面是黑色的,另一面是白色的.初始状态的时候有些卡片是黑色朝上,有些卡片是白色朝上.牛牛现在想要把一些卡片翻过来 ...
- 消息队列中间件 RocketMQ 源码分析 —— Message 存储
- 46. leetcode 500. Keyboard Row
500. Keyboard Row Given a List of words, return the words that can be typed using letters of alphabe ...
- Fliptile 翻格子游戏[Usaco2007 Open]
题目描述 Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. ...
- OpenCV探索之路(二十二):制作一个类“全能扫描王”的简易扫描软件
相信很多人手机里都装了个"扫描全能王"APP,平时可以用它来可以扫描一些证件.文本,确实很好用,第一次用的时候确实感觉功能很强大啊算法很牛逼啊.但是仔细一想,其实这些实现起来也是很 ...
- OC和JS的交互
1.引入类拓展UIWebView+TS_JavaScriptContext, 这个类拓展是能在JSCotext出现的时候就可以拿到. 因为一般情况下JSCotext在webViewDidFinishL ...
- 【我的漫漫跨考路】有生之年·调完了BUG--冒泡排序C++版本
正文之前 今天去牛客网试了试一些实战编程题,感觉贼有意思,但是也很难,挑了个成绩排序的算法题我就开始怼! 对我一个编程经验并不是很丰富的人来说,确实算是个挑战了. 所以我满满当当的搞了四个小时多,才算 ...
- mycat学习心得
最近老大要求我们学习mycat,并运用到实际项目中.现在简单分享下自己的学习心得,也算是只是积累吧. 什么是mycat? 用我的话理解就是:mycat是一种技术,采用mycat后可以提高程序的速度,也 ...
- Cmd Markdown 学习
[TOC] # Cmd Markdown 学习 Markdown 简明语法 1. 斜体和粗体 使用 * 和 ** 表示斜体和粗体. 2. 分级标题 在使用 = 表示一级标题,使用 - 表示二级标题.# ...