写在前边

今天帮现场同事定位问题,情况是项目同事使用东方通(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. 【Centos6】时间同步问题

    解决方案参考: https://www.cnblogs.com/webnote/p/5751758.html centos6并不会主动同步时间 上一次关机,将时间停留了 使用硬件时间同步校准 [roo ...

  2. 【JDBC】自定义事务注解实现

    参考自: https://blog.csdn.net/qq_28986619/article/details/94451889 数据源选型,我采用的是C3P0,下面是需要的依赖: <?xml v ...

  3. 【Mycat】01 概述

    什么是Mycat? 数据库中间件 中间件:是一类连接软件组件和应用的计算机软件,以便于软件各部件之间的沟通. 例子:Tomcat,web中间件. 数据库中间件:连接java应用程序和数据库 为什么要用 ...

  4. 【Mybatis-Plus】02 Spring整合,基本CRUD

    创建非骨架普通Maven工程: 引入Spring & MybatisPlus的依赖坐标及其它持久层依赖: <properties> <spring.version>5. ...

  5. nvidia显卡的售后真的是不敢要人恭维——拆机箱时误拧显卡自身挡板螺丝被拒保

    事情比较简单,单位在nvidia的经销商那里购买的nvidia titan rtx显卡,保修期内坏掉,拆下来的过程中误拧了挡板的螺丝,结果被拒保,这里就是单纯的记录这件事情. 这件事确实我这方面有不对 ...

  6. Dolphinscheduler Docker部署全攻略

    作者| 陈逸飞 Docker部署的目的是在容器中快速启动部署Apache Dolphinscheduler服务. 先决条件 docker-compose docker 使用容器单机部署Dolphins ...

  7. ApacheCon Asia 2022 精彩回顾 | 如何让更多人从大数据中获益?

    点亮 ️ Star · 照亮开源之路 GitHub:https://github.com/apache/dolphinscheduler 在 ApacheCon Asia 2022 Meetup上,有 ...

  8. Opentelemetry collector用法

    Opentelemetry collector用法 目录 Opentelemetry collector用法 Service Extensions healthcheckextension Pipel ...

  9. AtCoder Beginner Contest 328

    AtCoder Beginner Contest 328 A - Not Too Hard (atcoder.jp) #include <bits/stdc++.h> #define de ...

  10. 一文讲透CRC校验码-附赠C语言实例

    一口君最近工作用到CRC校验,顺便整理本篇文章和大家一起研究. 一.CRC概念 1. 什么是CRC? CRC(Cyclic Redundancy Checksum)是一种纠错技术,代表循环冗余校验和. ...