JDK 11即将到来,您可能想开始使用它测试应用程序。
您的应用程序使用Hibernate技术?这不应该是个问题,但这里有一些重要信息。
Hibernate技术与JDK 11支持
我们很早就开始测试Hibernate技术与JDK 11,所以有一些好消息:Hibernate ORM (5.3.3+)、Hibernate Search (5.10.4+) 和 Hibernate Validator (6.0.12+) 可以与JDK 11一起使用。
注意,目前,尽管我们定义了自动模块名称,但作为Jigsaw模块运行尚未完全测试,并且预期不会正常工作。
不过ORM还有一些小问题
虽然Hibernate ORM 5.3支持(并且与JDK 11进行了测试),但在等待Hibernate ORM 5.4的过程中,您需要调整一些东西。
JAXB依赖
JAXB不再由JDK提供,因此您需要一个外部依赖项来使用它
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0.1</version>
</dependency>
这些依赖项将在Hibernate ORM 5.4中添加。
ByteBuddy实验性支持
当使用ORM与JDK 11一起使用时,您可能会遇到来自ByteBuddy的以下异常
Caused by: org.hibernate.bytecode.enhance.spi.EnhancementException: Failed to enhance class org.hibernate.jpa.test.enhancement.TestLazyPropertyOnPreUpdate
at org.hibernate.bytecode.enhance.internal.bytebuddy.EnhancerImpl.enhance(EnhancerImpl.java:117)
at org.hibernate.testing.bytecode.enhancement.BytecodeEnhancerRunner$2.loadClass(BytecodeEnhancerRunner.java:94)
... 40 more
Caused by: java.lang.UnsupportedOperationException
at net.bytebuddy.jar.asm.ClassVisitor.visitNestMemberExperimental(ClassVisitor.java:248)
at net.bytebuddy.jar.asm.ClassReader.accept(ClassReader.java:651)
at net.bytebuddy.jar.asm.ClassReader.accept(ClassReader.java:391)
at net.bytebuddy.pool.TypePool$Default.parse(TypePool.java:1051)
这是由于ASM(ByteBuddy用于操作字节码的组件)仅作为实验性功能支持一些JDK 11功能。ByteBuddy也是如此,您需要一个特定的标志来启用对这些功能的支持。
为了使一切正常,您需要在您的JVM中添加以下标志:-Dnet.bytebuddy.experimental=true
。
希望ASM 7很快就会发布。