写在前边

今天帮现场同事定位问题,情况是项目同事使用东方通(TongWeb7.0)部署公司项目时,出现以下报错导致服务启动失败。

简单排查了下发现:war包内WEB-INF/lib/javax.persistence-api-2.2.jar中包含javax.persistence.spi.PersistenceProvider这个接口,不应该报这个错误呀。

Caused by: java.lang.NoClassDefFoundError: javax/persistence/spi/PersistenceProvider
at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_371]
at java.lang.ClassLoader.defineClass(ClassLoader.java:756) ~[?:1.8.0_371]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[?:1.8.0_371]
at java.net.URLClassLoader.defineClass(URLClassLoader.java:473) ~[?:1.8.0_371]
at java.net.URLClassLoader.access$100(URLClassLoader.java:74) ~[?:1.8.0_371]
at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[?:1.8.0_371]
at java.net.URLClassLoader$1.run(URLClassLoader.java:363) ~[?:1.8.0_371]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_371]
at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[?:1.8.0_371]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_371]
at com.tongweb.server.TWServerURLClassLoader.loadClass0(TWServerURLClassLoader.java:46) ~[bootstrap.jar:?]
at com.tongweb.server.TWServerURLClassLoader.access$000(TWServerURLClassLoader.java:11) ~[bootstrap.jar:?]
at com.tongweb.server.TWServerURLClassLoader$1.loadClass(TWServerURLClassLoader.java:40) ~[bootstrap.jar:?]
at com.tongweb.common.LoadClassCache.cacheLoadClass(LoadClassCache.java:63) ~[bootstrap.jar:?]
at com.tongweb.server.TWServerURLClassLoader.loadClass(TWServerURLClassLoader.java:37) ~[bootstrap.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:405) ~[?:1.8.0_371]
at com.tongweb.server.TWServerURLClassLoader.loadClass0(TWServerURLClassLoader.java:46) ~[bootstrap.jar:?]
at com.tongweb.server.TWServerURLClassLoader.access$000(TWServerURLClassLoader.java:11) ~[bootstrap.jar:?]
at com.tongweb.server.TWServerURLClassLoader$1.loadClass(TWServerURLClassLoader.java:40) ~[bootstrap.jar:?]
at com.tongweb.common.LoadClassCache.cacheLoadClass(LoadClassCache.java:63) ~[bootstrap.jar:?]
at com.tongweb.server.TWServerURLClassLoader.loadClass(TWServerURLClassLoader.java:37) ~[bootstrap.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_371]
at com.tongweb.tongejb.core.ConnectorClassLoader.loadClass(ConnectorClassLoader.java:133) ~[tongweb.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_371]
at java.lang.Class.forName0(Native Method) ~[?:1.8.0_371]
at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_371]
at com.tongweb.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1286) ~[tongweb.jar:?]
...省略无用信息
Caused by: java.lang.ClassNotFoundException: javax.persistence.spi.PersistenceProvider
at java.net.URLClassLoader.findClass(URLClassLoader.java:387) ~[?:1.8.0_371]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_371]
at com.tongweb.server.TWServerURLClassLoader.loadClass0(TWServerURLClassLoader.java:46) ~[bootstrap.jar:?]
at com.tongweb.server.TWServerURLClassLoader.access$000(TWServerURLClassLoader.java:11) ~[bootstrap.jar:?]
at com.tongweb.server.TWServerURLClassLoader$1.loadClass(TWServerURLClassLoader.java:40) ~[bootstrap.jar:?]
at com.tongweb.common.LoadClassCache.cacheLoadClass(LoadClassCache.java:63) ~[bootstrap.jar:?]
at com.tongweb.server.TWServerURLClassLoader.loadClass(TWServerURLClassLoader.java:37) ~[bootstrap.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_371]
at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_371]
at java.lang.ClassLoader.defineClass(ClassLoader.java:756) ~[?:1.8.0_371]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[?:1.8.0_371]
at java.net.URLClassLoader.defineClass(URLClassLoader.java:473) ~[?:1.8.0_371]
at java.net.URLClassLoader.access$100(URLClassLoader.java:74) ~[?:1.8.0_371]
at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[?:1.8.0_371]
at java.net.URLClassLoader$1.run(URLClassLoader.java:363) ~[?:1.8.0_371]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_371]
at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[?:1.8.0_371]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_371]
at com.tongweb.server.TWServerURLClassLoader.loadClass0(TWServerURLClassLoader.java:46) ~[bootstrap.jar:?]
at com.tongweb.server.TWServerURLClassLoader.access$000(TWServerURLClassLoader.java:11) ~[bootstrap.jar:?]
at com.tongweb.server.TWServerURLClassLoader$1.loadClass(TWServerURLClassLoader.java:40) ~[bootstrap.jar:?]
at com.tongweb.common.LoadClassCache.cacheLoadClass(LoadClassCache.java:63) ~[bootstrap.jar:?]
at com.tongweb.server.TWServerURLClassLoader.loadClass(TWServerURLClassLoader.java:37) ~[bootstrap.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:405) ~[?:1.8.0_371]
...省略无用信息

解决方法

先说解决方法:

  • 如果你的应用中包含javax.persistence-api-2.2.jar,则删除 东方通/lib/persistence-api.jar 即可。
  • 如果你的应用中不包含那个包,则把javax.persistence-api-2.2.jar下载下来放到 东方通/lib 目录下即可。

问题成因

javax.persistence-api是JavaEE的持久化API接口定义包,从2007年发布到Maven中央仓库开始,Maven坐标变更过好多次,每次变更的兼容性也一言难尽。

  • javax.persistence:persistence-api 2007年最古老的版本,1.0~1.0.2 版本是最常用的版本。
  • javax.persistence:javax.persistence-api 2017迁移Maven坐标,只发布了2.2版本,是目前最流行的版本。
  • jakarta.persistence:jakarta.persistence-api 2018年迁移Maven坐标,发布了2.2.x、3.0.x、3.1.x、3.2.x版本,3.2.0是2024年5月21日发布的截止发文前的最新版本。

东方通7.0版本自带的是最早期的版本(没标识是1.0还是1.0.2),只有2.2以上版本才有javax.persistence.spi.PersistenceProvider这个类的。

最后

信创环境资料少,如果本文对你有所帮助,请不吝点赞评论,你的支持就是我写作的鼓励!

【信创问题】解决东方通(TongWeb)报错 java.lang.NoClassDefFoundError: javax/persistence/spi/PersistenceProvider的更多相关文章

  1. resin下发布项目报错java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index

    我的resin版本为4.0.56; 项目在tomcat下启动正常,打包在resin下发布时报错:java.lang.NoSuchMethodError: javax.persistence.Table ...

  2. 执行quartz报错java.lang.NoClassDefFoundError: javax/transaction/UserTransaction

    使用maven ,可以在 http://mvnrepository.com 中去查找 pom 配置如何写 <!-- https://mvnrepository.com/artifact/org. ...

  3. hibernate.validator.constraints.NotEmpty校验请求参数报错java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException

    spring maven项目,使用hibernate validator 注解形式校验客户端的请求参数. hibernate-validator版本:5.0.2.Final validation-ap ...

  4. springboot启动tomcat报错java.lang.NoClassDefFoundError: javax/el/ELManager仅记录

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'o ...

  5. IDEA启动Springboot时,解决报错java.lang.NoClassDefFoundError: javax/servlet/Filter

    如下所示,将spring-boot-starter-tomcat依赖中的<scope>provided</scope>注释掉 <dependency> <gr ...

  6. 解决spring boot启动报错java.lang.NoClassDefFoundError: ch/qos/logback/classic/Level

    解决spring boot启动报错java.lang.NoClassDefFoundError: ch/qos/logback/classic/Level 学习了:https://blog.csdn. ...

  7. 解决:启动项目报错 java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory

    前言:项目在 spring-mvc.xml 文件中配置了上传文件拦截,结果启动报错 java.lang.NoClassDefFoundError: org/apache/commons/fileupl ...

  8. Spring boot Unable to start embedded Tomcat报错 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()

    Spring boot Unable to start embedded Tomcat 报错 java.lang.NoSuchMethodError: javax.servlet.ServletCon ...

  9. Intellij IDEA 报错java.lang.NoClassDefFoundError

    Intellij IDEA 报错java.lang.NoClassDefFoundError 11-Aug-2018 23:48:24.686 严重 [http-nio-8080-exec-5] or ...

  10. 公司拷贝回家的工程用sts导入clean package报错java.lang.NoClassDefFoundError

    从公司拷贝工程回家加班,用相同版本的sts和jdk但是run as    maven build   clean package 总是报错java.lang.NoClassDefFoundError: ...

随机推荐

  1. 【ElasticSearch】数据迁移方案

    一.需求背景 ES环境要从单机迁移到集群上面 现在已有的数据也要搬过去,有几个索引三四千万数据大概 二.实现方案 有两种,使用ElasticDump和LogStash的ES插件 1.ElasticDu ...

  2. Ubuntu 18.04在已经安装Docker CE后如何安装NVIDIA-Docker,以使docker容器内可以使用宿主机显卡

    注意: 本文是在电脑上已经安装好docker环境的前提下进行的. docker环境如何安装参照前文. 本文内容节选自:  https://baimafujinji.blog.csdn.net/arti ...

  3. 被怼了:acks=all消息也会丢失?

    消息队列是面试中一定会被问到的技术模块,虽然它在面试题占比不及并发编程和数据库,但也属于面试中的关键性问题.所以今天我们就来看一道,MQ 中高频,但可能会打破你以往认知的一道面试题. 所谓的关键问题指 ...

  4. 运维 + AI,你得先搞懂这些

    很感谢夜莺提供如此优质的平台能和行业内顶尖技术大佬做面对面的交流,在这个会议中又学习到了很多有趣有深度的内容,给我在未来探索的道路上提供了一些新的指引方向.同时感谢夜莺社区的邀请,在此再做一次关于AI ...

  5. 结构开发笔记(三):solidworks软件(二):小试牛刀,绘制一个立方体

    前言   solidworks草图大师,基本的使用过程.  所有的零件基础都是从平面绘制开始,然后凸出来厚度.  本篇绘制一个简单的立方体,熟悉基本操作.   立方体绘制过程   选取一个平面绘制一个 ...

  6. 屏蔽RaiDrive的广告

    RaiDrive 广告域名:ads.raidrive.com 在 HOSTS 添加 127.0.0.1 ads.raidrive.com 或者在代理中设置为阻止即可. 效果: 补 最新版(2023.9 ...

  7. milvus 结果

    milvus (2.3.3) 两个查询方法 collection.query(...) 和 collection.search(...) 的返回类型是不同的,用错了会说 attribute error ...

  8. FFmpeg开发笔记(四十八)从0开始搭建直播系统的开源软件架构

    ​音视频技术的一个主要用途是直播,包括电视直播.电脑直播.手机直播等等,甚至在线课堂.在线问诊.安防监控等应用都属于直播系统的范畴.由于直播系统不仅涉及到音视频数据的编解码,还涉及到音视频数据的实时传 ...

  9. 【防忘笔记】Spring+Struts2古董框架学习

    Spring+Struts2项目框架梳理 若基于Spring+Struts2的方式进行开发,前后端的交互逻辑会与boot系以及MCV的组织结构有所不同 这里是对于学习过程的一些记录 前置通用知识 St ...

  10. 安装 MinGW-w64

    简介 MinGW-w64 是 MinGW 项目的 64 位版本.MinGW(Minimalist GNU for Windows)是 GCC 编译套件和 GNU Binutils 移植到 Window ...