gradle dependencies 依赖分析

本贴最后更新于 1749 天前,其中的信息可能已经时移世易

遇到的问题

最近在项目中遇到一个问题,因为存在 jar 包冲突的问题,想要解决一下。但是在解决的时候发现了另一个问题。下面详细道来。
当执行 gradle build 的时候报错,提示

   What went wrong:
    A problem occurred evaluating root project '110-springboot'.
    > Failed to apply plugin [class 'io.spring.gradle.dependencymanagement.DependencyManagementPlugin']
    > Could not create task of type 'DependencyManagementReportTask'.

通过网上查了发现是 gradle 3.0 的一个 bug,后面的版本中已经解决了。于是我下载了新版本的(gradle 3.4),发现还是存在问题,应该是本地缓存中还有问题,删了一会没有删干净。于是找了另一个解决办法,在 build.gradle 中加了这么一句话:

classpath "io.spring.gradle:dependency-management-plugin:0.6.1.RELEASE"

手动引入这个插件依赖。问题得以解决。

接下来 gradle dependencies 命令可以执行了。

gradle dependencies 分析

当你运行 dependencies 任务时,这个依赖树会打印出来,依赖树显示了你 build 脚本声明的顶级依赖和它们的传递依赖:

粘一段我运行时的依赖树:

 +--- com.alibaba:fastjson:1.1.43 -> 1.2.7
|    +--- io.netty:netty:3.9.2.Final
|    +--- com.dianping.cat:cat-client:1.5.4 (*)
|    +--- org.unidal.framework:foundation-service:2.7.0 (*)
|    +--- org.codehaus.plexus:plexus-container-default:1.6 (*)
|    +--- org.codehaus.plexus:plexus-classworlds:2.5.1
|    +--- org.apache.xbean:xbean-reflect:3.7
|    +--- org.codehaus.plexus:plexus-utils:3.0.20
|    +--- junit:junit:4.11 (*)
|    +--- org.hamcrest:hamcrest-core:1.3
|    +--- io.netty:netty-all:4.0.24.Final
|    +--- com.dianping.lion:lion-client:0.6.7 (*)
|    +--- org.apache.curator:curator-recipes:2.7.1 (*)
|    +--- org.freemarker:freemarker:2.3.22
|    +--- com.facebook.swift:swift-annotations:0.16.0-mt-20151221.124547-1
|    +--- com.facebook.swift:swift-codec:0.16.0-mt-20151218.091258-4 (*)
|    +--- com.thoughtworks.paranamer:paranamer:2.5.2
|    +--- com.google.code.findbugs:annotations:2.0.3
|    +--- com.facebook.swift:swift-generator:0.16.0-mt-20151222.050944-1 (*)
|    +--- com.facebook.swift:swift-idl-parser:0.16.0-mt-20151222.051729-1 (*)
|    +--- org.antlr:antlr-runtime:3.5 (*)
|    +--- org.antlr:stringtemplate:4.0.2 (*)
|    +--- org.apache.thrift:libthrift:0.8.0 (*)
|    +--- org.apache.httpcomponents:httpclient:4.1.2 -> 4.3.6 (*)
|    +--- org.apache.httpcomponents:httpcore:4.1.3 -> 4.3.3
|    \--- org.xerial.snappy:snappy-java:1.1.1.6
+--- com.dianping.lion:lion-client:0.5.4 -> 0.6.7 (*)
+--- com.dianping.cat:cat-client:1.4.4 -> 1.5.4 (*)
+--- com.dianping:avatar-tracker:2.2.5
+--- com.dianping.mp:mpi-provider-remote:1.0.0
+--- com.meituan.log:scribe-log4j2:1.2.6
|    +--- org.apache.logging.log4j:log4j-api:2.3 -> 2.5
|    +--- org.apache.logging.log4j:log4j-core:2.3 -> 2.5 (*)
|    +--- org.apache.thrift:libthrift:0.8.0 (*)
|    +--- org.apache.thrift:libfb303:0.8.0 (*)
|    +--- com.meituan.inf:xmd-common-log4j2:1.1.1-SNAPSHOT
|    |    +--- org.slf4j:slf4j-api:1.7.2 -> 1.7.13
|    |    +--- org.apache.logging.log4j:log4j-slf4j-impl:2.3 -> 2.5 (*)
|    |    +--- org.apache.logging.log4j:log4j-api:2.3 -> 2.5
|    |    +--- org.apache.logging.log4j:log4j-core:2.3 -> 2.5 (*)
|    |    +--- org.apache.logging.log4j:log4j-1.2-api:2.3 (*)
|    |    \--- com.meituan.mtrace:mtrace:1.1.1 (*)
|    +--- com.fasterxml.jackson.core:jackson-core:2.8.0
|    +--- com.fasterxml.jackson.core:jackson-databind:2.8.0 (*)
|    \--- com.fasterxml.jackson.core:jackson-annotations:2.8.0
+--- com.sankuai.meituan.zcm.pos.officialacounts:zcm-pos-officialacounts:1.0.3-SNAPSHOT
|    +--- com.meituan.service.mobile:mtthrift:1.6.4 (*)
|    \--- javax.validation:validation-api:1.0.0.GA
+--- com.sankuai.meituan.zcm.pos.marketing:zcm-pos-marketing-client:1.0.4-SNAPSHOT
|    +--- com.meituan.service.mobile:mtthrift:1.6.4 (*)
|    \--- javax.validation:validation-api:1.0.0.GA
+--- junit:junit:4.11 (*)
+--- org.springframework.javaconfig:spring-javaconfig:1.0.0.m3
|    +--- org.springframework:spring-core:2.5 -> 4.2.3.RELEASE (*)
|    +--- org.springframework:spring-beans:2.5 -> 4.2.3.RELEASE (*)
|    +--- org.springframework:spring-context:2.5 -> 4.2.3.RELEASE (*)

仔细观察你会发现有些传递依赖标注了*号,表示这个依赖被忽略了,这是因为其他顶级依赖中也依赖了这个传递的依赖,Gradle 会自动分析下载最合适的依赖。

Transitive

Transitive 用于自动处理子依赖项。默认为 true,gradle 自动添加子依赖项,形成一个多层树形结构;设置为 false,则需要手动添加每个依赖项。

案例

  dependencies {
  androidTestCompile('com.android.support.test:runner:0.2')
  androidTestCompile('com.android.support.test:rules:0.2')
  androidTestCompile('com.android.support.test.espresso:espresso-core:2.1')
  }

运行 gradle dependencies 的结果如下。可以看到每个包的依赖项都被递归分析并添加进来。

1.  `+--- com.android.support.test:runner:0.2`
2.  `|  +--- junit:junit-dep:4.10`
3.  `|  | \--- org.hamcrest:hamcrest-core:1.1`
4.  `|  +--- com.android.support.test:exposed-instrumentation-api-publish:0.2`
5.  `| \--- com.android.support:support-annotations:22.0.0`
6.  `+--- com.android.support.test:rules:0.2`
7.  `| \--- com.android.support.test:runner:0.2  (*)`
8.  `\--- com.android.support.test.espresso:espresso-core:2.1`
9.  `+--- com.android.support.test:rules:0.2  (*)`
10.  `+--- com.squareup:javawriter:2.1.1`
11.  `+--- org.hamcrest:hamcrest-integration:1.1`
12.  `| \--- org.hamcrest:hamcrest-core:1.1`
13.  `+--- com.android.support.test.espresso:espresso-idling-resource:2.1`
14.  `+--- org.hamcrest:hamcrest-library:1.1`
15.  `| \--- org.hamcrest:hamcrest-core:1.1`
16.  `+--- javax.inject:javax.inject:1`
17.  `+--- com.google.code.findbugs:jsr305:2.0.1`
18.  `+--- com.android.support.test:runner:0.2  (*)`
19.  `+--- javax.annotation:javax.annotation-api:1.2`
20.  `\--- org.hamcrest:hamcrest-core:1.1`

通过提示就很容易分析 jar 包冲突的问题了

  • Gradle
    40 引用 • 20 回帖 • 2 关注

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...