IntelliJ 无法识别 JPA 静态元模型
JPA Static Metamodel not recognized by IntelliJ
我使用 JHipster 生成了应用程序,Gradle 作为构建工具。
当我创建实体时,我添加了过滤支持,它生成了 JPA 静态元模型。但是 IntelliJ 不识别元模型。
我在 IntelliJ 上启用了注释处理器设置,但它似乎不起作用。
我必须更改哪些设置才能让 IntelliJ 识别 JPA 静态元模型?
Intellij 的构建识别此文件中列出的所有处理器:
META-INF/services/javax.annotation.processing.Processor
.
如果您使用 Eclipse Link,请在文件中包含此行:
org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor
案例休眠:
org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
确保您拥有所有依赖项:我将以使用 maven 为例进行说明:
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
<version>2.7.0</version>
<scope>provided</scope>
</dependency>
或
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>5.2.12.Final</version>
<scope>provided</scope>
</dependency>
默认情况下,元模型 类 生成到 /target/generated-sources/annotations
文件夹中。该文件夹似乎未注册为源文件夹。
您可以在 IDE 中手动更改它,或者如果您使用的是 Maven 构建,则可以通过将以下插件添加到构建配置来自动执行此操作:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>target/generated-sources/annotations</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
我在 one of my Hibernate Tips 中更详细地解释了这一点。
为了让 IntelliJ IDEA 识别生成的 类,我必须在 build.gradle
上添加这一行
sourceSets {
main.java.srcDirs += 'build/generated/source/apt/main'
}
更新
更好的解决办法是修改IntelliJ Plugin
idea {
module {
sourceDirs += file("build/generated/source/apt/main")
generatedSourceDirs += file("build/generated/source/apt/main")
}
}
我不能发表评论,但我想补充一下 Thorben Janssen 的回答。
除了插件配置外,我还必须将其添加到项目的依赖项中:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>5.4.21.Final</version>
</dependency>
这就是在 target/generated-sources/annotations 路径中生成源代码的原因。
所以 pom 最终变成了这样:
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>5.4.21.Final</version>
</dependency>
...
</dependencies>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>add-source</id>
<goals>
<goal>add-source</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<sources>
<source>target/generated-sources/annotations</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
...
</build>
我使用 JHipster 生成了应用程序,Gradle 作为构建工具。
当我创建实体时,我添加了过滤支持,它生成了 JPA 静态元模型。但是 IntelliJ 不识别元模型。
我在 IntelliJ 上启用了注释处理器设置,但它似乎不起作用。
我必须更改哪些设置才能让 IntelliJ 识别 JPA 静态元模型?
Intellij 的构建识别此文件中列出的所有处理器:
META-INF/services/javax.annotation.processing.Processor
.
如果您使用 Eclipse Link,请在文件中包含此行:
org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor
案例休眠:
org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
确保您拥有所有依赖项:我将以使用 maven 为例进行说明:
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
<version>2.7.0</version>
<scope>provided</scope>
</dependency>
或
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>5.2.12.Final</version>
<scope>provided</scope>
</dependency>
默认情况下,元模型 类 生成到 /target/generated-sources/annotations
文件夹中。该文件夹似乎未注册为源文件夹。
您可以在 IDE 中手动更改它,或者如果您使用的是 Maven 构建,则可以通过将以下插件添加到构建配置来自动执行此操作:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>target/generated-sources/annotations</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
我在 one of my Hibernate Tips 中更详细地解释了这一点。
为了让 IntelliJ IDEA 识别生成的 类,我必须在 build.gradle
sourceSets {
main.java.srcDirs += 'build/generated/source/apt/main'
}
更新
更好的解决办法是修改IntelliJ Plugin
idea {
module {
sourceDirs += file("build/generated/source/apt/main")
generatedSourceDirs += file("build/generated/source/apt/main")
}
}
我不能发表评论,但我想补充一下 Thorben Janssen 的回答。 除了插件配置外,我还必须将其添加到项目的依赖项中:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>5.4.21.Final</version>
</dependency>
这就是在 target/generated-sources/annotations 路径中生成源代码的原因。
所以 pom 最终变成了这样:
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>5.4.21.Final</version>
</dependency>
...
</dependencies>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>add-source</id>
<goals>
<goal>add-source</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<sources>
<source>target/generated-sources/annotations</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
...
</build>