详细学习Gradle构建的依赖声明。该学习记录基于Gradle官方网站资料。本篇参考链接如下:
https://docs.gradle.org/current/userguide/declaring_dependencies.html
通常声明一个模块作为依赖,需要指定这个模块的版本。Gradle提供了一套机制,允许指定动态的版本。
指定固定版本
dependencies {
// 固定版本一旦指定就不会变化
implementation 'org.springframework:spring-web:5.0.2.RELEASE'
}
不指定版本的依赖
比较大的项目可能不会去单独指定依赖的版本,而是使用constraints来统一管理版本
dependencies {
// 这里没有指定依赖的版本
implementation 'org.springframework:spring-web'
}
dependencies {
constraints {
// 在constraints内部指定版本
implementation 'org.springframework:spring-web:5.0.2.RELEASE'
}
}
动态指定版本
dependencies {
// 这里指定版本必须为5以上
implementation 'org.springframework:spring-web:5.+'
}
通常,Gradle会在缓存中保存上一次取得的版本24小时。24小时之后如果发现有更新的版本,会去取得更新的版本。
指定未完成版本
dependencies {
implementation 'org.springframework:spring-web:5.0.3.BUILD-SNAPSHOT'
}
如上,一般带有-SNAPSHOT后缀的版本是还在开发中的版本。和动态指定一样, 24小时后会到仓库中寻找是否有更新版本。
通过参数指定版本
dependencies {
implementation('org.slf4j:slf4j-api') {
version {
strictly '[1.7, 1.8['
prefer '1.7.25'
}
}
constraints {
implementation('org.springframework:spring-core') {
version {
require '4.2.9.RELEASE'
reject '4.3.16.RELEASE'
}
}
}
}
有时可能会需要一些文件依赖, 这些文件保存在本地或者远程的共享文件夹中。这种共享文件夹式的仓库时没有.metadata的。
所以需要指定文件的名字
configurations {
antContrib
externalLibs
deploymentTools
}
dependencies {
antContrib files('ant/antcontrib.jar')
externalLibs files('libs/commons-lang.jar', 'libs/log4j.jar')
deploymentTools(fileTree('tools') { include '*.exe' })
}
多工程构建的时候, 经常会发生工程间的依赖。
project(':web-service') {
dependencies {
implementation project(':utils')
implementation project(':api')
}
}
指定特定的资源
以下三种情况,可能需要指定特定的资源,而不时把整个jar包或者特定资源的传递依赖都下载到本地。
1 这个依赖时一个非标准资源, 比如一个zip文件
2 模块的.metadata定义了多个资源,但是我们只想要其中之一
3 我们只想要模块中的一个资源, 儿不需要它的传递依赖
下面的示例展示了从一个模块中只取得js类库
repositories {
ivy {
url 'https://ajax.googleapis.com/ajax/libs'
patternLayout {
artifact '[organization]/[revision]/[module](.[classifier]).[ext]'
}
}
}
configurations {
js
}
dependencies {
js 'jquery:jquery:3.2.1:min@js'
}
Classifier表示资源的种类。比如java的情况下,可能java的class在一个jar包中,它的源代码在另一个包中,它的javadoc在第三个包中。
那么这三个包的名字中会用classifier来表明不同。比如
XXXX.jar
XXXX.sources.jar
XXXX.javadoc.jar
閱讀更多 一個經驗用十年的碼農 的文章