java - 如何将 jar 中的域类导入到 Micronaut 项目中?

标签 java hibernate grails grails-orm micronaut

我有一个配置为使用 GORM 和 Groovy (1) 的 Micronaut 项目。该项目包含许多完美运行的域类,按预期将数据持久保存在 MySQL 数据库中。

现在我想让这个域类对另一个 Micronaut 项目 (2) 通用。

我尝试构建一个仅包含域包的 JAR 文件,并将其包含在项目 (2) 中至 build.gradle .这些类被编译并可以在代码中访问,我可以调用 GORM 方法,如 findBy , createCriteria等等。还值得一提的是,所有项目 2 的域类都用 @Entity 进行了注释。 .

但是,当我运行该项目(使用 IntelliJ 想法)并点击其中的一些代码时,我得到:

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 中创建了一个“本地”域类并且一切正常。

在问这个问题之前我看到了这个,也许可以带来一些启发:Importing domain classes from GORM-standalone module into Grails

编辑 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-standalone 的核心库,以及几个 (Vert.x) verticles 和 Grails 应用程序,它们通过 gradle 的 compile project() 使用这些应用程序。或 compile dep:from-artifactory:0.1-SNAPSHOT指令。

为了使它成为可能,我需要:

1) 确保每个域类都用 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 项目,我需要自己查找和初始化域类,对于每个数据库,它可以不同(我的是 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 )

关于java - 如何将 jar 中的域类导入到 Micronaut 项目中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53621770/

相关文章:

java - Grails:拆分包含管道的字符串

java - Bean 属性不可读或具有无效的 getter 方法 : Does the return type of the getter match the parameter type of the setter? Spring Batch

hibernate - org.hibernate.ObjectDeletedException : deleted object would be re-saved by cascade (remove deleted object from associations):

grails - 将grails部署为Tomcat根

java - hibernate从与具有一对多关系的子表完全匹配的列表中搜索查询

java - 将输入字段与一列通配符匹配

java - N 分钟后绝对 session 过期,即使用户正在使用系统

C# ecdsa 签名 - 我可以选择哪种 key 规范?

java - 使用 pdfbox 编辑 pdf 页面

java - Mockito Matchers.any(...) 仅在一个参数上