【问题标题】:Configure hibernate-jpamodelgen in Maven在 Maven 中配置 hibernate-jpamodelgen
【发布时间】:2019-12-08 23:33:03
【问题描述】:

我想将hibernate-jpamodelgen 配置成Maven pom.xml。我试过这个:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>plugin</groupId>
    <artifactId>org.plugin</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <name>Plugin</name>
    <url>http://maven.apache.org</url>

    <parent>
         ........
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-jpamodelgen</artifactId>
            <version>5.4.3.Final</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>datalis_plugin</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>10</source>
                    <target>10</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>1.18.6</version>
                        </path>
                    </annotationProcessorPaths>
                    <compilerArguments>
                        <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
                    </compilerArguments>
                </configuration>
            </plugin>               
        </plugins>
    </build>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>   
</project>

完整的 POM:https://pastebin.com/VjucMAYL

但我得到错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project org.plugin: Compilation failure
[ERROR] Annotation processor 'org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor' not found

你知道我该如何解决这个问题吗?

我用过这个:https://docs.jboss.org/hibernate/jpamodelgen/1.0/reference/en-US/html_single/

【问题讨论】:

  • 您使用的是哪个 Java 版本?
  • 最新-java版本“12.0.1”2019-04-16

标签: java hibernate maven


【解决方案1】:

我通常只是将 hibernate-jpamodelgen 添加到编译器插件的 annotationprocessorpath。这会阻止处理器被打包在部署中。

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <annotationProcessorPaths>
        <path>
          <groupId>org.mapstruct</groupId>
          <artifactId>mapstruct-processor</artifactId>
          <version>${org.mapstruct.version}</version>
        </path>
        <path>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-jpamodelgen</artifactId>
          <version>5.4.3.Final</version>
        </path>
      </annotationProcessorPaths>
    
    </configuration>
  </plugin>

【讨论】:

  • 如果您使用的是 Spring Boot,您可以使用 &lt;version&gt;${hibernate.version}&lt;/version&gt; 以便版本与 Spring Boot 推荐的版本保持一致。
【解决方案2】:

如果是 Java 12,请在 pom.xml 中使用以下代码 sn-p。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>12</release>  
    </configuration>
</plugin>

在此之后,为 jpamodelgen 添加以下内容。

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-jpamodelgen</artifactId>
  <version>5.4.3.Final</version>
  <optional>true</optional>
</dependency>

【讨论】:

  • org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor怎么样?
  • 看起来它不起作用。我正在尝试实现此代码:pastebin.com/GW7MxMDN 我得到cannot find symbol [ERROR] symbol: variable PaymentTransactions_ 可能是因为未生成PaymentTransactions_。你知道我应该手动创建PaymentTransactions_ 吗?
  • 顺便问一下,你能用maven命令构建项目吗?
  • 使用clean package?
  • 这意味着您可以使用 maven 命令构建项目,而不是生成类。你能检查这个链接。 stackoverflow.com/questions/30764266/…
【解决方案3】:

中删除&lt;scope&gt;provided&lt;/scope&gt;
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-jpamodelgen</artifactId>
        <version>5.4.3.Final</version>
    </dependency>

添加插件

    <plugins>
        ...
        <plugin>
            <groupId>org.bsc.maven</groupId>
            <artifactId>maven-processor-plugin</artifactId>
            <version>3.1.0</version>
            <executions>
                <execution>
                    <id>process</id>
                    <goals>
                        <goal>process</goal>
                    </goals>
                    <phase>generate-sources</phase>
                    <configuration>
                        <processors>
                            <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
                        </processors>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-jpamodelgen</artifactId>
                    <version>5.4.3.Final</version>
                </dependency>
            </dependencies>
        </plugin>
        ...
    </plugins>

然后重建

mvn clean package -DskipTests

【讨论】:

  • 谢谢,昨天我试过了,但我在第 218 行得到了Plugin execution not covered by lifecycle configuration: org.bsc.maven:maven-processor-plugin:3.1.0:process (execution: process, phase: generate-sources)pastebin.com/kRLDwa8s
  • 让我尝试通过添加 来解决它
  • 不幸的是,我可以构建项目,但又没有生成元模型。 ......很奇怪......
  • Spring需要做一些具体的配置吗?
【解决方案4】:

这对我有用

pom.xml:

<dependencies>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-jpamodelgen</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

<build>
  <plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>11</source>
                <target>11</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-configuration-processor</artifactId>
                        <version>2.2.11.RELEASE</version>
                    </path>
                    <path>
                        <groupId>org.hibernate</groupId>
                        <artifactId>hibernate-jpamodelgen</artifactId>
                            <version>5.4.22.Final</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
  </plugins>
</build>

<profiles>
  <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <dependencies>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-jpamodelgen</artifactId>
            </dependency>
        </dependencies>
        <properties>
            <spring.profiles.active>dev</spring.profiles.active>
        </properties>
    </profile>
</profiles>
import com.mycompany.myapp.domain.*; // for static metamodels
import com.mycompany.myapp.domain.User

public class UserQueryService {

private Specification<User> createSpecification(UserCriteria criteria) {
  Specification<User> specification = Specification.where(null);
  if (criteria != null) {
    if (criteria.getId() != null) {
       specification = specification.and(buildSpecification(criteria.getId(), User_.id));
    }
  }
  return specification;
}    
}

【讨论】:

    猜你喜欢
    • 2020-02-01
    • 2019-09-22
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2021-11-06
    • 2016-04-29
    相关资源
    最近更新 更多