如何将域 类 从 jar 导入到 Micronaut 项目中?
How to import domain classes from jar into a Micronaut project?
我有一个 Micronaut 项目配置为使用 GORM 和 Groovy (1)。该项目包含许多领域 class,它们运行良好,按预期将数据持久保存在 MySQL 数据库中。
现在我想让这个域 classes 为另一个 Micronaut 项目 (2) 所共有。
我尝试构建一个仅包含域包的 JAR 文件,并通过 build.gradle
将其包含在项目 (2) 中。 classes 已编译并可在代码中访问,我可以调用 GORM 方法,如 findBy
、createCriteria
等。还值得一提的是,所有项目 2 的域 classes 被注释为 @Entity
.
但是,当我 运行 项目(使用 IntelliJ idea)并点击这段代码时,我得到:
Either class [com.project2.domain.Foo] is not a
domain class or GORM has not been initialized correctly or has already
been shutdown. Ensure GORM is loaded and configured correctly before
calling any methods on a GORM entity.
我知道 GORM 配置和初始化都很好,因为我在项目 2 中创建了一个 "local" 域 class,并且一切正常。
在问这个问题之前我看到了这个,也许可以带来一些启发:
编辑 1:当前 build.gradle
依赖项:
dependencies {
compile "io.micronaut.configuration:micronaut-kafka"
compile "io.micronaut.configuration:micronaut-hibernate-validator"
compile("io.micronaut.configuration:micronaut-hibernate-gorm") {
exclude group: 'org.grails', module: 'grails-datastore-gorm-hibernate5'
}
compile "org.grails:grails-datastore-gorm-hibernate5:6.1.9.RELEASE"
compile "io.micronaut:micronaut-http-client"
compile "io.micronaut:micronaut-http-server-netty"
compile "io.micronaut:micronaut-runtime-groovy"
compile "io.micronaut:micronaut-validation"
compileOnly "io.micronaut:micronaut-inject-groovy"
runtime "ch.qos.logback:logback-classic:1.2.3"
runtime "org.apache.tomcat:tomcat-jdbc"
runtime "mysql:mysql-connector-java:6.0.6"
testCompile "io.micronaut:micronaut-inject-groovy"
testCompile("org.spockframework:spock-core") {
exclude group: "org.codehaus.groovy", module: "groovy-all"
}
compile files('src/main/resources/libs/my-domain-lib.jar')
}
提前致谢!
我正在使用类似的设置。
我有一个独立的 GORM 核心库,还有几个 (Vert.x) Verticles 和 Grails 应用程序通过 gradle 的 compile project()
或 compile dep:from-artifactory:0.1-SNAPSHOT
指令。
为了让它成为可能,我需要:
1) 确保每个域 class 都带有 grails.gorm.annotation.Entity
注释
2) 像这样调整 Grails 的 Application.groovy
:
class Application extends GrailsAutoConfiguration {
@Override
protected boolean limitScanningToApplication() {
false
}
@Override
Collection<String> packageNames() {
super.packageNames() + 'your.domainclass.package'
}
}
3) 对于非 Grails 项目,我需要自己找到并初始化域 classes,对于每个数据库,它可能不同(我的是 Mongo-GORM
)
ClassPathScanningCandidateComponentProvider compProvider = new ClassPathScanningCandidateComponentProvider( false )
compProvider.addIncludeFilter new AnnotationTypeFilter( Entity )
def domainClasses = compProvider.findCandidateComponents( 'io.my.domain' ).collect{ BeanDefinition bd -> Class.forName bd.beanClassName }
new MongoDatastore( config, *domainClasses )
我有一个 Micronaut 项目配置为使用 GORM 和 Groovy (1)。该项目包含许多领域 class,它们运行良好,按预期将数据持久保存在 MySQL 数据库中。
现在我想让这个域 classes 为另一个 Micronaut 项目 (2) 所共有。
我尝试构建一个仅包含域包的 JAR 文件,并通过 build.gradle
将其包含在项目 (2) 中。 classes 已编译并可在代码中访问,我可以调用 GORM 方法,如 findBy
、createCriteria
等。还值得一提的是,所有项目 2 的域 classes 被注释为 @Entity
.
但是,当我 运行 项目(使用 IntelliJ idea)并点击这段代码时,我得到:
Either class [com.project2.domain.Foo] is not a
domain class or GORM has not been initialized correctly or has already
been shutdown. Ensure GORM is loaded and configured correctly before
calling any methods on a GORM entity.
我知道 GORM 配置和初始化都很好,因为我在项目 2 中创建了一个 "local" 域 class,并且一切正常。
在问这个问题之前我看到了这个,也许可以带来一些启发:
编辑 1:当前 build.gradle
依赖项:
dependencies {
compile "io.micronaut.configuration:micronaut-kafka"
compile "io.micronaut.configuration:micronaut-hibernate-validator"
compile("io.micronaut.configuration:micronaut-hibernate-gorm") {
exclude group: 'org.grails', module: 'grails-datastore-gorm-hibernate5'
}
compile "org.grails:grails-datastore-gorm-hibernate5:6.1.9.RELEASE"
compile "io.micronaut:micronaut-http-client"
compile "io.micronaut:micronaut-http-server-netty"
compile "io.micronaut:micronaut-runtime-groovy"
compile "io.micronaut:micronaut-validation"
compileOnly "io.micronaut:micronaut-inject-groovy"
runtime "ch.qos.logback:logback-classic:1.2.3"
runtime "org.apache.tomcat:tomcat-jdbc"
runtime "mysql:mysql-connector-java:6.0.6"
testCompile "io.micronaut:micronaut-inject-groovy"
testCompile("org.spockframework:spock-core") {
exclude group: "org.codehaus.groovy", module: "groovy-all"
}
compile files('src/main/resources/libs/my-domain-lib.jar')
}
提前致谢!
我正在使用类似的设置。
我有一个独立的 GORM 核心库,还有几个 (Vert.x) Verticles 和 Grails 应用程序通过 gradle 的 compile project()
或 compile dep:from-artifactory:0.1-SNAPSHOT
指令。
为了让它成为可能,我需要:
1) 确保每个域 class 都带有 grails.gorm.annotation.Entity
2) 像这样调整 Grails 的 Application.groovy
:
class Application extends GrailsAutoConfiguration {
@Override
protected boolean limitScanningToApplication() {
false
}
@Override
Collection<String> packageNames() {
super.packageNames() + 'your.domainclass.package'
}
}
3) 对于非 Grails 项目,我需要自己找到并初始化域 classes,对于每个数据库,它可能不同(我的是 Mongo-GORM
)
ClassPathScanningCandidateComponentProvider compProvider = new ClassPathScanningCandidateComponentProvider( false )
compProvider.addIncludeFilter new AnnotationTypeFilter( Entity )
def domainClasses = compProvider.findCandidateComponents( 'io.my.domain' ).collect{ BeanDefinition bd -> Class.forName bd.beanClassName }
new MongoDatastore( config, *domainClasses )