前言

在我之前使用Gradle的博文中已经提到,Gradle对依赖的管理是比较智能的,如果有两个包依赖于相同的包,而版本不同的时候,Gradle会进行自动的选择,从而避免jar包的冲突。

也就是说,在理论上使用Gradle一般情况下,不会出现jar包冲突,那么为什么会有今天这篇博文呢?

Gradle可以帮你管理的是版本不同但是包相同的依赖。但是如果两个原本就不同的依赖之间互相发生冲突,这样的冲突Gradle就不能自动帮你完成了,因为它也不知道你需要哪一个。

问题描述

我这边以我出现的冲突为例:

项目启动的时候,在控制台出现下述错误

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/workSoftware/gradleRepository/caches/modules-2/files-2.1/org.slf4j/slf4j-log4j12/1.7.25/110cefe2df103412849d72ef7a67e4e91e4266b4/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/workSoftware/gradleRepository/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.1.11/ccedfbacef4a6515d2983e3f89ed753d5d4fb665/logback-classic-1.1.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError.
SLF4J: See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details.
Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.slf4j.impl.StaticLoggerBinder.<init>(StaticLoggerBinder.java:72)

其中重要的部分我已经标出,显而易见的是,log4j-over-slf4j.jar 这个包和slf4j-log4j12.jar 包出现了冲突。

这是两个完全不一样的包,但是也出现了冲突,Gradle没有办法进行处理,所以我们需要手动去处理它。

问题解决

首先查看所有的依赖,你可以使用gradlew -q app:dependencies命令进行查看,如果是使用idea的话,在gradle的窗口中就有这个选项,双击运行就可以

出现的依赖如下所示

\--- com.baidu.unbiz:fluent-validator-jsr303:1.0.9
     +--- com.baidu.unbiz:fluent-validator:1.0.9
     |    +--- org.slf4j:slf4j-api:1.7.7 -> 1.7.25
     |    \--- org.slf4j:slf4j-log4j12:1.7.7 -> 1.7.25
     |         +--- org.slf4j:slf4j-api:1.7.25
     |         \--- log4j:log4j:1.2.17
     +--- org.hibernate:hibernate-validator:5.2.1.Final -> 5.3.5.Final (*)
     +--- javax.el:javax.el-api:2.2.4
     +--- org.glassfish.web:javax.el:2.2.4
     |    \--- javax.el:javax.el-api:2.2.4
     +--- org.slf4j:slf4j-api:1.7.7 -> 1.7.25
     \--- org.slf4j:slf4j-log4j12:1.7.7 -> 1.7.25 (*)

我只是截取了部分,你需要查看所有的依赖已确定你的冲突是发生在什么位置,从而确定你需要怎么去处理

我所需要所的是排除log4j12这个依赖

所以修改gradle配置中的依赖如下所示

compile (group: 'com.baidu.unbiz', name: 'fluent-validator-jsr303', version: '1.0.9'){
exclude module: 'slf4j-log4j12'
}然后重新启动项目,冲突解决

 
 

总结

其实依赖冲突在很多时候gradle已经帮我们处理好了,如果真的发生上述不可预见的冲突,gradle也会给出很明确的提示。我们所要做的是冷静分析错误的信息,然后进行仔细推敲处理就可以了。

如何解决使用Gradle时出现的jar包冲突的更多相关文章

  1. was(websphere application server)中用apache的httpclient时jar包冲突问题的解决

    这个问题可以用was的共享库解决. 具体解决方案如下图所示: 对于有多个jar包冲突时,为每个冲突的jar包都新建一个共享库即可. 我之前的错误操作是以为一个共享库可以添加多个冲突的jar包用分号和逗 ...

  2. sbt公布assembly解决jar包冲突 deduplicate: different file contents found in the following

    一个.问题定义 近期使用sbt战斗assembly发生故障时,包,在package什么时候,发生jar包冲突/文件冲突,两个相同class来自不同jar包classpath内心冲突. 有关详细信息:我 ...

  3. Maven 解决JAR包冲突

    在JAR 冲突的情况下, 利用Eclipse方式解决JAR包冲突时比较方便简洁的,步骤如下 1. 在Eclipse 中打开pom.xml , 选择  “Dependency  Hierarchy” 2 ...

  4. jar包冲突常用的解决方法

    jar包冲突常见的异常为找不到类(java.lang.ClassNotFoundException).找不到具体方法(java.lang.NoSuchMethodError).字段错误( java.l ...

  5. Android 第三方库导致jar包冲突解决办法

    这几天的任务是将mapbox的工程合到程序中去,但是合并过程却出现了问题 合并方法: 在app的build.gradle中添加 dependencies { compile ('com.mapbox. ...

  6. mvn解决jar包冲突

    转自:http://blog.csdn.net/guanglihuan/article/details/50512855 对于Jar包冲突问题,我们开发人员经常都会有碰到,当我们使用一些jar包中的类 ...

  7. 通过一次SpringBoot打成war包部署到tomcat启动总结一般jar包冲突的解决方法

    启动时,报错信息如下: 28-Sep-2018 16:55:41.567 严重 [localhost-startStop-1] org.apache.catalina.core.StandardCon ...

  8. 曹工杂谈:一例简单的Jar包冲突解决示例

    Jar包冲突的相关文章: 了不得,我可能发现了Jar 包冲突的秘密   一.前言 jar包冲突分多种,简单理解来说,就是同package且同名的类在多个jar包内出现,如果两个jar包在同一个clas ...

  9. maven 解决jar包冲突及简单使用

    maven 解决jar包冲突 1.jar包冲突原因 maven中使用坐标导入jar包时会把与之相关的依赖jar包导入(导入spring-context的jar时就会把spring的整个主体导入) ,而 ...

随机推荐

  1. Xpath语法学习

    贴几个我学习Xpath的参考 1 基本使用的参考 XPath学习:基本语法(一) 2 较为详细且清晰例子参考,推荐 XPath 详解,总结 3 详细语法参考 Xpath语法格式整理 4 官方参考 XP ...

  2. 学Java分布式和高架构,必懂的两大知识点!

    今天小编为你们分享阿里巴巴2018年招聘应届毕业生,Java工程师的面试考题,主要分为三种 Java中获取 mysql连接的方式: 第一部分:分布式   三步变成:分布式 1.将你的整个软件视为一个系 ...

  3. Linux make nginx 的时候报错

    报错如下: `conf/koi-win' and `/usr/local/nginx/conf/koi-win' are the same file   原因: 可能在编译 nginx 的时候步骤不对 ...

  4. Struts2.3.34+Hibernate 4.x+Spring4.x 整合二部曲之上部曲

    1 导入jar包 可以复制jar包或maven导入,本文最后会给出github地址 2 导入log4j.properties文件 og4j.appender.stdout=org.apache.log ...

  5. Codeforce B. Polycarp and Letters

    B. Polycarp and Letters time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  6. 《收藏》对servlet原理讲解特别详细

    转载:http://blog.csdn.net/javaloveiphone/article/details/8154791 内容: 一.先从servlet容器说起:大家最为熟悉的servlet容器就 ...

  7. 单元测试系列:如何使用JUnit+JaCoCo+EclEmma完成单元测试

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢!   原文链接:http://www.cnblogs.com/zishi/p/6726664.html -----如 ...

  8. NemaStudio船舶模拟软件下载及破解

    不啰嗦,上链接: https://files.cnblogs.com/files/lizhijian/NameStudio%E7%A0%B4%E8%A7%A3.zip 感谢阅读,希望可以帮到你.

  9. UVW源码漫谈(三)

    咱们继续看uvw的源码,这次看的东西比较多,去除底层的一些东西,很多代码都是连贯的,耦合度也比较高了.主要包括下面几个文件的代码: underlying_type.hpp resource.hpp l ...

  10. Spring源码情操陶冶-自定义节点的解析

    本文承接前文Spring源码情操陶冶-DefaultBeanDefinitionDocumentReader#parseBeanDefinitions,特开辟出一块新地来啃啃这块有意思的骨头 自定义节 ...