03.19 Gradle學習記錄014 關於依賴的聲明

詳細學習Gradle構建的依賴聲明。該學習記錄基於Gradle官方網站資料。本篇參考鏈接如下:

https://docs.gradle.org/current/userguide/declaring_dependencies.html

通常聲明一個模塊作為依賴,需要指定這個模塊的版本。Gradle提供了一套機制,允許指定動態的版本。

Gradle學習記錄014 關於依賴的聲明

指定固定版本

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小時後會到倉庫中尋找是否有更新版本。

通過參數指定版本

Gradle學習記錄014 關於依賴的聲明

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的。

Gradle學習記錄014 關於依賴的聲明

所以需要指定文件的名字

configurations {
antContrib
externalLibs
deploymentTools
}
dependencies {
antContrib files('ant/antcontrib.jar')
externalLibs files('libs/commons-lang.jar', 'libs/log4j.jar')
deploymentTools(fileTree('tools') { include '*.exe' })
}

多工程構建的時候, 經常會發生工程間的依賴。

Gradle學習記錄014 關於依賴的聲明

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


分享到:


相關文章: