如何从jar将域类导入Micronaut项目?

时间:2018-12-04 21:34:18

标签: java hibernate grails gorm micronaut

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

现在,我希望使该域类对另一个Micronaut项目(2)通用。

我尝试构建仅包含域包并将其包含在项目2到build.gradle中的JAR文件。这些类已编译并可以在代码中访问,并且我可以调用findBycreateCriteria等GORM方法。还不错的是,所有项目2的域类都用{{ 1}}。

但是,当我运行项目(使用IntelliJ)并点击一些代码时,我得到了:

@Entity

我知道GORM的配置和初始化正确,因为我在项目2中创建了一个“本地”域类,并且一切正常。

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

编辑1:当前的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. 依赖项:

build.gradle

谢谢!

1 个答案:

答案 0 :(得分:2)

我正在使用类似的设置。

我有一个具有GORM独立版本的核心库,并通过gradle的compile project()compile dep:from-artifactory:0.1-SNAPSHOT指令使用了几个(Vert.x)verticles和Grails应用程序。

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

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)对于no-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 )