如何修复 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 tr​​ip.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 的域类。请重试并输入有效的域类名称”的主要内容,如果未能解决你的问题,请参考以下文章

Grails 布局没有改变

热代码修复正在编译但未在 grails 2.4.4 中选择

如何在 Grails 控制器之间传递错误消息?

Spring Security UI 和 grails 2.0

在 Grails 中,如何在字段旁边显示验证错误消息?

升级后 Grails 验证不起作用