我一直在尝试升级我的JHipster 5应用程序以使用Java 10,但我无法使用Maven编译和处理JPA静态元模型。
显然maven-compiler-plugin
未触发hibernate-jpamodelgen
以生成JPA静态元模型。
为了升级项目,我有:
<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的提交更改
答案 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)在同一个组中