依賴分析 Gradle 插件(DAGP,née 依賴分析 Android Gradle 插件)來偵測以下內容:
未使用的依賴項。
使用傳遞依賴項(您可能想要直接聲明)。
在錯誤的配置上聲明的依賴項( api
、 implementation
、 compileOnly
等)。
作為副作用,該外掛程式還可以告訴您專案的 ABI,並產生表示依賴關係圖的各種視圖的 graphviz 檔案等。這些副作用目前大多是未記錄的內部行為,但某些高級用戶可能會感興趣。
除了與依賴相關的建議(見上文)之外,DAGP 還提供其他建議來幫助您維持「建構健康」。這包括檢測:
不必要的插件(目前只有kapt
)。
子專案(「模組」)不必要地使用 Android 插件,可以使用「普通」JVM 函式庫代替。
請參閱 wiki,以了解有關該插件相容的 Gradle、Android Gradle 插件等版本的資訊。
有關詳細說明,請參閱 wiki。
最簡單的方法是添加以下內容:
plugins {
id( " com.autonomousapps.build-health " ) version " <<latest_version>> "
}
重要的 | 如果您的專案使用 Kotlin 或 Android(或兩者),那麼這些插件也必須載入到設定腳本類別載入器(或父類別載入器)。請參閱 wiki 以了解更多信息 |
要快速啟動,只需執行以下命令:
./gradlew buildHealth
您可能會看到以下輸出:
> 任務:buildHealth 失敗 失敗:建置失敗並出現異常。 * 出了什麼問題: 任務「:buildHealth」執行失敗。 > 存在依賴性違規。請參閱 file:///path/to/project/build/reports/dependency-analysis/build-health-report.txt 中的報告
如果您希望將此(可能很長)報告列印到控制台,請將其新增至您的gradle.properties
檔案:
dependency.analysis.print.build.health=true
您不必透過設定腳本將此插件套用到所有項目。它也可以僅應用於特定的子項目。在這種情況下,它還必須應用於根建置腳本。
plugins {
id( " com.autonomousapps.dependency-analysis " ) version " <<latest_version>> "
}
plugins {
id( " com.autonomousapps.dependency-analysis " )
}
重要的 | 如果您的專案使用 Kotlin 或 Android(或兩者),那麼這些插件也必須載入到根建置腳本類別載入器(或父類別載入器)中。請參閱 wiki 以了解更多信息 |
可以使用projectHealth
任務針對各個模組執行分析。例如:
./gradlew 應用程式:projectHealth
外掛程式會報告項目相依性聲明的許多問題是很常見的。由於手動修復可能很乏味,因此該插件還提供了自動修復所有問題的任務。
./gradlew 修復依賴關係
在應用程式插件的每個項目上註冊fixDependencies
任務。如上所述運行它將運行每個子項目中的任務。另請參閱一鍵依賴項修復。
在某些情況下,一次解決所有問題可能被認為是不可行的。也許您有一個非常大的項目,或者您發布了庫,並且您知道更改依賴項聲明也會更改庫的元數據,這可能會破壞消費者。為了支援此用例, fixDependencies
任務採用一個可選標誌來告訴它本質上只進行「安全」更改。
./gradlew 修復依賴項 --upgrade
使用此標誌後, fixDependencies
任務將不會刪除或「降級」任何依賴項聲明。它只會添加或“升級”聲明(例如,從implementation
到api
)。
在增量部署場景中,可以想像使用--upgrade
標誌,然後更新所有使用者,最後刪除該標誌並刪除所有未使用的依賴項。
如果分析有任何錯誤,那麼修復依賴項聲明會破壞您的建置(但手動修復也是如此)。如果您遇到此問題,請提出問題。
此外,重寫功能基於簡化的 Gradle Groovy/Kotlin DSL 語法,在存在複雜的建置腳本時會失敗。我們計劃很快增強 Gradle Kotlin DSL 語法,因為它是預設的建置腳本語言,但我們目前沒有計劃對 Gradle Groovy DSL 做同樣的事情。
您可能會好奇為什麼外掛程式會發出(或不發出)有關某些依賴項的建議。你可以問它為什麼:
./gradlew lib:reason --id com.squareup.okio:okio:2.2.2 (1) > 任務:lib:原因 -------------------------------------------------- -- 您詢問了依賴項「com.squareup.okio:okio:2.2.2」。 沒有關於這種依賴性的建議。 -------------------------------------------------- -- 從 :lib 到 com.squareup.okio:okio:2.2.2 的最短路徑: :lib --- com.squareup.okio:okio:2.2.2 來源:主要 ------------ * 公開 okio.BufferedSource 類別(隱含 api)。
版本字串是可選的。
有關如何配置插件的詳細信息,請參閱 wiki。
若要設定插件,請使用dependencyAnalysis
擴充功能。
dependencyAnalysis {
// configuration goes here
}
以下是已發表的討論此外掛程式的文章/部落格文章清單:
對 Gradle 建置進行適當的維護和餵養
依賴分析 Gradle 外掛程式:使用字節碼分析尋找未使用的依賴項
依賴性分析 Gradle 插件:什麼是 ABI?
減少 Gradle 插件對配置時間的影響:一段旅程
一鍵修復依賴關係
....還有更多內容:)
該插件也出現在這些時事通訊中:
格萊德,2024 年 10 月
格萊德,2022 年 5 月
格萊德,2020 年 9 月
格萊德,2020 年 8 月
Android 周刊,第 423 期
格萊德,2020 年 7 月
格萊德,2020 年 6 月
有關此插件的播客片段可以在這裡找到:
開發商的麵包店,第 31 集
關於此插件的 YouTube 影片:
了解 Gradle #28 – 使用依賴分析插件清理編譯類別路徑