`

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定时任务所需jar包 slf4j-api-1.5.6.jar 和slf4j-log4j12-1.5.6.jar

    本篇将详细探讨Spring定时任务及其所需的jar包`slf4j-api-1.5.6.jar`和`slf4j-log4j12-1.5.6.jar`。 **Spring定时任务** Spring定时任务主要由`org.springframework.scheduling`包提供,基于Java的`@Scheduled`...

    springMvc+mybaties+slf4j

    【标题】"springMvc+mybaties+slf4j" 涉及的技术栈是企业级应用开发中常见的组合,主要包括Spring MVC、MyBatis和SLF4J。这三者分别是Spring框架的Web模块、轻量级持久层框架和日志门面。 【Spring MVC】是Spring...

    Spring所需jar包

    在进行ZK7、Spring4和Hibernate4的框架整合时,了解并正确使用Spring所需的jar包至关重要。 首先,Spring框架的基础包主要包括以下几个部分: 1. **spring-core.jar**:这是Spring的核心库,包含了IoC容器和基本的...

    spring/springmvc/mybatis所需jar包

    - `log4j.jar` 或 `slf4j-api.jar + slf4j-log4j12.jar`:日志处理库,用于记录程序运行中的信息。 - `jstl.jar` 和 `standard.jar`:用于处理JSP页面的标签库。 - `commons-dbcp.jar` 或 `HikariCP.jar`:连接池,...

    spring_mybatis 整合jar包

    5. 其他依赖库:如log4j或slf4j用于日志记录,asm、cglib等用于AOP代理。 整合过程大致如下: 1. 引入依赖:在项目的pom.xml或build.gradle文件中添加相关库的依赖。 2. 配置Spring:在Spring的配置文件(如...

    spring4.3.9版本jar包及开发常用jar包

    在实际项目中,根据需求选择合适的日志实现并配置相关jar包,如`log4j.jar`或`slf4j-api.jar`和对应的实现库。 除了上述核心jar包,Spring还有许多其他模块,如`spring-web.jar`和`spring-webmvc.jar`,它们用于...

    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) ...

    springmvc-jar包

    - `slf4j-api.jar` 和相应的实现库(如 logback-classic.jar、log4j.jar):用于日志记录,提供日志抽象层。 在实际应用中,你还需要根据具体需求选择和配置其他库,例如数据库驱动、模板引擎(如 Thymeleaf 或 ...

    SSM框架需要的jar包

    4. **其他依赖**:除了SSM的核心jar包外,还有一些常见的辅助库也是必需的,如`log4j.jar`用于日志记录,`slf4j-api.jar`和对应的实现库(如`slf4j-log4j12.jar`)用于日志门面,`commons-lang3.jar`和`commons-...

    spring用到的jar包,已分类

    - `slf4j-api.jar`和`slf4j-log4j12.jar`:Simple Logging Facade for Java,作为日志接口,桥接各种日志实现,这里桥接到Log4j。 6. **数据库连接jar包**: - 通常会包含对应数据库的JDBC驱动,例如`mysql-...

    spring整合mybatis所需的jar包

    - `slf4j-api.jar` 和 `slf4j-log4j12.jar`: Simple Logging Facade for Java,提供一个统一的日志接口,可适配各种日志实现,这里是适配log4j的版本。 - `commons-logging.jar`: Apache的通用日志接口,很多框架...

    Spring+Spring依赖jar包+Spring日志

    在使用Spring时,你需要添加对应日志框架的jar包,例如`log4j.jar`或`slf4j-api.jar`以及相应的实现库,以便进行日志记录。 在实际开发中,如果你不确定需要哪些特定的jar包,你可以选择全部导入这个压缩包中的所有...

    spring3必备jar包

    8. **additional libraries**: Spring3可能还需要一些额外的库,如`commons-logging.jar`用于日志记录,`log4j.jar`或`slf4j.jar`作为实际的日志实现,`commons-lang3.jar`提供通用的实用工具类。 以上就是Spring3...

    Spring所需jar包整合

    2. **日志包**:Spring框架通常与各种日志框架兼容,如`log4j.jar`、`slf4j-api.jar`和`slf4j-log4j12.jar`。这些日志库使得开发者可以方便地记录应用程序的运行信息,进行问题排查。SLF4J(Simple Logging Facade ...

    spring所需的所有jar包

    Spring框架的核心组件主要包括`spring-core`, `spring-beans`, `spring-context`, 和 `spring-aop`等JAR包。 - `spring-core`:提供核心工具类和支持,包括IoC容器的基础和对OGNL表达式的支持。 - `spring-beans`...

    xfireSpring集成需要的Jar包

    7. **Logging frameworks** - 如`log4j.jar`, `slf4j-api.jar`, `slf4j-log4j12.jar`等,提供日志记录功能,对于调试和问题排查至关重要。 在集成过程中,你需要将这些Jar包添加到项目的类路径中。同时,配置Spring...

    搭建springMVC结合Mybatis所需的所有jar包

    除了这些核心库,可能还需要其他依赖,如日志库(log4j、slf4j)、JSON解析库(Jackson、Gson)、Apache Commons库等,具体取决于项目需求。 在实际开发中,通常会使用构建工具(如Maven或Gradle)来管理这些依赖,...

    struts2、hibernate和spring框架整合所需的jar以及配置文档

    4. **其他依赖**:如`commons-logging.jar`、`log4j.jar`等日志处理库,以及`slf4j-api.jar`、`slf4j-log4j12.jar`等SLF4J接口和适配器。 整合SSH框架时,你还需要配置web.xml文件,将Struts2的Front Controller...

    spring quartz相关jar包(多版本)

    5. `slf4j-api.jar` 和 `slf4j-log4j12.jar`: 日志记录库,Quartz 使用 SLF4J 作为日志抽象层,具体日志实现通常选择 Log4j。 6. `commons-lang3.jar`: Apache Commons Lang 库,提供了一些实用的工具类,可能在 ...

Global site tag (gtag.js) - Google Analytics