当前位置: 首页 > 知识库问答 >
问题:

JDK 9 的Hibernate 5 问题

万楷
2023-03-14

我有一个Hibernate 5项目,它完美地构建和运行在Java 8上。我尝试在JDK 9 ea build 171上测试它。由于它是一个庞大的项目,并且有其他依赖项,我不得不添加<code>Java.xml。将模块绑定到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>

如果使用聚合模块java.se,我还可以解决其他问题。ee(推荐):

<argLine>--add-modules java.se.ee</argLine>

我得到一个例外:

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)

我甚至不明白为什么会发生这种情况,因为JTA库(带有系统异常类)在测试运行时位于类路径中。

关于如何解决这个问题有什么建议吗?

共有2个答案

云长恨
2023-03-14

尽管这个问题似乎很老,但尚未得到解答,因为JDK的GA发布已经完成。根据迁移指南和java文档,由于模块<code>是java。事务导出包<code>javax。事务已标记为@已弃用。

理想情况下,您应该将代码迁移为使用javaee/javax.transaction。目前,您可以使用从依赖项转换而来的自动模块来执行此操作:

<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>javax.transaction-api</artifactId>
    <version>1.2</version>
</dependency>

并添加到<code>模块信息中。java如下:-

requires javax.transaction.api;

编辑:感谢@ImpulseTheFox验证上述jar 1.3版的自动模块名称需要:-

requires java.transaction;
单于承
2023-03-14

JavaSE定义了JTA的一小部分。它不包括javax.transaction。SystemException,因为该异常在JTA的JavaEE版本中,而不是JavaSE子集中。

当您使用--add模块java.se.ee运行时,它会导致JavaSE和JavaEE之间共享的模块被解析,这包括java.transaction模块。任何加载javax.transaction包中类型的尝试都将从java.transaction模块加载,但由于该模块只有JTA的一小部分,因此找不到javax.transaction.SystemException。

如果您从命令行中删除--add-模块java.se.ee,那么您会发现javax.transaction.SystemException可以被加载,因为它在类路径上。因此,如果您只需要JAXB(模块java.xml.bind),请将该模块指定为--add-模块,而不是将导致解析与JavaEE共享的所有模块的“java.se.ee”聚合器。

 类似资料:
  • 我正在运行DMelt(http://jwork.org/dmelt),我注意到简单的Java代码在使用JDK9时会失败。下面是一个 Jython 示例,下面发布了该错误。我使用 Ubuntu 来运行 DMelt。 或者,用Java重写: 这是错误: 相同的代码在所有Java版本1.5-1.8上都能正常工作。请注意,此错误与Jython无关。这是一个新的JDK9问题,与JDK9无关:发生了非法的反射

  • 我试图使用Java9(JDK9)运行DMelt programs(http://jwork.org/DMelt/)程序,它给出了如下错误: 我该怎么修好它?我试图在脚本“dmelt.sh”的最后一行添加-illegal-access=permit(我在Linux中使用bash),但这并没有解决这个问题。我对此很沮丧。我经常使用这个程序,很长一段时间了。也许我永远不应该转到JDK9

  • 问题内容: 我正在尝试使用Java9(JDK9)运行DMelt程序(http://jwork.org/dmelt/)程序,它给了我以下错误: 我该如何解决?我试图将–illegal-access = permit添加到脚本“ dmelt.sh”的最后一行(我在Linux中使用bash),但这不能解决此问题。我对此感到非常沮丧。我经常使用此程序很长时间。也许我永远不应该转向JDK9 问题答案: 解决

  • 我正在使用Hibernate 5和Spring 4.2。3.我找不到将eventListener添加到SessionFactory范围的方法。我只需要在hibernate持久化对象之前设置一个日期。我在Spring定义了sessionFactory。xml 我有我的GenericDAOImpl在哪里得到这个会话工厂: 我已经看到了几种方法,但其中一些方法不适用于Hibernate 5(如)。我找不

  • 今天,我尝试了最新的jdk9版本113,并尝试使用最新的Maven 3.3.9编译我的项目 这些是命令(部分通过twitter找到) 但是我得到这个错误...总之: JDK9 的正确 maven 配置或参数是什么?

  • 我在编译HttpRequest Javadoc中的简单块GET示例时遇到了一个问题: 使用JDK 9编译时,我得到错误: 使用命令行和Intellij也会出现相同的错误。 我的模块没有问题,因为没有java.net.http的类编译和运行没有任何问题。 你知道怎么回事吗?

  • 我在从HttpRequest Javadoc编译简单的阻塞GET示例时遇到问题: 使用命令行和intellij也会出现相同的错误。 对于我的模块来说,这不是问题,因为没有java.net.http的类编译和运行没有任何问题。 知道这是怎么回事吗?

  • 本文向大家介绍Spring4整合Hibernate5详细步骤,包括了Spring4整合Hibernate5详细步骤的使用技巧和注意事项,需要的朋友参考一下 Spring与Hiberante整合 通过hibernate的学习,我们知道,hibernate主要在hibernate.cfg.xml配置文件中 接下来我们看一下hibernate的一个配置文件 hibernate配置文件 hibernate