首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Tomcat 8中的类路径和jar文件加载顺序

Tomcat 8中的类路径和jar文件加载顺序
EN

Stack Overflow用户
提问于 2016-04-05 23:11:05
回答 1查看 5.3K关注 0票数 3

有没有人知道在哪个地方指定顺序,在tomcat8中装入jars中的哪些类?

这是我们的场景:我们有两个完全相同的服务器(硬件和操作系统)。两者都在运行java 1.7.65,并且都安装了版本8.0.32的tomcat。启动参数和VM参数以及特定于应用程序的设置完全相同(第二台机器只是一个冗余系统)。唯一的区别是ip地址,当然还有主机名。

在最近从Tomcat7升级到Tomcat8 (在两个系统上)之后,很长一段时间都忽略了来自slf4j的消息“找到多个绑定...”在应用程序启动时,我们遇到了另一种情况,它导致了一个错误,使我们的应用程序无法正确地记录日志--类加载的排序/排序。这是因为一个系统先加载logback-classic-1.0.13.jar,然后在第二个系统slf4j-log4j12-1.6.6.jar上先加载。我们只部署了一个logback.xml,没有部署log4j.xml,因此日志消息不会出现在正确的文件中,因为加载的StaticLoggerBinder不是正确的。

system-1的输出

代码语言:javascript
运行
复制
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/backoffice/apache-tomcat-8.0.32/webapps/backoffice/WEB-INF/lib/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/backoffice/apache-tomcat-8.0.32/webapps/backoffice/WEB-INF/lib/slf4j-log4j12-1.6.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
16:50:26,740 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
16:50:26,740 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
16:50:26,741 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/opt/backoffice/apache-tomcat-8.0.32/webapps/backoffice/WEB-INF/classes/logback.xml]

system-2的输出

代码语言:javascript
运行
复制
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/backoffice/apache-tomcat-8.0.32/webapps/backoffice/WEB-INF/lib/slf4j-log4j12-1.6.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/backoffice/apache-tomcat-8.0.32/webapps/backoffice/WEB-INF/lib/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).

(是的,我知道如何通过maven依赖来修复它,我肯定会从我的pom中删除重复/冗余的依赖...O:-) )

现在我的问题是,在两个完全相同的系统上,顺序怎么可能不同?

EN

回答 1

Stack Overflow用户

发布于 2016-04-05 23:47:07

Java按照类路径中指定的顺序加载类。

Tomcat不像其他Java程序那样解析类路径,例如使用CLASSPATH环境变量或-classpath命令行标志。另外,Tomcat解析类路径的方式可以而且确实会随着每个主要版本的发布而变化(这可能就是引入您的问题的原因)。

我在你的未来看到了很多关于这方面的阅读:)这里是一个很好的开始:Understanding the Tomcat classpath

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36430282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档