我目前正在尝试从Gradle 4.8.1升级到5.1.1,但无法为我们的代码生成Hibernate元模型。
问题是Gradle 5忽略了通过编译类路径传递的注解处理器,但我发现的所有插件都在使用这个(即"-proc:only"
)。
我尝试按照gradle(https://docs.gradle.org/4.6/release-notes.html#convenient-declaration-of-annotation-processor-dependencies)所指出的那样显式地指定注解处理器annotationProcessor 'org.hibernate:hibernate-jpamodelgen'
但这并没有帮助,我仍然得到以下错误:
警告:未请求编译的注解处理,但未找到处理器。
也许插件也需要更新,但正如我所说,我发现的所有插件都通过注解处理器的类路径。我们目前正在使用这个:https://github.com/Catalysts/cat-gradle-plugins/tree/master/cat-gradle-hibernate-plugin
2条答案
按热度按时间bz4sfanl1#
你可以删除jpa modelgen的插件,然后使用
另外,我使用这些设置来配置生成的代码应该驻留在哪里。
js5cn81o2#
在项目中使用元模型时,您可能会在构建过程中遇到诸如
error: package jakarta.persistence.metamodel does not exist
错误之类的问题。提供的最初接受的解决方案使用的代码现在在Gradle的新版本中被弃用。此外,它引入了一个新的generated
编译目标,这可能会导致进一步的复杂性。我提出的替代解决方案旨在通过利用更新的Gradle特性和避免潜在问题来解决这些问题。
首先,我们需要在
annotationProcessor
配置中包含Hibernate JPA Model Generator(org.hibernate:hibernate-jpamodelgen
工件)。此配置指示Java编译器在注解处理阶段使用Hibernate JPA模型生成器,在编译时从实体生成JPA元模型类。请记住将
<version>
替换为所需的版本号。第二,我们需要配置Gradle应该放置生成的源文件的位置,确保IDE和构建系统正确识别和编译这些文件。以下Gradle配置通过为每个源集调整
annotationProcessorGeneratedSourcesDirectory
选项,以一致且组织友好的方式存储生成的源来实现:通过使用
configureEach
,我们可以确保将此配置应用于项目中的所有源代码集。对于每个源集(例如main
、test
),生成的源文件将按照项目层次结构组织到专用文件夹中。总之,这个替代解决方案避免了不推荐的代码,并通过使用更新的Gradle特性最小化潜在问题。添加此配置将使生成的JPA元模型类能够被正确识别、编译并在项目中使用,而不会出现任何问题。