【问题标题】:How can I generate JPA metamodel in spring-boot with gradle?(+ lombok)如何使用 gradle 在 spring-boot 中生成 JPA 元模型?(+ lombok)
【发布时间】:2019-05-21 00:10:25
【问题描述】:

我想将 JPA 元模型添加到我的项目中 - Spring boot + gradle

我找到了很多例子,但我怎么能做到,但都是Maven。我也找到了这个网站:https://plugins.gradle.org/search?term=metamodel

并尝试前三个插件。对于每个插件,我都会遇到错误:error: cannot find symbol 在标记为 lombok @Builder 注释的类中,而某些类不是 entity。这是一些插件的例子:

    buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "com.github.iboyko.gradle.plugins:jpamodelgen-plugin:1.0.1"
    }
 }

    dependencies {
        compile ('org.hibernate:hibernate-jpamodelgen')
    }

1) 在Spring boot + spring-data-jpa + gradle 中创建JPA metamodel 哪个插件或方法最官方(正确)?

2) 如何只指定带有entities 的包而不扫描其他类?

3) 如何与lombok交朋友?

编辑

我将此代码添加到 gradle 文件中:

sourceSets.configureEach { sourceSet ->
    tasks.named(sourceSet.compileJavaTaskName).configure {
        options.annotationProcessorGeneratedSourcesDirectory = file("$buildDir/generated/sources/java")
    }
}

它会生成classes_ 很好。之后我标记

generated/sources/java 

生成类的文件夹根目录(点击该文件夹并标记为)

之后我尝试在我的存储库中导入生成的类,IDE 显示如下:

对于每个模块,我有 2 个模块 - my_module 和 my_module_main(我不明白为什么),所有类都在 my_module 中生成,但所有代码都在 my_module_main 中。如果我添加这个依赖 - 我有这个:

在生成的类中我有这个:

【问题讨论】:

    标签: spring-boot jpa gradle spring-data-jpa metamodel


    【解决方案1】:

    我正在努力解决同样的问题。最后,我通过在 compileOnly 和 annotationProcessor 表单中添加两个依赖项来让它工作。不要问我为什么,但它以某种方式起作用。

    compileOnly 'org.projectlombok:lombok:1.18.10'
    annotationProcessor 'org.projectlombok:lombok:1.18.10'
    compileOnly 'org.hibernate:hibernate-jpamodelgen'
    annotationProcessor('org.hibernate:hibernate-jpamodelgen')
    

    【讨论】:

      【解决方案2】:

      您是否使用 Spring Initalizr 生成项目?

      这是你从 Initializr 得到的(期待我自己添加的 jpamodelgen):

      buildscript {
          ext {
              springBootVersion = '2.1.1.RELEASE'
          }
          repositories {
              mavenCentral()
          }
          dependencies {
              classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
          }
      }
      
      apply plugin: 'java'
      apply plugin: 'eclipse'
      apply plugin: 'org.springframework.boot'
      apply plugin: 'io.spring.dependency-management'
      
      group = 'com.example'
      version = '0.0.1-SNAPSHOT'
      sourceCompatibility = 1.8
      
      repositories {
          mavenCentral()
      }
      
      dependencies {
          implementation('org.springframework.boot:spring-boot-starter-data-jpa')
          runtime('com.h2database:h2')
          compileOnly('org.projectlombok:lombok')
          compileOnly ('org.hibernate:hibernate-jpamodelgen')
          testImplementation('org.springframework.boot:spring-boot-starter-test')
      }
      
      // Add source set to define where the generated source code should go to
      sourceSets.configureEach { sourceSet ->
          tasks.named(sourceSet.compileJavaTaskName).configure {
              options.annotationProcessorGeneratedSourcesDirectory = file("$buildDir/generated/sources/java")
          }
      }
      

      你可以在 GitHub 上找到一个演示项目:

      https://github.com/simasch/demo-gradle-jpa

      在 IntelliJ 中,您可以右键单击 generate/sources/java 并选择

      【讨论】:

      • 我怎样才能用你的例子生成 JPA 元模型?
      • 依赖 compileOnly ('org.hibernate:hibernate-jpamodelgen') 会自动生成_类
      • 这很奇怪,因为我有这样的依赖,它不起作用。因此,我开始为此寻找合适的插件。
      • 你觉得它怎么行不通?你会发现/build/classes里面的_classes不会有源代码
      • 在这个文件夹中,我有我的应用程序的所有原始类,并且没有一个(并且不在一个文件夹中)类 MyClass_。我认为你错了。要生成元模型,您不仅需要依赖项,还需要一个插件来开始生成此模型。至少在 Maven 中它是这样工作的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 2019-10-01
      • 2017-03-21
      • 1970-01-01
      • 2017-11-27
      • 2021-05-30
      • 2011-03-03
      相关资源
      最近更新 更多