`
nicegege
  • 浏览: 579891 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

tomcat加载jar包顺序

阅读更多

概述:项目使用springMVC,serviceImpl注入的一个bean无法找到,究其原因是无法找到日志类。其实在spring的配置文件中配置了bean。而且程序代码在其他人的机子上运行不报错。我这边抱错:类找不到apache.common.log.logFactory类。tomcat中部署的应用的lib文件中存在common-logging.jar包。我很纳闷,纠结为什么存在类,却找不到类呢?

问题的原因:原来我把用到的2个jar包扔到了jdk的lib文件夹。tomcat启动的时候,就会报错。jdk加载刚才扔进去的jar包的时候,无法找到common-logging.jar包。ps:jdk中没有扔common-logging.jar包。删除jdk的lib文件夹中的2个jar包,运行项目运行ok了。

 

总结:tomcat加载jar包的时候,是有顺序的。这是我在网上发现的,挺靠谱的,mark一下

当我们启动一个tomcat的服务的时候,jar包和claess文件是是以怎么样的顺序被加载进来的?

加载顺序:

1. $java_home/lib 目录下的java核心api 

2. $java_home/lib/ext 目录下的java扩展jar包

3. java -classpath/-Djava.class.path所指的目录下的类与jar包

4. $CATALINA_HOME/common目录下按照文件夹的顺序从上往下依次加载

5. $CATALINA_HOME/server目录下按照文件夹的顺序从上往下依次加载

6. $CATALINA_BASE/shared目录下按照文件夹的顺序从上往下依次加载

7. 我们的项目路径/WEB-INF/classes下的class文件

8. 我们的项目路径/WEB-INF/lib下的jar文件

在同一个文件夹下,jar包是按顺序从上到下依次加载

      由ClassLoader的双亲委托模式加载机制我们可以知道,假设两个包名和类名完全相同的class文件不再同一个jar包,如果一个class文件已经被加载java虚拟机里了,那么后面的相同的class文件就不会被加载了。

ps:做应用开发关心业务逻辑,很少关注java的底层原理,深刻感受到java开发没有那么容易,开发5年的java还是有很多不明白的,经常跳进各种java的坑。

分享到:
评论

相关推荐

    tomcat8改了jar加载顺序的踩坑记录

    主要给大家介绍了关于tomcat8改了jar加载顺序的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    SSH的jar包.rar

    SSH(struts+spring+hibernate)的jar包 SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层。 一个请求在Struts2框架中的处理大概分为以下几个步骤: 1、客户端初始化一个指向...

    struts2.1.6+spring2.0+hibernate3.2常用配置包

    当时也是一股脑的将hibernate和spring的包全导入进来,然后发布,启动tomcat,查看报错的问题,这个方面到没有出现版本差异的问题,典型的就是缺包,然后报找不到类,添加进来就行了啊!这个就不再详述,具体请看...

    ant1.9资源

    读者可以在上例的基础上更进一步,来生成jar包,可在run这个target下再加上如下target: <target name="jar" depends="run"> <jar destfile="helloworld.jar" basedir="build/classes"> ...

    Spring Security 中文教程.pdf

    23.3. 为tomcat配置SSL 24. 替换验证身份 24.1. 概述 24.2. 配置 A. 安全数据库表结构 A.1. User表 A.1.1. 组权限 A.2. 持久登陆(Remember-Me)表 A.3. ACL表 A.3.1. Hypersonic SQL A.3.1.1. ...

    SpringSecurity 3.0.1.RELEASE.CHM

    22.3. 为tomcat配置SSL 23. 替换验证身份 23.1. 概述 23.2. 配置 A. 安全数据库表结构 A.1. User表 A.1.1. 组权限 A.2. 持久登陆(Remember-Me)表 A.3. ACL表 A.3.1. Hypersonic SQL A.3.1.1. PostgreSQL...

    Spring Security-3.0.1中文官方文档(翻译版)

    23.3. 为tomcat 配置SSL 24. 替换验证身份 24.1. 概述 24.2. 配置 A. 安全数据库表结构 A.1. User 表 A.1.1. 组权限 A.2. 持久登陆(Remember-Me)表 A.3. ACL 表 A.3.1. Hypersonic SQL A....

    单点登录源码

    | ├── zheng-upms-client -- 集成upms依赖包,提供单点认证、授权、统一会话管理 | ├── zheng-upms-rpc-api -- rpc接口包 | ├── zheng-upms-rpc-service -- rpc服务提供者 | └── zheng-upms-server -- ...

    JAVA程序开发大全---上半部分

    10.5.1 向项目添加AOP支持包 173 10.5.2 创建Bean类 173 10.5.3 创建前置通知类 174 10.5.4 装配拦截qi和配置Bean类 175 10.5.5 编写测试代码 176 10.6 Spring整合Struts框架 177 10.6.1 使用ActionSupport类整合...

    jpivot学习总结.doc

    baseDisplayURL 否 String 是 显示图表的链接,链接的后面还要添加参数“ ?=filename=[ 临时图表文件的名称 ] ” controllerURL 否 String 是 链接到 JPivot Controller 的 URL ,该属性在一些复杂环境下...

    Activiti6.0教程例子下载

    3) libs:使用Activiti所需要的所有的jar包和源文件。 4) wars:官方给我们提供的示例Demo,通过使用Demo可以更加快速的了解Activiti。 2.1.2. 其他准备 使用Activiti,首先当然要有jdk了!6+版本就可以了。其次,...

    Java开发技术大全 电子版

    4.14.3JAR文件的创建和使用193 4.14.4JDK中的常用包195 4.15本章小结196 第3篇Java数据处理 第5章数组与字符串200 5.1数组200 5.1.1一维数组的声明200 5.1.2一维数组的创建201 5.1.3一维数组的使用202 ...

    java 面试题 总结

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    超级有影响力霸气的Java面试题大全文档

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

Global site tag (gtag.js) - Google Analytics