Как я могу сгенерировать метамодель JPA в Spring-Boot с Gradle? (+ Lombok) - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу добавить метамодель 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) Какой плагин или метод является наиболее официальным (правильным) для создания JPA metamodel весной boot + spring-data-jpa + gradle?

2) Как я могууказать только пакет с entities и не сканировать другие классы?

3) как с ним подружиться lombok?

РЕДАКТИРОВАТЬ

Я добавляю этот код в файл Gradle:

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

, и он генерирует classes_ нормально.После этого я отмечаю

generated/sources/java 

папку задницу корень сгенерированных классов (щелкните правой кнопкой мыши на этой папке и пометить как)

enter image description here

После этого я пытаюсь импортировать сгенерированные классы в свой репозиторий, и IDE показывает это:

enter image description here

Для каждого модуля у меня есть 2 модуля - my_module и my_module_main (Я не понимаю почему) и все классы генерируют в my_module, но весь код в my_module_main.Если я добавлю эту зависимость - у меня есть это:

enter image description here

и в сгенерированном классе у меня это: enter image description here

1 Ответ

0 голосов
/ 21 декабря 2018

Использовали ли вы 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 вы можете щелкнуть правой кнопкой мыши на сгенерированном / sources / java и выбрать

...