storm/java web项目引用的jar该放容器的lib下吗?

不要把第三方jar包放到容器的lib中,把容器不提供的第三方jar打包到项目中,容器提供的jar就不打包到jar包中。项目运行时,会先检测项目本身打入的jar包,然后再去容器的lib下面寻找jar包。

为什么不建议把第三方jar包放到容器中呢?

因为像common\lib下的包是相对很通用又稳定的包,如果你把你这几个工程共用的几个相同包放进来 ,一定时间看起来是文件少了不少 ,但将来需求的变化,可能有的工程 需要比较新版本LIB包,而一些工程 又没有需求或升级的要求 ,还只是要老版本的LIB包,同时新版本的lib包又依赖一些其他的包,并得删除掉一些如果放进去会产生错误的包。返正就是包的依赖比较麻烦。你可能只考虑到一个工程 ,而另一个工程 没考虑到时就麻烦了。。。
还有,不同的中间件,classloader的加载顺序 还不一样
tomcat,jetty,jboss,websphere,weblogic等 可能会有一些地方不同,所以能部署到TOMCAT上的工程,不一定把整个WAR包放到JBOSS下就能正常跑起来,(虽然jboss是基于tomcat)

像tomcat
Tomcat的class加载的优先顺序一览  
1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。  
2.环境变量CLASSPATH中的jar和class文件。  
3.$CATALINA_HOME/common/classes下的class文件。  
4.$CATALINA_HOME/commons/endorsed下的jar文件。  
5.$CATALINA_HOME/commons/i18n下的jar文件。  
6.$CATALINA_HOME/common/lib   下的jar文件。  
(JDBC驱动之类的jar文件可以放在这里,这样就可以避免在server.xml配置好数据源却出现找不到JDBC   Driver的情况。)  
7.$CATALINA_HOME/server/classes下的class文件。  
8.$CATALINA_HOME/server/lib/下的jar文件。  
9.$CATALINA_BASE/shared/classes   下的class文件。  
10.$CATALINA_BASE/shared/lib下的jar文件。  
11.各自具体的webapp   /WEB-INF/classes下的class文件。  
12.各自具体的webapp   /WEB-INF/lib下的jar文件。  
class的搜寻顺序如下:  
-------------  
Bootstrap   classes   of   your   JVM    
System   class   loader   classses   (described   above)    
/WEB-INF/classes   of   your   web   application    
/WEB-INF/lib/*.jar   of   your   web   application    
$CATALINA_HOME/common/classes    
$CATALINA_HOME/common/endorsed/*.jar    
$CATALINA_HOME/common/i18n/*.jar    
$CATALINA_HOME/common/lib/*.jar    
$CATALINA_BASE/shared/classes    
$CATALINA_BASE/shared/lib/*.jar    
在weblogic中的classloader有5个层次,从高到低排:
a. jdk
b. jdk ext
c. system classpath
d. ( APP-INF/classes  and  APP-INF/lib )
e. ( WEB-INF/classes and WEB-INF/lib )
  Tomcat与Weblogic有些地方是相反的:对于运行在 Java EE 容器中的 Web 应用来说,类加载器的实现方式与一般的 Java 应用有所不同。不同的 Web 容器的实现方式也会有所不同。以 Apache Tomcat 来说,每个 Web 应用都有一个对应的类加载器实例。该类加载器也使用代理模式,所不同的是它是首先尝试去加载某个类,如果找不到再代理给父类加载器。这与一般类加载器的顺序是相反的。这是 Java Servlet 规范中的推荐做法,其目的是使得 Web 应用自己的类的优先级高于 Web 容器提供的类。这种代理模式的一个例外是:Java 核心库的类是不在查找范围之内的。这也是为了保证 Java 核心库的类型安全。

参考文章:

tomcat 下 部署多工程 jar

Weblogic与Java类加载器原理试验解析

时间: 2024-10-27 14:02:34

storm/java web项目引用的jar该放容器的lib下吗?的相关文章

Eclipse java web项目引用其它java项目时的部署问题

需求:Java web项目需要调用其他Java项目 因为被引用的项目可能需要调试,并没有采用jar包方式引用,而是直接引用的项目: 如下介绍如何往Java项目中导入Java项目: 1.右击项目----->built path ----->projects-----> Add----->选中要引用的项目   并修改 native library location  2.右击项目---->Properties----->Deployment Assembly ------&

Java web项目引用java项目,类型找不到

错误信息: java.lang.ClassNotFoundException: org.codehaus.jackson.map.ObjectMapper at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoad

Java Web项目引用外部Java项目

第一步:通过Build Path 添加外部 Java 工程 1. 右键点 Web 工程,选择 properties 2. 选择 Java Build Path  >  Project  >Add ,选择需要的Java工程 第二步:设置 Deployment  Assembly  引用  1. 右键点 Web 工程,选择 properties 2. 选择 Deployment Assembly  >  Add  >  Project,选择要引用的 Java 工程 ----------

Eclipse部署Maven web项目到tomcat服务器时,没有将lib下的jar复制过去的解决办法

我们在做web开发是,经常都要在eclipse中搭建web服务器,并将开发中的web项目部署到web服务器进行调试,在此,我选择的是tomcat服务器.之前部署web项目到tomcat进行启动调试都很正常,今天突然出现无法启动情况,启动过程报如下错误: java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener at org.apache.catalina.loader.Webap

Java Web项目中连接Access数据库的配置方法

本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问题,所以今天改了一下又一次的公布了 老师决定期末考试採用access数据库实现增删改查.我觉得如今的我已经没有问题了.可是曾经都是在JSP页面中连接access数据库,不管是下面的那种方式都进行了连接的练习,可是如今我想让我的项目中的訪问access数据库的java代码,封装到DAO中,在DAO中连接数据库,

Java Web项目发布及使用自定义域名

详细讲解的网址: http://wenku.baidu.com/link?url=-ACZxKUcfrbhrMRUP3Ov-Q_c-Q9JPrA9D1fzHjHuJsWwZfRsVDVQ2qBtoY7Ly5Os_iNgQTIjepSxK5DGEl1OF2UM1hjXnxNMlL6l5tdNXpS Java Web项目发布及使用自定义域名的方法: 第一步:拷贝Java Web项目工程名至Tomcat7.x安装目录/webapps下:如下 C:\WebServer\apache-tomcat-7.0

Java Web项目缺少jsp、servlet jar包

1.错误描述  Caused by:java.lang.ClassNotFoundException:javax.servlet.jsp.PageContent 2.错误原因      缺少有关的jsp.servlet jar包 3.解决办法       导入J2EElibriary Java Web项目缺少jsp.servlet jar包

web项目引用Java项目,连接报错error HTTP Status 500 - Servlet execution threw an exception

错误信息 项目背景: 一个web项目引用一个java Project,项目中添加了引用,但是打开页面访问,总报500错误.提示:servlet初始化错误. 环境:Eclipse luna JDK: 1.7 Tomcat: 8.0 HTTP Status 500 - Servlet execution threw an exception type Exception report message Servlet execution threw an exception description T

MVC模式下基于SSH三大框架的java web项目excel表格的导出(不依赖另外的jar包)

最近工作中碰到了需要将web页面的表格内容导出到excel表格并下载到本地的需求.以下是在利用网上资源.与同事探讨下,完成的代码. 首先我们需要有定义好的实体类.以下是截取了项目中用到的部分代码. 1 public class QyggDocuments implements java.io.Serializable { 2 3 private static final long serialVersionUID = -2543382529255041149L; 4 5 private Stri