tomcat7 与 tomcat8 加载 jar包的顺序

tomcat7,tomcat8,加载,jar,顺序 · 浏览次数 : 82

小编点评

**本文出自:** 您在进行服务环境升级过程中,将服务 tomcat7 升级到 tomcat8,却出现 jar 包冲突异常,但尝试几次后偶尔也有成功的概率,推测是 jar 包加载顺序不对,因为当相同路径的类或资源在加载之后,便不会进行再加载,由于项目中有两个相同的全限定名的类,在服务启动的时候,加载错误的类的时候,便报jar包冲突。 **解决方案:** 1. **设置 classpath**:您可以尝试设置 classpath 来解决 jar 包冲突问题,方法包括: * 将目标 jar 包添加到 classpath 中。 * 在 `web.xml` 中配置 classpath。 * 使用命令行工具设置 classpath。 2. **重新启动服务**: 重启服务以加载已设置的 classpath。 3. **检查日志**: 检查服务启动日志中是否有关于 jar 包冲突的错误信息。 4. **查看 tomcat 的源码**: 您可以使用任何代码编辑器或 IDE 查看 tomcat 的源码,以了解其类加载逻辑。 5. **分析代码**: 仔细分析服务启动代码,以确定加载 jar 包顺序的错误所在。 6. **排除其他因素**: 除了 classpath 外,还有其他可能导致 jar 包冲突的因素,例如依赖关系配置错误或类路径格式错误。

正文

本文为博主原创,转载请注明出处:

  最近在进行服务的环境升级,将 服务的tomcat7升级到 tomcat8;当把 tomcat 升级到 tomcat8 的时候,进行服务启动异常,报 jar 包冲突的 异常,但是尝试几次之后,偶尔也有成功的概率,便推测 是 jar 包加载的顺序不对,因为 当相同路径的类或资源在加载之后,便不会进行再加载,由于项目中有两个相同的全限定名的类,在服务启动的时候,加载错误的类的时候,便报jar包冲突。

  于是便设置 classpath,但发现设置 classpath 也没有生效,通过查看资料以及阅读 tomcat 的源码,发现 tomcat7 与 tomcat8 的类加载逻辑是不一样的,tomcat 7  在加载jar包 路径下的资源后,会对 所有的 jar包根据 字母顺序进行排序,字母在前面的 jar 包会优先加载,

tomcat7加载 jar包顺序

  主要代码如下:

  list是获得了应用中WEB-INF下lib下所有jar包的路径。我们跟踪进去发现`FileDirContext` 的list方法中有下面这一句:

 

tomcat8加载

  主要的代码:

  

  进一步继续,直接file.list获取过滤jar,并没有排序

  

tomcat8 设置优先加载顺序

  

 

   code如下:

<Resources>
     <PreResources base="d://webapps/ROOT/WEB-INF/lib/sms.reyo.cn.jar"
                   className="org.apache.catalina.webresources.JarResourceSet"
                   webAppMount="/WEB-INF/classes"/>
 </Resources>

 

  

 

与tomcat7 与 tomcat8 加载 jar包的顺序相似的内容:

tomcat7 与 tomcat8 加载 jar包的顺序

本文为博主原创,转载请注明出处: 最近在进行服务的环境升级,将 服务的tomcat7升级到 tomcat8;当把 tomcat 升级到 tomcat8 的时候,进行服务启动异常,报 jar 包冲突的 异常,但是尝试几次之后,偶尔也有成功的概率,便推测 是 jar 包加载的顺序不对,因为 当相同路径的

Nginx与Tomcat作为前端服务器的性能比较

Nginx与Tomcat作为前端服务器的性能比较 摘要 最近总遇到使用tomcat还是使用nginx进行前端文件访问的争论 想着出差周末在酒店, 可以自己进行一下简单的测试. 希望能够对未来的工作进行一些指导. 测试脚本 30KB 文件测试 ab -c 1000 -n 50000 -k http:/

Tomcat 与 JVM 中classpath的理解和设置总结

本文为博主原创,转载请注明出处: 1.介绍 classpath是java运行时环境搜索类和其他资源文件(比如jar\zip等资源)的路径。类路径告诉JDK工具和应用程序在哪里可以找到第三方和用户定义的类; 可以通过JDK工具(比如javac命令、java命令)后面的-classpath 参数设置cl

HTTPS下tomcat与nginx的前端性能比较

HTTPS下tomcat与nginx的前端性能比较 摘要 之前比较http的web服务器的性能. 发现nginx 比 tomcat 要好 50% 然后想到, https的情况下不知道两者有什么区别 所以准备再尝试一下. 换用https进行检查. Springboot的设置 server: ssl:

长连接与短连接以及线程数相关的比较

长连接与短连接以及线程数相关的比较 摘要 对比了nginx与tomcat作为静态业务服务的性能之后 突然又想比较一下 长连接与否的性能情况. 很多时候恰当的配置还是非常重要的. 测试方法 分别使用长连接和短连接进行测试工作. 主要命令为: 短连接 ab -c 1000 -n 50000 -r htt

Tomcat处理http请求之源码分析

本文将从请求获取与包装处理、请求传递给Container、Container处理请求流程,这3部分来讲述一次http穿梭之旅。

ngix安装与使用

```textile 主要是nginx的安装使用 1. 安装nginx(以及两个tomcat) 2. 使用nginx(测试负载均衡) 想要搭建的测试环境, 1.两个tomcat, 端口分别是80和8090(因为之前安装过一次端口为80的tomcat) 2.nginx端口为8088 ``` ![ima

Dubbo架构设计与源码解析(一) 架构设计

作者:黄金 一、架构演变 单应用架构 > 垂直架构 > 分布式架构 > 微服务架构 > 云原生架构   二、Dubbo总体架构   1、角色职能 • Container:服务容器 (tomcat、jetty、weblogic) • Provider:服务提供者 •Consumer:服务消

[转帖]记录一则enq: TX - row lock contention的分析过程

https://www.cnblogs.com/jyzhao/p/8628184.html 故障描述:与客户沟通,初步确认故障范围大概是在上午的8:30-10:30之间,反应故障现象是Tomcat的连接数满导致应用无法连接,数据库alert中无明显报错,需要协助排查原因。 1.导入包含故障时刻的数据

[转帖]记录一则enq: TX - row lock contention的分析过程

https://www.cnblogs.com/jyzhao/p/8628184.html 故障描述:与客户沟通,初步确认故障范围大概是在上午的8:30-10:30之间,反应故障现象是Tomcat的连接数满导致应用无法连接,数据库alert中无明显报错,需要协助排查原因。 1.导入包含故障时刻的数据