gpt4 book ai didi

java - hibernate 、Java 9 和 SystemException

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:24:07 24 4
gpt4 key购买 nike

我一直在尝试在 Java 9/Spring Boot 1.5.x/Maven 项目中运行 Hibernate 5.2.11 应用程序,但我缺少类:

Caused by: java.lang.NoClassDefFoundError: javax/transaction/SystemException
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:375)
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)
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2516)
at org.hibernate.internal.HEMLogging.messageLogger(HEMLogging.java:28)
at org.hibernate.internal.HEMLogging.messageLogger(HEMLogging.java:24)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<clinit>(EntityManagerFactoryBuilderImpl.java:115)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:54)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
... 33 more

有没有人遇到过这个异常并且知道解决方法?我尝试为 javax.bind 或 java.se.ee 添加 --add-modules 但它们没有帮助。

上述错误显示在使用 Hibernate 启动 Spring 上下文的 mavan-failsafe (2.20.1) 集成测试中。应用程序没有任何 Java 9 特定代码。

最佳答案

根据migration guide和 java 文档,因为模块 java.transaction 导出包 javax.transaction 已被标记为 @Deprecated

理想情况下,您应该迁移代码以使用 javaee/javax.transaction反而。目前,您可以使用从依赖项转换而来的自动模块来做到这一点:

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

并向 module-info.java 添加以下内容:-

requires javax.transaction.api;

此外,在使用 maven-failsafe-plugin 时,请确保您使用的是最低兼容版本 2.20.1 或更高版本,如 progress document of Maven. 中所述

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.20.1</version>
</plugin>

@Deprecated(forRemoval="after OP's confirmation")

另一方面,temporary workaround (因为最终这些模块将从 JDK 中删除)可以使用:-

--add-modules java.transaction

如评论中所述,由于 javax.transaction-api 所需的依赖项已在类路径中可用,因此您不需要添加任何编译器选项,否则您最终会使用 java.transaction 模块导出的 javax.transaction 包覆盖当前包,这对于您的用例来说非常理想,不包含 SystemException

关于java - hibernate 、Java 9 和 SystemException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46515230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com