JHipster5项目在Java 10上使用JPA静态元模型

时间:2018-05-25 18:37:21

标签: jpa jhipster metamodel maven-compiler-plugin java-10

我一直在尝试升级我的JHipster 5应用程序以使用Java 10,但我无法使用Maven编译和处理JPA静态元模型。

显然maven-compiler-plugin未触发hibernate-jpamodelgen以生成JPA静态元模型。

为了升级项目,我有:

  • 安装了Oracle的JDK 10.0.1
  • 将我的pom.xml切换为<java.version>10</java.version>
  • 升级的maven-compiler-plugin添加java.xml.bind模块(因为默认情况下不包括Java 10),如下所示:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven-compiler-plugin.version}</version>
            <configuration>
                <!-- fork is needed so compiler args can be used -->
                <fork>true</fork>
                <compilerArgs>
                    <arg>-J--add-modules</arg>
                    <arg>-Jjava.xml.bind</arg>
                </compilerArgs>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${mapstruct.version}</version>
                    </path>
                    <!-- For JPA static metamodel generation -->
                    <path>
                        <groupId>org.hibernate</groupId>
                        <artifactId>hibernate-jpamodelgen</artifactId>
                        <version>${hibernate.version}</version>
                    </path>
    
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    

有了这个,我运行./mvnw clean compile时没有进一步的详细错误消息,导致编译失败。

如果我从pom.xml中删除<compilerArgs>标记并运行相同的命令,我会得到:java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

我已按照here

提供的升级说明进行操作

此外,我在GitHub

上提供了此示例项目

This是我升级到Java 10的提交更改

2 个答案:

答案 0 :(得分:3)

为了在这里注册希望帮助他人的解决方案,以下是解决这个问题的方法:

事实证明,与hibernate-jpamodelgen@5.2.16.Final存在一些Java 9兼容性问题。一旦我升级到Hibernate版本5.3.1.Final,它就开始再次编译。

我还必须在this answer之后解决JAXB依赖关系。

答案 1 :(得分:0)

我有同样的问题。使用Java 10,SpringBoot 2.0.3,Hibernate 5.3.1。

在Gradle中对我有用的是将javax.xml.bind也添加到注释处理器中:

annotationProcessor group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'

annotationProcessor group: 'org.hibernate', name: 'hibernate-jpamodelgen', version: '5.3.1.Final'

通过这种方式,hibernate-jpamodelgen不再抱怨他缺少javax.xml.bind依赖项,因为它与他(annotationProcessor)在同一个组中