Gradle - プロジェクトの依存関係を表示する

Gradle –プロジェクトの依存関係を表示

gradle-project-dependencies

このチュートリアルでは、Gradleビルドツールを使用してプロジェクトの依存関係を表示する方法を示します。 単純なSpring MVCプロジェクトの依存関係を確認します。

build.gradle

dependencies {
    compile 'org.slf4j:jcl-over-slf4j:1.7.12'
    compile 'ch.qos.logback:logback-classic:1.1.3'
        compile('org.springframework:spring-webmvc:4.1.6.RELEASE'){
        exclude group: 'commons-logging', module: 'commons-logging'
    }
    compile 'org.hsqldb:hsqldb:2.3.2'
    providedCompile 'javax.servlet:servlet-api:2.5'
}

P.S Tested with Gradle 2.4

1. gradleの依存関係

プロジェクトの依存関係(すべての構成の直接および推移的)をツリー形式で表示します。 この依存関係レポートは非​​常に大きく、これを見る価値はあまりありません。

ターミナル

$ gradle dependencies

archives - Configuration for archive artifacts.
No dependencies

compile - Compile classpath for source set 'main'.
+--- org.slf4j:jcl-over-slf4j:1.7.12
|    \--- org.slf4j:slf4j-api:1.7.12
+--- ch.qos.logback:logback-classic:1.1.3
|    +--- ch.qos.logback:logback-core:1.1.3
|    \--- org.slf4j:slf4j-api:1.7.7 -> 1.7.12
+--- org.springframework:spring-webmvc:4.1.6.RELEASE
|    +--- org.springframework:spring-beans:4.1.6.RELEASE
|    |    \--- org.springframework:spring-core:4.1.6.RELEASE
|    +--- org.springframework:spring-context:4.1.6.RELEASE
|    |    +--- org.springframework:spring-aop:4.1.6.RELEASE
|    |    |    +--- aopalliance:aopalliance:1.0
|    |    |    +--- org.springframework:spring-beans:4.1.6.RELEASE (*)
|    |    |    \--- org.springframework:spring-core:4.1.6.RELEASE
|    |    +--- org.springframework:spring-beans:4.1.6.RELEASE (*)
|    |    +--- org.springframework:spring-core:4.1.6.RELEASE
|    |    \--- org.springframework:spring-expression:4.1.6.RELEASE
|    |         \--- org.springframework:spring-core:4.1.6.RELEASE
|    +--- org.springframework:spring-core:4.1.6.RELEASE
|    +--- org.springframework:spring-expression:4.1.6.RELEASE (*)
|    \--- org.springframework:spring-web:4.1.6.RELEASE
|         +--- org.springframework:spring-aop:4.1.6.RELEASE (*)
|         +--- org.springframework:spring-beans:4.1.6.RELEASE (*)
|         +--- org.springframework:spring-context:4.1.6.RELEASE (*)
|         \--- org.springframework:spring-core:4.1.6.RELEASE
+--- org.hsqldb:hsqldb:2.3.2
\--- javax.servlet:servlet-api:2.5

default - Configuration for default artifacts.
+--- org.slf4j:jcl-over-slf4j:1.7.12
|    \--- org.slf4j:slf4j-api:1.7.12
+--- ch.qos.logback:logback-classic:1.1.3
|    +--- ch.qos.logback:logback-core:1.1.3
|    \--- org.slf4j:slf4j-api:1.7.7 -> 1.7.12
...

providedCompile - Additional compile classpath for libraries that should not be part of the WAR arc
\--- javax.servlet:servlet-api:2.5

providedRuntime - Additional runtime classpath for libraries that should not be part of the WAR arc
\--- javax.servlet:servlet-api:2.5

runtime - Runtime classpath for source set 'main'.
+--- org.slf4j:jcl-over-slf4j:1.7.12
|    \--- org.slf4j:slf4j-api:1.7.12
+--- ch.qos.logback:logback-classic:1.1.3
|    +--- ch.qos.logback:logback-core:1.1.3
|    \--- org.slf4j:slf4j-api:1.7.7 -> 1.7.12
...

testCompile - Compile classpath for source set 'test'.
+--- org.slf4j:jcl-over-slf4j:1.7.12
|    \--- org.slf4j:slf4j-api:1.7.12
+--- ch.qos.logback:logback-classic:1.1.3
|    +--- ch.qos.logback:logback-core:1.1.3
|    \--- org.slf4j:slf4j-api:1.7.7 -> 1.7.12
...

... this report can be very large

2. gradle依存関係-構成

通常、特定の構成の依存関係レポートを表示するだけです。 以下の例では、「実行時」構成の依存関係レポートのみが表示されます。

ターミナル

$ gradle dependencies --configuration runtime

runtime - Runtime classpath for source set 'main'.
+--- org.slf4j:jcl-over-slf4j:1.7.12
|    \--- org.slf4j:slf4j-api:1.7.12
+--- ch.qos.logback:logback-classic:1.1.3
|    +--- ch.qos.logback:logback-core:1.1.3
|    \--- org.slf4j:slf4j-api:1.7.7 -> 1.7.12
+--- org.springframework:spring-webmvc:4.1.6.RELEASE
|    +--- org.springframework:spring-beans:4.1.6.RELEASE
|    |    \--- org.springframework:spring-core:4.1.6.RELEASE
|    +--- org.springframework:spring-context:4.1.6.RELEASE
|    |    +--- org.springframework:spring-aop:4.1.6.RELEASE
|    |    |    +--- aopalliance:aopalliance:1.0
|    |    |    +--- org.springframework:spring-beans:4.1.6.RELEASE (*)
|    |    |    \--- org.springframework:spring-core:4.1.6.RELEASE
|    |    +--- org.springframework:spring-beans:4.1.6.RELEASE (*)
|    |    +--- org.springframework:spring-core:4.1.6.RELEASE
|    |    \--- org.springframework:spring-expression:4.1.6.RELEASE
|    |         \--- org.springframework:spring-core:4.1.6.RELEASE
|    +--- org.springframework:spring-core:4.1.6.RELEASE
|    +--- org.springframework:spring-expression:4.1.6.RELEASE (*)
|    \--- org.springframework:spring-web:4.1.6.RELEASE
|         +--- org.springframework:spring-aop:4.1.6.RELEASE (*)
|         +--- org.springframework:spring-beans:4.1.6.RELEASE (*)
|         +--- org.springframework:spring-context:4.1.6.RELEASE (*)
|         \--- org.springframework:spring-core:4.1.6.RELEASE
+--- org.hsqldb:hsqldb:2.3.2
\--- javax.servlet:servlet-api:2.5

(*) - dependencies omitted (listed previously)

3. gradleの依存関係

この「洞察」により、特定の依存関係の関係を見つけることができます。

3.1 In below example, both jcl-over-slf4j and logback-classic depends on slf4j-api, but there is a version conflict, and Gradle pick up the latest version slf4j-api:1.7.12.

ターミナル

$ gradle dependencyInsight --dependency slf4j-api --configuration compile

org.slf4j:slf4j-api:1.7.12 (conflict resolution)
\--- org.slf4j:jcl-over-slf4j:1.7.12
     \--- compile

org.slf4j:slf4j-api:1.7.7 -> 1.7.12
\--- ch.qos.logback:logback-classic:1.1.3
     \--- compile

3.2 Yet another example, declares a Jackson 2.8.7, but Gradle picks the latest Jackson 2.9.0.pr1

build.gradle

dependencies {
    compile "com.fasterxml.jackson.core:jackson-databind:2.8.7"
    compile ('com.maxmind.geoip2:geoip2:2.8.0') //depends on 2.9.0.pr1
}

ターミナル

$ gradle :dependencyInsight --configuration compile --dependency jackson-databind
:core:dependencyInsight
com.fasterxml.jackson.core:jackson-databind:2.9.0.pr1 (conflict resolution)

com.fasterxml.jackson.core:jackson-databind:2.8.2 -> 2.9.0.pr1
\--- com.maxmind.geoip2:geoip2:2.8.0
     \--- compile

com.fasterxml.jackson.core:jackson-databind:2.8.7 -> 2.9.0.pr1
\--- compile

com.fasterxml.jackson.core:jackson-databind:[2.7.0,) -> 2.9.0.pr1
\--- com.maxmind.db:maxmind-db:1.2.1
     \--- com.maxmind.geoip2:geoip2:2.8.0
          \--- compile

4. gradleの依存関係マルチプロジェクト

マルチプロジェクトの例を確認します。

settings.gradle

include 'core', 'crawler', 'whois', 'web','analyzer','security'

サブプロジェクトの依存関係レポートを表示するには:

$ gradle {subproject}:dependencies

たとえば、サブプロジェクトcoreの依存関係レポートを表示します。

$ gradle core:dependencies
$ gradle core:dependencies --configuration compile
$ gradle core:dependencyInsight --dependency slf4j-api --configuration compile