【问题标题】:How to use JPA metamodel with gradle, intellij IDEA?如何将 JPA 元模型与 gradle、intellij IDEA 一起使用?
【发布时间】:2018-09-24 14:12:42
【问题描述】:

我正在使用 java 8、spring boot 2.0.0、spring-data-jpa(spring-boot-starter-data-jpa)、gradle、intellij。我一直在尝试使用 JPA Metamodel,但很难找到如何配置。

实体类的元模型不仅仅是生成的。

我猜这很简单,但现在看来可能是错误的。我该如何使用它?

【问题讨论】:

标签: spring-boot jpa gradle intellij-idea metamodel


【解决方案1】:

JDK11 / Gradle 5.0 / Hibernate 5.3.7.Final

sourceSets.main.java.srcDirs += "${buildDir}/generated"

compileJava {
  options.annotationProcessorGeneratedSourcesDirectory = file("${buildDir}/generated")
}

dependencies {
  annotationProcessor("javax.xml.bind:jaxb-api")
  annotationProcessor("org.hibernate:hibernate-jpamodelgen")
}

生成的元模型类将在“构建/生成”处生成

如果您使用的是 JDK8 或 Hibernate 5.4+,则可能不需要annotationProcessor("javax.xml.bind:jaxb-api")

【讨论】:

    【解决方案2】:

    前几天我使用 scalified 元模型 gradle 插件 (https://plugins.gradle.org/plugin/com.scalified.plugins.gradle.metamodel) 做到了这一点。我正在使用 Spring Boot 2.0.5,但我不明白为什么它与 Spring Boot 2.0.0 不一样。我也在使用 Gradle 4.8.1。

    以下是我的 build.gradle 的摘录。

    buildscript {
    repositories {
       maven {
         url "https://plugins.gradle.org/m2/"
       }
    }
    dependencies {
      classpath (
          "org.springframework.boot:spring-boot-gradle-plugin:2.0.0",
          "gradle.plugin.com.scalified.plugins.gradle:metamodel:0.0.1");
      }
    }
    
    apply plugin: "com.scalified.plugins.gradle.metamodel"
    
    // The plugin will default to the latest version of Hibernate if this is not specified
    metamodel {
       hibernateVersion = '5.2.14.Final' // For Spring Boot 2.0.0
       hibernateVersion = '5.2.17.Final' // For Spring Boot 2.0.5
    }
    

    这会在 src/generated 下构建元模态文件,它们可以在您的代码中使用。我还必须更改 IntelliJ 设置,因为 IntelliJ 的 Build Automatically 排除了一些可能长时间运行的 Gradle 任务。请参阅Automatically run Gradle task in project build with IntelliJ IDEAhttps://youtrack.jetbrains.com/issue/IDEA-175165 了解更多详情。

    我改变这个设置来克服这个问题是:Preferences->Build/Execution/Deployment->Gradle->Runner->Delegate IDE build/run actions to Gradle。另一种方法是根据需要手动运行 metamodelCompile gradle 任务。如果您不经常更改您的实体,这将减少一点重建时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 2019-02-03
      • 1970-01-01
      • 2013-08-09
      • 2019-02-22
      • 2013-04-14
      相关资源
      最近更新 更多