Java 10 上带有 JPA 静态元模型的 JHipster5 项目
JHipster5 project with JPA static metamodel on 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
的提交更改
为了在这里注册解决方案希望帮助其他人,这里是解决这个问题的方法:
原来是 Java 9 与 hibernate-jpamodelgen@5.2.16.Final
的兼容性问题。一旦我升级到 Hibernate 版本 5.3.1.Final
它又开始编译了。
我还必须解决 之后的 JAXB 依赖关系。
我遇到了同样的问题。使用 Java 10、SpringBoot 2.0.3、Hibernate 5.3.1 .
在 Gradle 中对我有用的是将 javax.xml.bind 也添加到 annotationProcessor :
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)
我一直在尝试升级我的 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
的提交更改为了在这里注册解决方案希望帮助其他人,这里是解决这个问题的方法:
原来是 Java 9 与 hibernate-jpamodelgen@5.2.16.Final
的兼容性问题。一旦我升级到 Hibernate 版本 5.3.1.Final
它又开始编译了。
我还必须解决
我遇到了同样的问题。使用 Java 10、SpringBoot 2.0.3、Hibernate 5.3.1 .
在 Gradle 中对我有用的是将 javax.xml.bind 也添加到 annotationProcessor :
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)