tomcat7 与 tomcat8 加载 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包的顺序的更多相关文章
- Jvm加载jar包的顺序
使用-XX:+TraceClassPaths或者在服务器上执行jinfo时,都能得到classpath包含的jar包,例如: java.class.path = local/aaa/lib/sprin ...
- JAVA动态加载JAR包的实现
如何动态的加载这些驱动!不可能把所有的数据库驱动都集成到JAR包中吧?!于是动态加载驱动的JAR包就产生了!其实这些在做系统基础代码时,经常用到,只是一般我们没有机会去搞而已. 动态加载JAR包,使用 ...
- tomcat/Java指定加载jar包的路径
背景:部署的web站点,应用默认加载工程的/webapps/工程名/WEB-INF/lib下的jar包 但是我需要提供一个和web工程没关系的的jar包管理目录 解决方法: 执行java方法时 ...
- 动态加载jar包(二)
上次说的加载jar包,有几个问题没有解决: 1.如果项目包含了其他的jar包如何解决? 2.如何规范上传的jar包的类和方法? 下面就解决一下上面两个问题 一.首先编写被调用的类,这次使用maven工 ...
- 动态加载jar包(一)
一.编写被调用的类 package com.qunar.helloworld; public class HelloWorld { public String sayHello(){ return ( ...
- spring加载jar包中多个配置文件(转)
转自:http://evan0625.iteye.com/blog/1598366 在使用spring加载jar包中的配置文件时,不支持通配符,需要一个一个引入,如下所示: Java代码 <co ...
- java动态加载jar包,并运行其中的类和方法
动态加载jar包,在实际开发中经常会需要用到,尤其涉及平台和业务的关系的时候,业务逻辑部分可以独立出去交给业务方管理,业务方只需要提供jar包,就能在平台上运行. 下面通过一个实例来直观演示: 第一: ...
- idea中pom如何加载jar包依赖
1.需求分析 在特定需求的情况下,idea需要加载jar包,那么如何在idea中正确的配置jar依赖呢?今天博主就这个问题给大伙讲解下,希望对大伙有所帮助 2.实现方案①在工程src目录下新建l ...
- maven加载jar包配置
maven build时报程序包不存在和找不到符号的错误,但是代码中不报错,如下: [ERROR] Failed to execute goal org.apache.maven.plugins:ma ...
- 动态加载jar包中的类(方式一)
嘛, 直接上代码 public static class TestClassLoader extends ClassLoader { @Override protected Class<?> ...
随机推荐
- npm 依赖下载报错:主机名/IP与证书的altname不匹配
npm 依赖下载报错:主机名/IP与证书的altname不匹配: //取消ssl验证 npm set strict-ssl false npm config set registry http://r ...
- day25-Listener监听器
Listener监听器 1.Listener监听器介绍 Listener监听器是JavaWeb三大组件之一.JavaWeb三大组件分别是:Servlet程序,Listener监听器,Filter过滤器 ...
- jmeter中下一接口依赖上一接口的参数,上一个接口存在分页时,如何在下一接口循环读取上一接口的数据?
问题背景: 工作中性能测试存在接口数据依赖,B接口依赖A接口的数据,希望提取到A接口的数据,传入到B接口,但是A接口存在分页的情况. 如何保证A接口返回的数据未知,且每次从A接口传给B接口的数据不重复 ...
- 跟我学Python图像处理丨图像分类原理与案例
摘要:本篇文章将分享图像分类原理,并介绍基于KNN.朴素贝叶斯算法的图像分类案例. 本文分享自华为云社区<[Python图像处理] 二十六.图像分类原理及基于KNN.朴素贝叶斯算法的图像分类案例 ...
- 【leetcode】剑指offer04二维数组查找
很巧妙地把矩阵转化为二叉搜索树(不过好像没什用) class Solution { public: bool findNumberIn2DArray(vector<vector<int&g ...
- Linux NTP工具的基本使用
NTP 时间同步 NTP(Network Time Protocol)协议,网络时间协议.利用ntp协议可以实现网络中的计算机时间同步. 实现NTP协议的工具: ntpdate:只能同步一次时间 nt ...
- 【QT开发问题】使用自定义的QGroupBox,重写绘图事件paintEvent后边框消失的问题
问题描述 Qt界面开发过程中,使用自定义的QGroupBox,重写绘图事件paintEvent时,出现边框被覆盖的情况,或边框消失的问题. 左图是原始状态,直接重写绘图事件后,会变成右图空白状态. ...
- 用Echarts实现SpreadJS引用从属关系可视化
在金融行业,我们经常会有审计审查的需求,对某个计算结果进行审查,但是这个计算结果可能依赖多个单元格,而且会有会有多级依赖的情况,如果让我们的从业人员靠眼睛找,工作量巨大,而且准确性存疑,基本上死路一条 ...
- go_json_learn
解析嵌套类型示例: func test3() { b := []byte(`{"Name":"tom","Age":20,"Ema ...
- day11-功能实现10
家居网购项目实现010 以下皆为部分代码,详见 https://github.com/liyuelian/furniture_mall.git 24.bugFix-添加购物车按钮动态处理 24.1需求 ...