详细学习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