Java 包冲突

来源:互联网 发布:深圳华夏软件学校招生 编辑:程序博客网 时间:2024/04/30 13:43

问题

今天在写程序时向Maven的pom.xml文件中加入了hadoop-common包后,启动服务器发现日志信息无法正常打印,查看日志如下所示:

SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/**/WEB-INF/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:/**/WEB-INF/lib/logback-classic-1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]

从日志中可以看到是由于包含多个SLF4J导致的。

分析 & 解决

进一步查看日志,发现原来是由于slf4j-log4j12-1.7.10.jarlogback-classic-1.1.3.jar中都包含有org/slf4j/impl/StaticLoggerBinder.class导致引入多个SLF4J

这可能是由于hadoop-common包中包含了slf4j-log4j12-1.7.10.jar导致的,因此我在pom.xml中的hadoop-common依赖下使用Maven的exclusions排除slf4j-log4j12依赖,问题得以解决,如下所示:

<dependency>    <groupId>org.apache.hadoop</groupId>    <artifactId>hadoop-common</artifactId>    <version>${hadoop.version}</version>    <exclusions>        <exclusion>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-log4j12</artifactId>        </exclusion>    </exclusions></dependency>

通过解压hadoop-common-2.7.3.jar(我使用的hadoop版本为2.7.3),可以看到在/META-INF/maven/org.apache.hadoop/hadoop-common/目录下的pom.xml文件中包含如下内容

<dependency>    <groupId>org.slf4j</groupId>    <artifactId>slf4j-log4j12</artifactId>    <scope>runtime</scope></dependency>

因此验证了上面的做法。

0 0
原创粉丝点击