以下是常見問題和建議的解決方法。您可以在 Gradle 論壇StackOverflow #gradle 答案中取得其他提示並搜尋。

安裝疑難排解

如果您已遵循 安裝說明,但無法執行 Gradle 建置,以下是可能有助益的一些提示。

如果您在僅呼叫 Gradle Wrapper 外部安裝 Gradle,您可以在終端機中執行 gradle --version 來檢查 Gradle 安裝。

您應該會看到類似這樣的內容

❯ gradle --version

------------------------------------------------------------
Gradle 6.5
------------------------------------------------------------

Build time:   2020-06-02 20:46:21 UTC
Revision:     a27f41e4ae5e8a41ab9b19f8dd6d86d7b384dad4

Kotlin:       1.3.72
Groovy:       2.5.11
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          14 (AdoptOpenJDK 14+36)
OS:           Mac OS X 10.15.2 x86_64

如果不是,以下是您可能看到的其他內容。

找不到指令:gradle

如果您收到「找不到指令:gradle」,您必須確保 Gradle 已正確新增到您的 PATH

JAVA_HOME 設定為無效目錄

如果您收到類似這樣的錯誤

ERROR: JAVA_HOME is set to an invalid directory

將環境中的 JAVA_HOME 變數設定為與 Java 安裝位置相符

$ export JAVA_HOME=/Users/user/Library/Java/JavaVirtualMachines/corretto-11.0.22/Contents/Home
$ echo $JAVA_HOME
/Users/user/Library/Java/JavaVirtualMachines/corretto-11.0.22/Contents/Home

您必須確保已正確安裝 8 或更高版本的Java Development Kit,設定 JAVA_HOME 環境變數,並將Java 加入您的 PATH

權限遭拒

如果您收到「權限遭拒」訊息,表示 Gradle 可能存在於正確的位置,但無法執行。您可以在 *nix 系統上使用 chmod +x path/to/executable 來解決此問題。

其他安裝失敗

如果 gradle—- version 有效,但所有組建都因相同的錯誤而失敗,則可能是您的其中一個 Gradle 組建組態指令碼損毀。

您可以透過執行 gradle help 來驗證 Gradle 指令碼的問題,此指令會執行組態指令碼,但不會執行任何 Gradle 任務。如果錯誤持續發生,表示組建組態有問題。如果不是,則問題存在於執行一個或多個要求的任務時(Gradle 會先執行組態指令碼,再執行組建步驟)。

除錯相依性解析

除錯相依性解析中涵蓋了常見的相依性解析問題,例如解析版本衝突。

您可以按一下相依性檢視並使用搜尋功能,指定解析原因,來查看相依性樹狀結構,並查看已解析的相依性版本與要求的版本有何不同。

troubleshooting dependency management build scan
圖 1. 使用組建掃描除錯相依性衝突

已過濾條件的實際組建掃描可供探索。

除錯緩慢的組建

對於組建效能問題(包括「同步時間過長」),請參閱改善 Gradle 組建的效能

Android 開發人員應觀看 Android SDK 工具團隊關於 加速 Android Gradle 建置 的簡報。Android Studio 使用者指南中也涵蓋許多提示,關於最佳化建置速度

偵錯建置邏輯

將偵錯器附加到您的建置

您可以在 Gradle 建置本身中設定中斷點和偵錯 buildSrc 和獨立外掛程式,方法是將 org.gradle.debug 屬性設定為「true」,然後將遠端偵錯器附加到埠 5005。您可以透過將 org.gradle.debug.port 屬性設定為所需的埠號來變更埠號。

若要透過網路遠端附加偵錯器,您必須將 org.gradle.debug.host 屬性設定為電腦的 IP 位址或 *(在所有介面中監聽)。

❯ gradle help -Dorg.gradle.debug=true

使用 Kotlin DSL,您可以偵錯建置指令碼本身。

下列影片示範如何使用 IntelliJ IDEA 偵錯範例建置。

remote debug gradle
圖 2. 建置指令碼的互動式偵錯

新增和變更記錄

除了 控制記錄詳細程度 之外,您還可以使用 --console=verbose 旗標 在生命週期記錄中控制任務結果的顯示(例如「UP-TO-DATE」)。

您也可以透過註冊各種事件監聽器來取代 Gradle 的大部分記錄。記錄文件 中說明自訂事件記錄器的範例。您也可以 控制外部工具的記錄,讓它們更詳細地偵錯其執行。

可以在 $GRADLE_USER_HOME/daemon/8.7/ 下找到 Gradle Daemon 的其他記錄。

任務在應該為 UP-TO-DATE 時執行

--info 記錄會說明為何執行任務,不過建置掃描會透過前往時間軸檢視並按一下您要檢查的任務,以可搜尋且視覺化的方式執行此操作。

troubleshooting task execution build scan
圖 3. 使用建置掃描偵錯增量建置

您可以從 此清單 中瞭解任務結果的意義。

偵錯 IDE 整合

IDE 中許多不頻繁發生的錯誤都可以透過「重新整理」Gradle 來解決。另請參閱更多關於在 IntelliJ IDEAEclipse 中使用 Gradle 的文件。

重新整理 IntelliJ IDEA

這僅適用於 連結到 IntelliJ 的 Gradle 專案。

從主選單中,前往 檢視 > 工具視窗 > Gradle。然後按一下重新整理圖示。

troubleshooting refresh intellij
圖 4. 在 IntelliJ IDEA 中重新整理 Gradle 專案

重新整理 Eclipse(使用 Buildship)

如果您正在為 Eclipse IDE 使用 Buildship,您可以透過開啟「Gradle 任務」檢視並按一下「重新整理」圖示,或是在編輯 Gradle 腳本時從內容功能表執行 Gradle > 重新整理 Gradle 專案 指令,重新同步您的 Gradle 組建。

troubleshooting refresh eclipse
圖 5. 在 Eclipse Buildship 中重新整理 Gradle 專案

疑難排解守護程式連線問題

如果您的 Gradle 組建在執行任何任務之前失敗,您可能會遇到網路組態問題。當 Gradle 無法與 Gradle 守護程式程序通訊時,組建會立即失敗,並顯示類似以下訊息

$ gradle help

Starting a Gradle Daemon, 1 stopped Daemon could not be reused, use --status for details

FAILURE: Build failed with an exception.

* What went wrong:
A new daemon was started but could not be connected to: pid=DaemonInfo{pid=55913, address=[7fb34c82-1907-4c32-afda-888c9b6e2279 port:42751, addresses:[/127.0.0.1]], state=Busy, ...

當使用網路位址轉譯 (NAT) 偽裝時,可能會發生這種情況。當啟用 NAT 偽裝時,應視為電腦本機的連線會被偽裝成來自外部 IP 位址。作為安全防護措施,Gradle 會拒絕連線到任何外部 IP 位址。

解決此問題的方法是調整您的網路組態,讓本機連線不會被修改成顯示為來自外部位址。

您可以在守護程式記錄檔 ($GRADLE_USER_HOME/daemon/<Gradle 版本>/daemon-<PID>.out.log) 中監控偵測到的網路設定和連線要求。

2021-08-12T12:01:50.755+0200 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding IP addresses for network interface enp0s3
2021-08-12T12:01:50.759+0200 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Is this a loopback interface? false
2021-08-12T12:01:50.769+0200 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding remote address /fe80:0:0:0:85ba:3f3e:1b88:c0e1%enp0s3
2021-08-12T12:01:50.770+0200 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding remote address /10.0.2.15
2021-08-12T12:01:50.770+0200 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding IP addresses for network interface lo
2021-08-12T12:01:50.771+0200 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Is this a loopback interface? true
2021-08-12T12:01:50.771+0200 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding loopback address /0:0:0:0:0:0:0:1%lo
2021-08-12T12:01:50.771+0200 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding loopback address /127.0.0.1
2021-08-12T12:01:50.775+0200 [DEBUG] [org.gradle.internal.remote.internal.inet.TcpIncomingConnector] Listening on [7fb34c82-1907-4c32-afda-888c9b6e2279 port:42751, addresses:[localhost/127.0.0.1]].
...
2021-08-12T12:01:50.797+0200 [INFO] [org.gradle.launcher.daemon.server.DaemonRegistryUpdater] Advertising the daemon address to the clients: [7fb34c82-1907-4c32-afda-888c9b6e2279 port:42751, addresses:[localhost/127.0.0.1]]
...
2021-08-12T12:01:50.923+0200 [ERROR] [org.gradle.internal.remote.internal.inet.TcpIncomingConnector] Cannot accept connection from remote address /10.0.2.15.

取得其他協助

如果您在此處找不到解決方案,請在 協助論壇 上與 Gradle 社群聯繫,或使用 help.gradle.org 搜尋相關開發人員資源。

如果您認為您已在 Gradle 中找到錯誤,請在 GitHub 上 提交問題