Ian*_*son 6 java tomcat servlets classpath
我的servlet应用程序包含许多库.jars,其中一些包含嵌入的log4j.xml或log4j.properties文件.我想确保log4j首先找到我的log4j.xml!我已经尝试在servlet中搜索各种类路径元素的优先级的一些规范(例如,WEB-INF/classes总是在WEB-INF/lib之前吗?),或者某种方式来配置或调整servlet的类加载器,以便给定的资源目录出现在类路径的早期.到目前为止,我已经画了一个空白.有关确保servlet .war文件通过类加载器加载正确的log4j.xml的任何建议吗?
Yon*_*man 15
Ditto Tomcat 8.0.
请参阅文档:Class Loader HOW-TO.
答案很简单,取自Tomcat文档页面,Class Loader HOW-TO.特别注意/WEB-INF/
目录/文件夹的使用.
因此,从Web应用程序的角度来看,类或资源加载按以下顺序查找以下存储库:
- JVM的Bootstrap类
/WEB-INF/classes
您的Web应用程序/WEB-INF/lib/*.jar
您的Web应用程序- 系统类加载器类(如上所述)
- 常见的类加载器类(如上所述)
如果配置了Web应用程序类加载器,
<Loader delegate="true"/>
则订单变为:
- JVM的Bootstrap类
- 系统类加载器类(如上所述)
- 常见的类加载器类(如上所述)
/WEB-INF/classes
您的Web应用程序/WEB-INF/lib/*.jar
您的Web应用程序
摘自Tomcat 6页,Class Loader HOW-TO.
因此,从Web应用程序的角度来看,类或资源加载按以下顺序查找以下存储库:
- JVM的Bootstrap类
- 系统类加载器类(如上所述)
/WEB-INF/classes
您的Web应用程序/WEB-INF/lib/*.jar
您的Web应用程序$CATALINA_HOME/lib
$CATALINA_HOME/lib/*.jar
据我了解,从类路径中选择的资源是不确定的(从应用程序开发人员的角度来看)。即使始终加载相同的文件,行为也可能会发生变化: 1. 当您升级当前容器的版本时。2.如果你切换容器。
最简单的解决方案是从库 jars 中删除嵌入的 log4j 配置文件。嵌入 log4j 配置几乎从来都不是一个好主意,因为它会导致您在这里看到的问题......
他们是第三方罐子还是你开发的罐子?
归档时间: |
|
查看次数: |
13727 次 |
最近记录: |