当前位置: 首页 > 知识库问答 >
问题:

Hibernate元模型注释处理器不识别Kotlin实体类

闻人高卓
2023-03-14

我有一些Java的实体类和一些静态编程语言的实体类。我只是在我的pom.xml中添加了以下内容:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-jpamodelgen</artifactId>
        <version>${hibernate.version}</version>
    </dependency>

IntelliJ现在显示java实体的元模型类,但不显示kotlin实体。所以我添加了kapt但没有效果:

<plugin>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-maven-plugin</artifactId>
    <version>${kotlin.version}</version>
    <executions>
        <execution>
            <id>compile</id>
            <phase>compile</phase>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
        <execution>
            <id>test-compile</id>
            <phase>test-compile</phase>
            <goals>
                <goal>test-compile</goal>
            </goals>
        </execution>
        <execution>
            <id>kapt</id>
            <goals>
                <goal>kapt</goal>
            </goals>
            <configuration>
                <sourceDirs>
                    <sourceDir>src/main/java</sourceDir>
                </sourceDirs>
                <annotationProcessorPaths>
                    <!-- Specify your annotation processors here. -->
                    <annotationProcessorPath>
                        <groupId>org.hibernate</groupId>
                        <artifactId>hibernate-jpamodelgen</artifactId>
                        <version>${hibernate.version}</version>
                    </annotationProcessorPath>
                </annotationProcessorPaths>
            </configuration>
        </execution>
    </executions>
    <configuration>
        <jvmTarget>11</jvmTarget>
        <args>
            <arg>-Xjvm-default=enable</arg>
            <!--<arg>-XXLanguage:+JvmStaticInInterface</arg>-->
        </args>
        <compilerPlugins>
            <plugin>jpa</plugin>
<!--                        <plugin>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</plugin>-->
        </compilerPlugins>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-noarg</artifactId>
            <version>${kotlin.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-jpamodelgen</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
    </dependencies>
</plugin>

哦。我可以在目标/生成源/kapt/编译/而不是目标/生成源/注释/中看到 Kotlin 类的生成文件。这可能就像设置适当的输出目录一样简单。

现在,当我运行 mvn 干净编译时,我只收到 Java 实体类的错误,说注释已经运行(可能是由 kapt 运行)并创建了类:

[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ MyProject ---
[INFO] Deleting /myproject/target
[INFO] 
[INFO] --- kotlin-maven-plugin:1.3.70:kapt (kapt) @ MyProject ---
[WARNING] 'tools.jar' was not found, kapt may work unreliably
[INFO] Applied plugin: 'jpa'
[INFO] Note: Hibernate JPA 2 Static-Metamodel Generator 5.4.12.Final
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ MyProject ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 200 resources
[INFO] 
[INFO] --- kotlin-maven-plugin:1.3.70:compile (compile) @ MyProject ---
[INFO] Applied plugin: 'jpa'
[WARNING] Duplicate source root: /myproject/target/generated-sources/kapt/compile
[WARNING] Duplicate source root: /myproject/target/generated-sources/kaptKotlin/compile
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:compile (java-compile) @ MyProject ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 261 source files to /myproject/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] Problem with Filer: Attempt to recreate a file for type my.project.db.SomeJavaClass_
[ERROR] Problem with Filer: Attempt to recreate a file for type my.project.db.AnotherJavaClass_
...

共有1个答案

壤驷穆冉
2023-03-14

我删除了hibernate jpamodelgen上的项目依赖项和相同的Kotlin插件依赖项,只在kapt的annotationProcessorPath中提到它。Maven已成功完成。

<!-- Java has a fit if Kapt processes this first,
     so just let Kapt do it and don't tell Java about it. -->
<!--        <dependency>-->
<!--            <groupId>org.hibernate</groupId>-->
<!--            <artifactId>hibernate-jpamodelgen</artifactId>-->
<!--            <version>${hibernate.version}</version>-->
<!--        </dependency>-->

我还返回到智能J设置窗口,删除了JPAMeta模型Entity处理器和未选中的“注释处理”。英特利吉现在似乎也很开心。

 类似资料:
  • 我想从kotlin实体类生成jpa querydsl文件。 在线上有一个很好的例子,说明如何使用gradle生成dsl文件https://github.com/JetBrains/kotlin-examples/blob/master/gradle/kotlin-querydsl/build.gradle. 然而,我试图在maven中实现它,但没有运气。我目前的pom在下面。有人知道问题可能是什么

  • 我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?

  • 我的处理器中有一个简单的注释,如下所示: 这适用于java文件,但一旦我将文件转换为kotlin,注释的导入就不再有效。为什么? 我需要改变什么才能让他的注释也在Kotlin中工作?从文档中,我可以看到kotlin与java注释100%兼容,所以我有点困惑这里有什么问题...如果处理器不工作,需要调整以与kotlin一起工作,我会理解,但我不知道为什么导入本身不工作... 我说的图书馆在这里:ht

  • 所以我试图让Hibernate Validator注释处理器在Kotlin项目中工作,来检查我的JSR 380注释,运气不太好。 不幸的是,文档中没有提到如何用Gradle设置它,很明显,对于Kotlin,我们必须使用“Kapt”来启用java注释处理器。 Hibernate验证器注释处理器文档:http://docs.jboss.org/hibernate/stable/validator/re

  • 我看到一个例子解释了Kotlin JVM的KATP,它正在工作。 我想知道它是否支持Kotlin JS?有什么例子吗?

  • 我的gradle构建: 处理器不在单独的模块中。 处理器不做任何事情,在< code>#process中,它只是抛出,看看它是否在工作。 但绝对没有发生任何事情。没有错误,什么都没有。我怎样才能使它工作?