我正在尝试使用Grails项目作为插件来基本上在插件中使用我的域类,然后在多个Grails项目中使用它们。
我已经这样做了:
grails create-app web
grails create-app插件
在两个项目的根目录中创建一个settings.gradle 包括'插件','网络'
然后我在插件中添加了spring security,并使用s2-quickstart创建了一个用户和一个角色域类,并为Bootstrap.groovy添加了一些默认用户。
单独启动插件项目并不会显示任何问题。
现在我将插件添加为Web项目的依赖项: 编译(':插件') 这样我可以从web项目中的插件访问域类,它编译得很好。我将spring配置添加到application.groovy,现在尝试使用web项目中插件的域类。
尝试这个但是我的项目没有正确启动它告诉我这个:
java.lang.IllegalStateException: Either class [htcommon.HtRole] is not a domain class or GORM has not been initialized correctly or has already been shutdown. If you are unit testing your entities using the mocking APIs
我的代码一旦尝试执行新的HtRole(...)。save()
似乎插件中的域类不会以某种方式被识别为GORM类。
答案 0 :(得分:4)
域未被识别为GORM类的问题是由于其中提供的构造函数。这些构造函数是从s2-quickstart
生成的,但是应该被删除(这是spring-security-core中的一个bug)。我删除了构造函数和你使用它们的一个地方我使用了map style default constructors。然后我修复了你必须得到当前用户的电话。
The repaired source is in this repo on GitHub(patch-1分支正在工作,master是OP的原始破解代码)
答案 1 :(得分:2)
在Grails 3.1.6中使用grails run-app
运行包含GORM域的插件时收到了相同的错误消息。我通过提供用于初始化Hibernate的显式配置来解决问题,如下所示:
<强>的build.gradle:强>
dependencies {
...
runtime "org.grails.plugins:hibernate4"
runtime "org.hibernate:hibernate-ehcache"
}
<强>的grails-app / CONF / application.yml:强>
---
environments:
development:
hibernate:
cache:
queries: false
use_second_level_cache: true
use_query_cache: false
region.factory_class: 'org.hibernate.cache.ehcache.EhCacheRegionFactory'
dataSource:
pooled: true
jmxExport: true
driverClassName: org.h2.Driver
username: sa
password:
dbCreate: create-drop
url: jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE