Как исправить ошибку Grails: "Класс домена не найден для имени PrivacyOptions. Повторите попытку и введите допустимое имя класса домена"
Я только начинаю с Groovy/Grails.
Я добавил новый контроллер домена в свой проект, а генерировать-контроллер ему не нравится.
Есть другие признаки: что-то не так: если я запустил приложение, для этой таблицы в базе данных фактически не создана таблица.
Я сократил DomainController до одного поля String и никаких ограничений, просто чтобы убедиться, что с моей спецификацией не было ничего плохого. Я также попробовал переименовать его, на всякий случай, что было что-то об исходном имени (Privacy), которое противоречило чему-то.
Я уверен, что у меня есть правильное имя и что файл называется 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
Ответы
Ответ 1
Добавьте имя проекта (ака имя пакета из первой строки файла модели) перед именем модели.
grails generate-all projectname.Class
Это тот, который, наконец, работал на меня, после часа царапин и гуглинга.
ref: 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
- Берт
Ответ 2
it not projectname.Class, он должен быть dirname.classname.
например: ваше имя проекта - Helloworld, каталог - "grails-app/domain/helloworld/User.groovy". поэтому команда "grails generate-all helloworld.User", но не "Helloworld.User"
Ответ 3
Run:
grails clean
а затем повторно запустите команду generate-all
.
ref: http://parasjain.net/2009/06/23/grails-no-domain-class-found-for-name-please-try-again-and-enter-a-valid-domain-class-name/
Ответ 4
Отличная помощь. Я столкнулся с такой же проблемой после этого учебника, который называет проект "Trip-Planner", а Grails генерирует каталоги домена как "~/trip/planner/'вместо' ~/trip-plananner/'. Затем команда generate-all для класса Trip должна быть" grails generate-all trip.planner.Trip"
На всякий случай кто-то добавляет символ "-" к имени проекта.
Ответ 5
Да, я тоже работал на меня. Я просто префикс имени пакета в класс, который я пытался сгенерировать, - все это и работало. Итак...
генерировать все racetrack.User
Бит из-за ошибки штанов, так как все другие команды grails не требуют включения имени пакета: -))
Ответ 6
Я не знаю, как вы дошли до этого момента, но, возможно, это поможет вам преодолеть горб.
Можно ли предположить, что вы использовали "grails create-domain-class" для создания объекта домена PrivacyOptions, а Groovy script появился в вашем каталоге grails-app/domain? Получили ли вы тест PrivacyOptionsTests в тесте/подразделении? Прошло ли это? Вы добавили пакет?
Ответ 7
связанная проблема о трассировке стека не ясна для отсутствующих свойств:
http://jira.codehaus.org/browse/GRAILS-1607
Ответ 8
generate-all Имя домена не будет работать, так как требуется полное имя пакета.
Я стараюсь добавить * в первый раз, а затем вы увидите, что класс домена должен выглядеть для других вызовов.
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