Ser*_*gey 5 java hibernate java-9
我有一个完美构建并运行在Java 8上的Hibernate 5项目.我尝试在JDK 9 ea build 171上测试它.由于它是一个庞大的项目并且有其他依赖项,我不得不将java.xml.bind模块添加到JVM配置中进行测试:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
<argLine>--add-modules java.xml.bind</argLine>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
还有其他问题我可以解决,但如果使用聚合模块java.se.ee(如推荐):
<argLine>--add-modules java.se.ee</argLine>
Run Code Online (Sandbox Code Playgroud)
我有一个例外:
java.lang.NoClassDefFoundError: javax/transaction/SystemException
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:374)
at org.jboss.logging.Logger$1.run(Logger.java:2554)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2529)
Run Code Online (Sandbox Code Playgroud)
我甚至无法理解为什么会发生这种情况,因为JTA库(带有SystemException类)在测试运行时位于类路径中.
对于如何解决这个问题,有任何的建议吗?
Java SE 定义了 JTA 的一个小子集。它不包括 javax.transaction.SystemException,因为该异常位于 JTA 的 Java EE 版本中,而不是 Java SE 子集中。
当您运行--add-modules java.se.eethen 时,它会导致 Java SE 和 Java EE 之间共享的模块被解析,其中包括 java.transaction 模块。任何尝试加载 javax.transaction 包中的类型都将从 java.transaction 模块加载,但由于该模块只有 JTA 的一小部分,因此将找不到 javax.transaction.SystemException。
如果--add-modules java.se.ee从命令行退出,您会发现可以加载 javax.transaction.SystemException,因为它位于类路径上。因此,如果您只需要 JAXB(模块 java.xml.bind),则将该模块指定为--add-modules,而不是“java.se.ee”聚合器,这将导致与 Java EE 共享的所有模块得到解析。