将一个完整的.war包部署到Jboss容器中,启动后报如下错误:
15:04:48,632 ERROR [ContextLoader] Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.activemq.xbean.XBeanBrokerService#0' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.slf4j.MDC.getCopyOfContextMap()Ljava/util/Map;
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
分析情况:
在jboss根目录下执行如下命令
$find . -name slf4j*.jar                      
./bin/configuration/org.eclipse.osgi/bundles/24/1/.cp/slf4j-log4j12-1.4.3.jar
./bin/configuration/org.eclipse.osgi/bundles/24/1/.cp/slf4j-api-1.4.3.jar
./server/default/deploy/configuration/org.eclipse.osgi/bundles/14/1/.cp/slf4j-log4j12-1.4.3.jar
./server/default/deploy/configuration/org.eclipse.osgi/bundles/14/1/.cp/slf4j-api-1.4.3.jar
./server/default/deploy/etl_sngps.war/WEB-INF/lib/slf4j-api-1.6.1.jar
./server/default/deploy/etl_sngps.war/WEB-INF/lib/slf4j-log4j12-1.6.1.jar
./server/default/deploy/jboss-web.deployer/configuration/org.eclipse.osgi/bundles/14/1/.cp/slf4j-log4j12-1.4.3.jar
./server/default/deploy/jboss-web.deployer/configuration/org.eclipse.osgi/bundles/14/1/.cp/slf4j-api-1.4.3.jar

明明项目中lib地下的是1.6版本的,为什么还提示java.lang.NoSuchMethodError: org.slf4j.MDC.getCopyOfContextMap()Ljava/util/Map;(注:1.4一下版本会报这个错误,因为其不存在这里面的某个方法)
查看Jboss jar加载文档:
1)        org.jboss.Main.main(String[]) 为入口. 
2)        main 函数创建一个名叫”jboss”的线程组, 然后创建一个属于该组的线程, 在线程中执行boot方法. 
3)        boot 方法首先处理main函数中的参数(及一些其它的系统环境设置), 接着就用系统的属性创建了org.jboss.system.server.ServerLoader实例[new ServerLoader(props)]. 
4)        ServerLoader 注册Jboss相关的类路径, 包括XML解析器, jboss-jmx.jar, concurrent.jar及其它的一些额外的类路径. 
这里一般都是在JBOSS_HOME\lib下面的jar. 
5)        ServerLoader 通过load(ClassLoader)方法创建Jboss Server实例. 参数ClassLoader是ClassLoader parentCL = Thread.currentThread(). getContextClassLoader( )得到的当前线程的类加载器. 创建的Server实例是org.jboss.system.server.Server接口的实现. load(ClassLoader)方法的细节: 
?  用jar包及在ServerLoader中注册的类路径创建一个URLClassLoader的实例, 把传入的ClassLoader作为该URLClassLoader的parent. 
?  Server 接口的实现类由系统属性 jboss.server.type决定, 默认是 org.jboss.system.server.ServerImpl. 
?  URLClassLoader 通过无参构造函数加载Server接口实现的实例. 在加载前把当前线程的类加载器置为该URLClassLoader, 在加载完成后再置回之前传入的ClassLoader. 
6)        Server 实例用系统属性进行初始化[server.init(props)]. 
7)        服务起动[server.start()]. 起动过程的默认实现如下: 
?  把当前线程类型加载器置为加载该Server接口实现实例的ClassLoader. 
?  在jboss域内, 通过MBeanServerFactory的createMBeanServer(String)方法创建MbeanServer实例. 
?  在MBean Server上注册ServerImpl和ServerConfigImpl两个MBean. 
?  初始化统一的类加载仓库(unified class loader repository), 用来装载服务器配置目录及其它可选目录下的jar文件. 对于每一个jar文件和类目录都会创建一个相应的org.jboss.jmx.loading.UnifiedClassLoader实例, 并且注册到统一的仓库中. 其中一个UnifiedClassLoader实例会被设置为当前线程上下文的ClassLoader. [?: This effectively makes allUnifiedClassLoaders available through the thread context class loader.] 
?  接下来创建org.jboss.system.ServiceController的MBean实例. ServiceController管理JBoss MBean服务的生命周期. 
需要注意的是:JBOSS在加载自带的核心JAR之后,将会优先加载下面的两个目录 
1、D:\jboss\server\default\lib 
2、D:\jboss\server\default\tmp\deploy 
但是上面三组均不在以上1 2 所指的2个目录中。接着看......
找到如下文件,注意这个文件里面蕴藏着jar加载的有一个规则.
\jboss-4.2.3.GA\server\default\conf\xmdesc org.jboss.deployment.MainDeployer-xmbean.xml
最先加载的是后缀名为deployer目录下应用或者服务;
250:.rar,300:-ds.xml,400:.jar,500:.war,550:.jse,650:.ear,800:.bsh
<descriptors>
<value value="250:.rar,300:-ds.xml,400:.jar,500:.war,550:.jse,650:.ear,800:.bsh"/>
</descriptors>

可以通过调整这个value来改变加载规则。

这里已经很清楚了,上面所引爆的问题,正是由于/jboss-web.deployer下面所用的1,4版本导致的。删除后,一切正常。
这里面还有一个问题,有些时候我们在使用jboss容器前,应该认真的看下jboss目录的机构及大致各个目录的作用,然后做一些精简删除无用的或者无关精要的目录,不仅可以让jboss瘦身还能减少问题引发的根源。

Jboss jar包冲突及jar加载顺序相关推荐

  1. java spring包_java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式...

    java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式 发布时间:2018-08-20 12:02, 浏览次数:774 , 标签: java spri ...

  2. java webinf lib jar_java web项目中classes文件夹下的class和WEB-INF/lib中jar里的class文件加载顺序...

    如果是发布到weblogic的话,可以在WebContent\WEB-INF\weblogic.xml里面配置. 参考配置如下: xmlns:xsi="http://www.w3.org/2 ...

  3. 服务器jar包配置文件,spring boot加载第三方jar包的配置文件的方法

    前言 今天收到一封邮件,大概内容如下:spring boot鼓励去配置化,那么怎么将第三方jar包中的xml去配置化了? 下面,我们就以Quartz定时任务为例,单独对这个问题来进行说明,如何实现去配 ...

  4. 清除maven仓库的脚本(解决jar包冲突,jar包不全)

    一.有时会遇到maven依赖下不全,无法解析这个类,方法 所以我们需要写一个脚本,只清理maven仓库下载到一半中断的依赖,以及多余,不全的依赖 @echo off rem set REPOSITOR ...

  5. 系统重构:从Jar包冲突搞到类加载机制,就是这么霸气

    接手了一套比较有年代感的系统,计划把重构及遇到的问题写成系列文章,老树发新枝,重温一些实战技术,分享给大家.[重构01篇],给大家讲讲Jar包冲突及原理. 背景 目前市面上项目管理要么是基于Maven ...

  6. 霸气的来了:从Jar包冲突搞到类加载机制!

    接手了一套比较有年代感的系统,计划把重构及遇到的问题写成系列文章,老树发新枝,重温一些实战技术,分享给大家.[重构01篇],给大家讲讲Jar包冲突及原理. 背景 目前市面上项目管理要么是基于Maven ...

  7. 就是这么zhuai,从Jar包冲突搞到类加载机制

    接手了一套比较有年代感的系统,计划把重构及遇到的问题写成系列文章,老树发新枝,重温一些实战技术,分享给大家.[重构01篇],给大家讲讲Jar包冲突及原理. 背景 目前市面上项目管理要么是基于Maven ...

  8. Jar包冲突详解(Java)

    Jar包冲突是老生常谈的问题,几乎每一个Java程序猿都不可避免地遇到过,并且也都能想到通常的原因一般是同一个Jar包由于maven传递依赖等原因被引进了多个不同的版本而导致,可采用依赖排除.依赖管理 ...

  9. Maven Jar包冲突?看看高手是怎么解决的

    接手了一套比较有年代感的系统,计划把重构及遇到的问题写成系列文章,老树发新枝,重温一些实战技术,分享给大家.[重构02篇]:Maven项目Jar包管理机制.冲突解决. 知识背景 Jar包冲突在软件开发 ...

最新文章

  1. 【转】二层交换机之间的跨网段访问
  2. k8s service服务发现详解:ipvs代理模式、服务类型
  3. 转录组分析综述A survey of best practices for RNA-seq data analysis
  4. Generate GUID using vbscript
  5. C++ Templates之模板元编程
  6. 设计模式 (十七) 迭代器模式
  7. python导入os模块_python模块之OS模块
  8. c语言编译器uwp版,哔哩哔哩UWP最新版下载 - 哔哩哔哩UWP版免费版(32位64位win10)安装下载v1.3.10.0 - QT软件园...
  9. C#语言与Java语言程序的比较[转自chinaitlab]
  10. 基于python对B站缓存视频的批量复制,重命名
  11. 11万多职场文章技巧ACCESS数据库
  12. 安卓真机如何连接本地服务器_Android 真机连接本地PC服务器
  13. 磁盘显示数据错误循环冗余检查资料怎么寻回
  14. 【欧拉猜想】是否有无穷多个不可约分的正整数解
  15. Ubuntu22.04.1无法找到Ubuntu软件中心-Ubuntu Software
  16. 用tailwindcss适配暗黑模式竟如此简单
  17. U转串口时,鼠标乱动,解决办法
  18. echarts地图api series_百度地图2.0离线版与echarts结合
  19. STRM--解决因配置Streams而在alert中出现的 ORA-02068错误
  20. mongodb数据文件格式

热门文章

  1. Java8 本地DateTime API
  2. 对象池common-pool2源码分析之对象状态
  3. 如何用代码爬抓电商数据(附淘宝API调用实例)
  4. Mongo 与 SQL 操作对应介绍
  5. Socket网络编程--聊天程序(2)
  6. 《信息处理技术员考试考前冲刺预测卷及考点解析》下午案例复习重点
  7. 微软:Nobelium 组织正在发动新一轮软件供应链攻击
  8. 微软源代码遭 SolarWinds 黑客访问
  9. 开源审计的最佳时机是什么时候?
  10. C语言函数如何返回字符串