天天看点

gradle查看jar包依赖排除jar版本冲突问题

方式一:使用CMD执行gradle命令

先打开CMD窗口,切换到gradle.build所在目录,

  • gradle dependencies  查看当前项目中所有的架包,及依赖关系。
  • gradle dependencyInsight --dependency c3p0 查看所有名字包含“c3p0”(也可输"com.mchange:c3p0")的jar分别被哪些jar依赖了。

可选参数:--configuration compileClasspath  只看dependencies领域为compileClasspath的依赖信息

可选参数:-q  值输出级别为quite(首字母为q)及以上级别的日志

例如:gradle dependencyInsight --dependency c3p --configuration compileClasspath -q

Gradle的日志级别(由低到高):

debug:

info:

lifecycle:进度

warning:

quite:重要的

error:

示例一(升级组件)

  • 问题:
gradle查看jar包依赖排除jar版本冲突问题

项目启动正常,执行sql时报错:java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyResultSet.isClosed()Z is abstract。

  • 分析:

根据错误信息确定是c3p0版本问题。执行查询依赖命令发现是quartz2.1.7依赖的是c3p0的低版本0.9.1.1且自动引入,然后项目单独依赖了c3p0的高版本0.9.5.2;低版本中NewProxyResultSet类未实现父接口的isClosed()方法方法!执行sql时调用了低版本的jar中的方法,故报错Method is abstract.

gradle查看jar包依赖排除jar版本冲突问题
  • 解决:

查找资料发现quartz2.3.0依赖的是com.mchange:c3p0:0.9.5.2,故将quartz升级到2.3.0

示例二(升级组件)

  • 问题

mybatisPlus与Pagehelper都依赖jsqlparser.一起使用也容易出现版本问题!

gradle查看jar包依赖排除jar版本冲突问题
  • 分析:
gradle查看jar包依赖排除jar版本冲突问题

发现mp:3.2.0依赖的是jsqlparser:2.1且自动引入了,pagehelper:4.1.6依赖的是jsqlparser:0.9.5且没有自动引入;但是jsqlparser:2.0版本开始删除了0.9.5版本有的PlainSelect.getGroupByColumnReferences()方法,故pagehelper:4.1.6执行时就报错NoSuchMethodEroor!

  • 解决:

查资料发现目前将pagehelper最新版本是5.1.10,依赖的是jsqlparser:2.0,故升级至5.1.10

gradle查看jar包依赖排除jar版本冲突问题

示例三(指定组件的依赖项的版本号)

build.gradle文件种新增配置

//当遇到依赖冲突时,指定一个版本号
configurations.all() {
    Configuration configuration ->
        //当遇到版本冲突时,强制使用指定版本号。(会自动下载,无需在dependencies中配置)
        configuration.resolutionStrategy.force([
                "org.apache.xmlgraphics:batik-all:$batikAllVersion"
                ,"org.apache.pdfbox:pdfbox:$pdfboxVersion"
                ,"org.apache.xmlgraphics:xmlgraphics-commons:$xmlgraphicsCommonsVersion"
        ])
}           

方式二:使用eclipse的Buildship Gradle插件

gradle查看jar包依赖排除jar版本冲突问题
gradle查看jar包依赖排除jar版本冲突问题
gradle查看jar包依赖排除jar版本冲突问题

继续阅读