Как сгенерировать метамодель JPA с помощью Gradle 5.x
В настоящее время я пытаюсь выполнить обновление с версии 4.8.1 до 5.1.1, но не могу создать метамодель гибернации для нашего кода.
Проблема в том, что Gradle 5 игнорирует процессор аннотаций, переданный с путем компиляции classpath, но все плагины, которые я обнаружил, используют это (т.е. "-proc:only"
).
Я попытался указать процессор аннотаций явно, как указано gradle ( https://docs.gradle.org/4.6/release-notes.html)annotationProcessor 'org.hibernate:hibernate-jpamodelgen'
Но это не помогает, и я все еще получаю следующую ошибку:
предупреждение: обработка аннотации без компиляции запрошена, но процессоры не найдены.
Может быть, плагины также должны быть обновлены, но, как я сказал, все плагины, которые я нашел, передают процессор аннотаций с classpath. В настоящее время мы используем это: https://github.com/Catalysts/cat-gradle-plugins/tree/master/cat-gradle-hibernate-plugin
3 ответа
Вы можете просто удалить плагин для модели JPA и просто использовать
annotationProcessor('org.hibernate:hibernate-jpamodelgen:<version>')
Дополнительно я использую эти настройки, чтобы настроить, где должен жить сгенерированный код.
tasks.withType(JavaCompile) {
options.annotationProcessorGeneratedSourcesDirectory = file("src/generated/java")
}
compileJava.options.compilerArgs += [
]
sourceSets {
generated {
java {
srcDirs = ['src/generated/java']
}
}
}
При работе с метамоделями в вашем проекте вы можете столкнуться с такими проблемами, как
Предлагаемое мной альтернативное решение направлено на решение этих проблем за счет использования обновленных функций Gradle и предотвращения потенциальных проблем.
Во-первых, нам нужно включить генератор моделей Hibernate JPA (файл
dependencies {
annotationProcessor('org.hibernate.orm:hibernate-jpamodelgen:<version>')
}
Не забудьте заменить
Во-вторых, нам нужно настроить, где Gradle должен размещать сгенерированные исходные файлы, чтобы IDE и система сборки правильно распознавали и компилировали эти файлы. Следующая конфигурация Gradle достигает этого путем адаптации
sourceSets.configureEach { sourceSet ->
tasks.named(sourceSet.compileJavaTaskName).configure {
options.annotationProcessorGeneratedSourcesDirectory = file("$buildDir/generated/sources/annotationProcessor/java/$sourceSet.name")
}
}
Используя
Таким образом, это альтернативное решение позволяет избежать устаревшего кода и сводит к минимуму потенциальные проблемы за счет использования новых функций Gradle. Добавление этой конфигурации позволит правильно распознавать, компилировать и использовать в проекте созданные классы метамодели JPA без каких-либо проблем.
Использование Gradle 8.3 и IntelliJ IDEA 2023.1.2 после добавления
dependencies {
annotationProcessor("org.hibernate.orm:hibernate-jpamodelgen:6.3.1.Final")
}
для build.gradle.kts, работает./gradlew compileJava
и обновив проект Idea, Idea автоматически подхватила сгенерированные источники (расположенные в папкеbuild/generated/sources/annotationProcessor/java
).