如何修复 Grails 错误:“找不到名称 PrivacyOptions 的域类。请重试并输入有效的域类名称”
Posted
技术标签:
【中文标题】如何修复 Grails 错误:“找不到名称 PrivacyOptions 的域类。请重试并输入有效的域类名称”【英文标题】:How can I fix Grails error: "No domain class found for name PrivacyOptions. Please try again and enter a valid domain class name" 【发布时间】:2010-11-17 13:06:55 【问题描述】:我刚刚开始使用 Groovy/Grails。
我在我的项目中添加了一个新的域控制器,而 generate-controller 不喜欢它。
还有其他迹象表明出了点问题:如果我运行该应用程序,实际上并没有为此在数据库中创建表。
我已将 DomainController 简化为一个 String 字段并且没有任何约束,只是为了确保我的规范没有问题。我还尝试重命名它,以防万一原始名称(隐私)与某些内容发生冲突。
我确定我的名称是正确的,该文件名为 PrivacyOptions.groovy,在类中也称为 PrivacyOptions。
这是错误:
Running script /opt/local/grails/scripts/GenerateController.groovy
Environment set to development
Domain class not found in grails-app/domain, trying hibernate mapped classes...
No domain class found for name PrivacyOptions. Please try again and enter a valid domain class name
【问题讨论】:
我遇到了类似的问题。我需要在调用“grails generate-all packagename.domain”时包含包名 【参考方案1】:在模型名称之前添加项目名称(也就是模型文件第一行的包名称)。
grails generate-all projectname.Class
经过一个小时的挠头和谷歌搜索,这终于对我有用了。
参考:http://grails.1312388.n4.nabble.com/Generate-Scaffold-Scripts-Don-t-Work-Getting-No-domain-class-found-Error-td2017858.html#a2017880
从 1.2.2 开始,Grails 在默认为您的包中创建工件 项目名称 - 见http://jira.codehaus.org/browse/GRAILS-5713 所以你需要运行
grails generate-all srapp.Srmodel
- 伯特
【讨论】:
如果您处于交互模式,在输入generate-all
后,点击选项卡,它应该会自动填充您的包名称并显示可能使用的类。节省一些打字和记忆。
自从我发布它以来的三年里,我无法完全理解有多少人为此绊倒并支持它。这是我第一次也是最后一次接触 grails,因为此时我对 grails 作为平台失去了信心。非常感谢大家的代表:-)
当 SO 搜索没有帮助时,我进行了 Google 搜索并弹出了这个。救了我问一个重复的问题!像魅力一样工作。【参考方案2】:
它不是 projectname.Class ,它必须是 dirname.classname 。
例如:你的项目名称是 Helloworld,目录是 "grails-app/domain/helloworld/User.groovy" 。所以,命令是“grails generate-all helloworld.User”,而不是“Helloworld.User”
【讨论】:
【参考方案3】:运行:
grails clean
然后重新运行generate-all
命令。
参考:http://parasjain.net/2009/06/23/grails-no-domain-class-found-for-name-please-try-again-and-enter-a-valid-domain-class-name/
【讨论】:
【参考方案4】:帮助很大。我在this tutorial 之后遇到了同样的问题,将项目命名为“trip-planner”,Grails 将域目录生成为“~/trip/planner/”而不是“~/trip-planner/”。那么 Trip 类的 generate-all 命令应该是 'grails generate-all trip.planner.Trip'
以防万一有人在项目名称中添加“-”字符。
【讨论】:
【参考方案5】:是的……也为我工作。我只是将包名称添加到我试图为其生成的类的前面,它起作用了。所以...
生成所有racetrack.User
确实有点裤子错误,因为所有其他 grails 命令都不需要包含包名称:-))
【讨论】:
【参考方案6】:我不知道你是怎么走到这一步的,但也许this 会帮助你克服困难。
假设您使用“grails create-domain-class”创建 PrivacyOptions 域对象,并且 Groovy 脚本出现在您的 grails-app/domain 目录中,我是否正确?您是否在测试/单元中获得了 PrivacyOptionsTests ?那通过了吗?你添加了一个包吗?
【讨论】:
我是从 NetBeans IDE 完成的。我认为问题在于,当我创建文件时,我选择了“创建一个 groovy 类”选项而不是“创建一个域类”选项。我猜某个秘密配置文件中的某个地方是域类的列表,并且 create-domain-class 进行了必要的内务管理。 是的,create-domain-class 是关键。 Groovy 文件必须位于 grails-app/domain 文件夹中。没有秘密配置文件 @Scott Warren - 这是不正确的。我在 grails-app/domain 文件夹中有域,并且由于不使用 create-domain-class 而遇到了同样的问题 Grails Docs. 见底部附近“请注意,此命令只是为了方便,如果您愿意,您也可以在您喜欢的文本编辑器或 IDE 中创建域类。”【参考方案7】:由于缺少属性而导致堆栈跟踪不清楚的相关问题:
http://jira.codehaus.org/browse/GRAILS-1607
【讨论】:
【参考方案8】:generate-all Domainname 将不起作用,因为需要完整的包名称。 我打算第一次添加一个 *,然后你会看到域类在其他调用中应该是什么样子。
generate-all *
http://grails.org/doc/latest/ref/Command%20Line/generate-all.html
【讨论】:
【参考方案9】:它必须是 dirname.classname。
如果你有一个域类创建书,像这样'grails-app/domain/book/Book.groovy'
应该是:grails generate-app book.Book
【讨论】:
【参考方案10】:如果您正在使用 Groovy/Grails Tool Suite,您可以通过右键单击您创建的控制器来查看域名,注意域名的确切大小写,然后右键单击视图并生成视图并输入域名.viewname
例如,您的控制器名称是 RegistrationController,域名是 helloworld,您可以右键单击视图并在生成视图对话框中输入值 helloworld.Registration
【讨论】:
以上是关于如何修复 Grails 错误:“找不到名称 PrivacyOptions 的域类。请重试并输入有效的域类名称”的主要内容,如果未能解决你的问题,请参考以下文章