Gradle的依赖管理模型
Gradle的依赖管理模型由四部分组成:
- 配置 configurations
- 依赖 dependencies
- 仓库 repositories
- 任务 task
其中:
- task与configuration进行绑定
- configuration中定义dependencies
- dependencies从repository中获取
我们用代码来说明:
configurations {
defaultConfig {
description = "Default Config"
}
}
如上面的代码所示,我们定义了一个configuration叫做defaultConfig
,然后我们可以在dependencies中指定config所包含的dependencies:
dependencies {
defaultConfig group: 'org.jboss.resteasy', name: 'resteasy-jaxrs', version: '3.1.0.Beta1'
}
上面的代码配置了一条defaultConfig中包含的dependency:
group: 'org.jboss.resteasy', name: 'resteasy-jaxrs', version: '3.1.0-SNAPSHOT'
接下来我们要配置repositories,这样Gradle才能去查找和下载依赖的包。Gradle支持很多种repositories,比如:Maven仓库,Ivy仓库,文件系统,等等。
在本文里,我们使用Maven仓库:
repositories {
mavenCentral()
}
在上面的配置中,我们配置使用gradle内置支持的mavenCentral()
仓库,对应https://repo1.maven.org/maven2/
。
这样,Gradle会使用这个仓库下载dependencies中依赖包。接下来我们在task中使用defaultConfig,就可以使用它里面指定的这个dependency了:
task listJars << {
configurations.defaultConfig.each { File file ->
println file.path
}
}
如上所示,我们定义了一个listJars
任务,在这个任务当中,我们使用defaultConfig
,查找它里面包含的依赖包。运行这个task,结果如下:
$ gradle listJars
:listJars
Download https://repo1.maven.org/maven2/org/jboss/resteasy/resteasy-jaxrs/3.1.0.Beta1/resteasy-jaxrs-3.1.0.Beta1.pom
Download https://repo1.maven.org/maven2/org/jboss/resteasy/resteasy-jaxrs-all/3.1.0.Beta1/resteasy-jaxrs-all-3.1.0.Beta1.pom
Download https://repo1.maven.org/maven2/org/jboss/resteasy/resteasy-jaxrs/3.1.0.Beta1/resteasy-jaxrs-3.1.0.Beta1.jar
/Users/weli/.gradle/caches/modules-2/files-2.1/org.jboss.resteasy/resteasy-jaxrs/3.1.0.Beta1/2c837d5360952d5438f518bdb70d0be2fdf2ef28/resteasy-jaxrs-3.1.0.Beta1.jar
/Users/weli/.gradle/caches/modules-2/files-2.1/org.jboss.spec.javax.ws.rs/jboss-jaxrs-api_2.0_spec/1.0.0.Final/dbf29e00dee135ef537b94167aa08b883f4d4cbf/jboss-jaxrs-api_2.0_spec-1.0.0.Final.jar
/Users/weli/.gradle/caches/modules-2/files-2.1/org.jboss.spec.javax.annotation/jboss-annotations-api_1.2_spec/1.0.0.Final/6d7ff02a645227876ed550900d32d618b8f0d556/jboss-annotations-api_1.2_spec-1.0.0.Final.jar
/Users/weli/.gradle/caches/modules-2/files-2.1/javax.activation/activation/1.1.1/485de3a253e23f645037828c07f1d7f1af40763a/activation-1.1.1.jar
/Users/weli/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpclient/4.5/a1e6cbb3cc2c5f210dd1310ff9fcb2c09c0d1438/httpclient-4.5.jar
/Users/weli/.gradle/caches/modules-2/files-2.1/commons-io/commons-io/2.4/b1b6ea3b7e4aa4f492509a4952029cd8e48019ad/commons-io-2.4.jar
/Users/weli/.gradle/caches/modules-2/files-2.1/net.jcip/jcip-annotations/1.0/afba4942caaeaf46aab0b976afd57cc7c181467e/jcip-annotations-1.0.jar
/Users/weli/.gradle/caches/modules-2/files-2.1/org.jboss.logging/jboss-logging/3.3.0.Final/3616bb87707910296e2c195dc016287080bba5af/jboss-logging-3.3.0.Final.jar
/Users/weli/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore/4.4.1/f5aa318bda4c6c8d688c9d00b90681dcd82ce636/httpcore-4.4.1.jar
/Users/weli/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.2/4bfc12adfe4842bf07b657f0369c4cb522955686/commons-logging-1.2.jar
/Users/weli/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.9/9ce04e34240f674bc72680f8b843b1457383161a/commons-codec-1.9.jar
BUILD SUCCESSFUL
Total time: 13.985 secs
如上所示,Gradle执行了listJars
任务,从mavenCentral
下载了相关的dependencies,然后最后一行打印出了依赖包被下载到本地的完整路径。之所以下载了很多包,是因为我们依赖的包本身也依赖其它包,Gradle处理了Maven仓库中的这种依赖的传递关系。我们可以使用下面的命令输出这种transitive dependencies:
$ gradle dependencies
:dependencies
------------------------------------------------------------
Root project
------------------------------------------------------------
defaultConfig - Default Config
\--- org.jboss.resteasy:resteasy-jaxrs:3.1.0.Beta1
+--- org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.0_spec:1.0.0.Final
+--- org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:1.0.0.Final
+--- javax.activation:activation:1.1.1
+--- org.apache.httpcomponents:httpclient:4.5
| +--- org.apache.httpcomponents:httpcore:4.4.1
| +--- commons-logging:commons-logging:1.2
| \--- commons-codec:commons-codec:1.9
+--- commons-io:commons-io:2.4
+--- net.jcip:jcip-annotations:1.0
\--- org.jboss.logging:jboss-logging:3.3.0.Final
BUILD SUCCESSFUL
Total time: 0.464 secs
如上所示,我们使用gradle dependencies
命令输出了各个config中的dependencies。因为我们的项目只有一个defaultConfig
,所以就输出了这个config当中的dependencies。