Krz*_*soń 6 java spring hibernate maven java-9
我一直在尝试在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
Run Code Online (Sandbox Code Playgroud)
有没有人遇到过此异常并知道解决方法?我尝试添加--add-modules
javax.bind或java.se.ee,但他们没有帮助.
上面的错误显示在mavan-failsafe(2.20.1)集成测试中,它使用Hibernate启动Spring上下文.应用程序没有任何Java 9特定代码.
根据迁移指南和java文档,由于java.transaction
导出包的模块javax.transaction
已被标记为@Deprecated
.
理想情况下,您应该将代码迁移为使用javaee/javax.transaction。目前,您可以使用从依赖项转换的自动模块来执行此操作:
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>javax.transaction-api</artifactId>
<version>1.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
并添加module-info.java
以下内容:-
requires javax.transaction.api;
Run Code Online (Sandbox Code Playgroud)
另外,在使用时maven-failsafe-plugin
,请确保您使用的是Maven 进度文档2.20.1
中提到的最低兼容版本或更高版本。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.20.1</version>
</plugin>
Run Code Online (Sandbox Code Playgroud)
@Deprecated(forRemoval="OP 确认后")
另一方面,临时解决方法(因为最终这些模块将从 JDK 中删除)可以使用:-
--add-modules java.transaction
Run Code Online (Sandbox Code Playgroud)
正如评论中提到的,由于所需的依赖项javax.transaction-api
已经在类路径上可用,因此您不需要添加任何编译器选项,否则您最终会使用java.transaction
模块的导出包覆盖当前javax.transaction
包,这对于您的用例来说是理想的选择不包括SystemException
.
归档时间: |
|
查看次数: |
2342 次 |
最近记录: |