Apusic部署war出现java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/
标签:
it |
分类: 中间件和工具 |
今天把用Husdon构建的项目war包发给维护人员部署,发现在用Apusic-8部署项目war包的时候,发现一个slf4j的jar的在Apusic启动的时候老是报错,如下:
java.lang.NoSuchMethodError:
org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
2013-11-15 08:26:26 错误
[con.err]
可是项目实在本地tomcat下跑的是正常的啊,问题很是纠结,以为是slf4j需要别的依赖jar或者是项目中jar版本不同的两个jar包,结果是在网上搜索一下,答案是众说纷纭,可是我做过后发现还是不能解决问题;
我接着开始疑问啦,如果是slf4j的本身存在的问题,那么在我本地tomcat下应该启动会出现的,可是却没出现?这是为何?我想问题肯定出现在中间件,因为一些中间件本身会自带一些jar包,会不会是这个原因?
由于对Apusic中间件的怀疑,开始找到Apusic-8\lib目录下所有jar包,一看没有自己想要的slf4j的jar包:
http://s5/mw690/002GZ6Jngy6EeTQ368Af4&690org.slf4j.spi.LocationAwareLogger.log(Lorg/" TITLE="Apusic部署war出现java.lang.NoSuchMethodError:
这样看来,这里的jar表面上是没有任何问题,可是,当我逐个打开jar查看其内容时,却发现一个jar包很特别,就是bean-validator.jar
,下面是解压后的文件夹:
http://s9/mw690/002GZ6Jngy6EeUde1Pa48&690org.slf4j.spi.LocationAwareLogger.log(Lorg/" TITLE="Apusic部署war出现java.lang.NoSuchMethodError:
猛一看很是惊奇,它本省存在一个slf4j的类,只不过它把这些放在一个jar里,怪不得项目已启动就是找不到方法,原来它默认会优先加载这个slf4j文件夹下所有的类,可是为什么会这样呢?查查才知道,原来Apuisc底层的本省就是用hibernate来实现的,所以才会有这个slf4j、hibernate、glassfish这些文件夹!
其实到这里,我清楚的知道,肯定是这个slf4j文件夹里的类跟我们项目中slf4j.jar
冲突的问题,导致了Apuisc启动报错!于是我手动解压了本地的slf4.jar,将Apusic中lib下bean-validator.jar 里的slf4j文件夹替换成本地下slf4.jar包里slf4j文件夹!这样就能保证我们发布的war和Apuisc下的slf4j版本一致啦!
启动Apuisc后,发现正常启动,没有任何问题!

加载中…