JPA2 元模型生成器不从依赖库生成模型
JPA2 metamodel generator does not generate models from dependency libraries
我的 Maven 项目中有一个依赖库。这个库包含 JPA2 实体。在构建过程中只生成根项目中实体的模型,而不是库中实体的模型。我已经尝试过 eclipse link 生成器 (CanonicalModelProcessor) 和 hibernate 生成器 (JPAMetaModelEntityProcessor) 我无法找到任何配置参数,这些参数还包括项目对元模型生成的依赖性。我也没有找到任何相关的搜索网站。我还尝试通过 class 标签
在 persistence.xml 的持久性单元中手动命名所有实体(包括库实体)
<class>com.example.project.domain.CustomEntity</class>
并且还尝试通过
开启自动发现
<exclude-unlisted-classes>false</exclude-unlisted-classes>
没有任何帮助。只是为了列出所有细节,我使用的是 Netbeans 8.0.2,项目设置为 Java 7 和 J2EE7。下面是我的两个生成器的 pom 示例。
休眠:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<annotationProcessors>
<annotationProcessor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</annotationProcessor>
</annotationProcessors>
<debug>true</debug>
<optimize>true</optimize>
<source>1.7</source>
<target>1.7</target>
<compilerArguments>
<AaddGeneratedAnnotation>true</AaddGeneratedAnnotation>
<Adebug>true</Adebug>
<endorseddirs>${endorsed.dir}</endorseddirs>
</compilerArguments>
<outputDirectory>${project.build.directory}/generated-sources/meta-model</outputDirectory>
</configuration>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>4.3.8.Final</version>
<optional>true</optional>
</dependency>
</dependencies>
</plugin>
日食link:
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<version>2.2.4</version>
<executions>
<execution>
<id>eclipselink-jpa-metamodel</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<processors>
<processor>org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor</processor>
</processors>
<outputDirectory>${project.build.directory}/generated-sources/meta-model</outputDirectory>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
<version>2.5.1</version>
</dependency>
</dependencies>
</plugin>
看来 Neil Stockton 是对的。我找到了解决这个问题的两种可能的方法:
- 如果依赖库在你的控制之下,那么你可以将persistence.xml添加回这个依赖项目,进行构建,让modelgen处理器生成模型,然后删除persistence.xml以避免可能出现的问题在将其用作依赖项的项目中。在 jar 组装期间使用 maven 进行简单的自动 persistence.xml 删除看起来像这样:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<excludes>
<exclude>**/persistence.xml</exclude>
</excludes>
</configuration>
</plugin>
- 在您的项目和项目依赖项中实现您自己的@Entity 注释发现,然后让模型处理器为您生成模型。由于我很幸运能够使用解决方案 1,因此我没有可以实现该解决方案的代码片段。
我的 Maven 项目中有一个依赖库。这个库包含 JPA2 实体。在构建过程中只生成根项目中实体的模型,而不是库中实体的模型。我已经尝试过 eclipse link 生成器 (CanonicalModelProcessor) 和 hibernate 生成器 (JPAMetaModelEntityProcessor) 我无法找到任何配置参数,这些参数还包括项目对元模型生成的依赖性。我也没有找到任何相关的搜索网站。我还尝试通过 class 标签
在 persistence.xml 的持久性单元中手动命名所有实体(包括库实体)<class>com.example.project.domain.CustomEntity</class>
并且还尝试通过
开启自动发现<exclude-unlisted-classes>false</exclude-unlisted-classes>
没有任何帮助。只是为了列出所有细节,我使用的是 Netbeans 8.0.2,项目设置为 Java 7 和 J2EE7。下面是我的两个生成器的 pom 示例。
休眠:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<annotationProcessors>
<annotationProcessor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</annotationProcessor>
</annotationProcessors>
<debug>true</debug>
<optimize>true</optimize>
<source>1.7</source>
<target>1.7</target>
<compilerArguments>
<AaddGeneratedAnnotation>true</AaddGeneratedAnnotation>
<Adebug>true</Adebug>
<endorseddirs>${endorsed.dir}</endorseddirs>
</compilerArguments>
<outputDirectory>${project.build.directory}/generated-sources/meta-model</outputDirectory>
</configuration>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>4.3.8.Final</version>
<optional>true</optional>
</dependency>
</dependencies>
</plugin>
日食link:
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<version>2.2.4</version>
<executions>
<execution>
<id>eclipselink-jpa-metamodel</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<processors>
<processor>org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor</processor>
</processors>
<outputDirectory>${project.build.directory}/generated-sources/meta-model</outputDirectory>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
<version>2.5.1</version>
</dependency>
</dependencies>
</plugin>
看来 Neil Stockton 是对的。我找到了解决这个问题的两种可能的方法:
- 如果依赖库在你的控制之下,那么你可以将persistence.xml添加回这个依赖项目,进行构建,让modelgen处理器生成模型,然后删除persistence.xml以避免可能出现的问题在将其用作依赖项的项目中。在 jar 组装期间使用 maven 进行简单的自动 persistence.xml 删除看起来像这样:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<excludes>
<exclude>**/persistence.xml</exclude>
</excludes>
</configuration>
</plugin>
- 在您的项目和项目依赖项中实现您自己的@Entity 注释发现,然后让模型处理器为您生成模型。由于我很幸运能够使用解决方案 1,因此我没有可以实现该解决方案的代码片段。