`

slf4j jar包冲突和spring的bean解析异常

 
阅读更多

由于种种原因,项目的结构被调整成了ant+maven共同管控的样子(真的好挫

于是,一个最基本的问题来了,之前写的UT没法跑了。

首先爆出来的是slf4j的问题

 

SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details. 
Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V 
at org.apache.commons.logging.impl.SLF4JLocationAwareLog.info(SLF4JLocationAwareLog.java:159) 
at org.springframework.context.support.AbstractApplicationContext.prepareRefresh(AbstractApplicationContext.java:456)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:394) 
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140) 
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:94) 
at main.Run.main(Run.java:33) 

到依赖的classpath里面一find,发现下面至少有1.4.3、1.5.10、1.5.6、1.6.1几个版本的slf4j的jar包共存。。。

处理方案:

全部干掉,仅保留一套最slf4j组件,即:留个接口包: slf4j-api,留个实现包:slf4j-log4j12。

 

一位搞定这个问题了,结果spring的bean解析又出问题了。。。

 

Caused by: java.lang.NoSuchFieldError: fRecognizedFeatures
	at org.apache.xerces.parsers.BasicParserConfiguration.<init>(Unknown Source)
	at org.apache.xerces.parsers.DTDConfiguration.<init>(Unknown Source)
	at org.apache.xerces.parsers.StandardParserConfiguration.<init>(Unknown Source)
	at org.apache.xerces.parsers.IntegratedParserConfiguration.<init>(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.<init>(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.<init>(Unknown Source)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at java.lang.Class.newInstance0(Class.java:355)
	at java.lang.Class.newInstance(Class.java:308)
	at org.apache.xerces.util.ObjectFactory.newInstance(Unknown Source)
	at org.apache.xerces.util.ObjectFactory.findJarServiceProvider(Unknown Source)
	at org.apache.xerces.util.ObjectFactory.createObject(Unknown Source)
	at org.apache.xerces.util.ObjectFactory.createObject(Unknown Source)
	at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source)
	at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source)
	at org.apache.xerces.jaxp.DocumentBuilderImpl.<init>(Unknown Source)
	at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.setAttribute(Unknown Source)
	at org.springframework.beans.factory.xml.DefaultDocumentLoader.createDocumentBuilderFactory(DefaultDocumentLoader.java:99)
	at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:70)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
	... 34 more

这次又是因为xml.xerces.jar和jdk自带的xml解析工具类冲突导致的,又是jar包冲突!!!

这个问题的解决方案有好几个,可以参考:这里

1、Use the “javax.xml.parsers.DocumentBuilderFactory” system property.

2、Use the properties file "lib/jaxp.properties" in the JRE directory.

3、Use the Services API (as detailed in the JAR specification), if available, to determine the classname. The Services API will look for a classname in the file “META-INF/services/javax.xml.parsers.DocumentBuilderFactory"  in jars available to the runtime.

4、Platform default "DocumentBuilderFactory" instance,也就是类com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl。

我采用了一种简单的方式,在jvm的启动参数中加上下面的参数明确制定要用哪个实现类。

 

-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
-Djavax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
 

 

分享到:
评论

相关推荐

    Mybatis与Spring整合所需的jar包

    mybatis与spring整合时所依赖的jar包,包括: 1.Mybatis所需的jar包括: ant-1.9.6.jar ant-launcher-1.9.6.jar asm-5.2.jar cglib-3.2.5.jar commons-logging-1.2.jar javassist-3.22.0-CR2.jar log4j-...

    spring+dubbo所需要的jar包

    (2)spring-beans-3.2.3.RELEASE.jar //bean包 (3)spring-context-3.2.3.RELEASE.jar // 容器包 (4)spring-core-3.2.3.RELEASE.jar //核心包 (5)spring-expression-3.2.3.RELEASE.jar //表达式包 (6) ...

    java开发常用jar包

    slf4j-api-1.5.8.jar和slf4j-log4j12-1.5.0.jar hibernate使用的一个日志系统 spring.jar spring核心包 spring-security-core-2.0.4.jar 和 spring-security-taglibs-2.0.4.jar 权限管理 commons-codec-1.3....

    web开发常用jar

    slf4j-api-1.5.8.jar和slf4j-log4j12-1.5.0.jar hibernate使用的一个日志系统 spring.jar spring核心包 spring-security-core-2.0.4.jar 和 spring-security-taglibs-2.0.4.jar 权限管理 commons-codec-...

    struts-2.5.2-all所有jar包

    jcl-over-slf4j-1.7.6.jar, json-lib-2.3-jdk15.jar, juli-6.0.18.jar, log4j-api-2.5.jar, ognl-3.1.10.jar, org.apache.felix.framework-4.0.3.jar, org.apache.felix.main-4.0.3.jar, org.apache.felix.shell-...

    struts-2.5.10-all所有jar包

    org.osgi.core-4.1.0.jar,oval-1.31.jar,plexus-container-default-1.0-alpha-10.jar,plexus-utils-1.2.jar,sitemesh-2.4.2.jar,slf4j-api-1.7.12.jar,snakeyaml-1.6.jar,spring-aop-4.1.6.RELEASE.jar,spring-beans...

    SpringMVC+Spring+SpringDataJPA+Hibernate整合登录的效果

    这是整合SpringMVC+Spring+SpringDataJPA+Hibernate简单的实现登录的功能,用的是mysql数据库,这是一个web Project 如果你用的是JavaEE6那么你要注意bean-validator.jar和weld-osgi-bundle.jar与slf4j的jar包冲突。...

    springboot知识点整理

    3.3 其他日志框架统一转换成slf4j+logback 44 3.4 Spring Boot日志使用 45 3.5 Spring Boot默认配置 47 3.6 指定日志文件和日志Profile功能 52 3.7 切换日志框架(不使用SLF4j+LogBack) 54 4 Spring Boot与Web开发 ...

    myspringlearning:Spring学习项目

    Spring学习项目IOC依赖的jar包 aspect2 dbcp hibernate jdom junit4 mysql pool2 spring slf4j注入类型setter(重要)Setter-based dependency injection构造方法注入 Constructor-based dependency injectionbeans....

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

Global site tag (gtag.js) - Google Analytics