如何修復 Linux 系統中的 gradlew 指令未找到錯誤
1. 概述
Gradle 是一款受歡迎的建置自動化工具,廣泛應用於 Java、Kotlin 和 Android 等眾多專案中。這些專案通常會使用名為gradlew腳本,該檔案也稱為 Gradle Wrapper。 Gradle Wrapper 檔案的作用是確保專案使用特定的 Gradle 版本,即使不同系統安裝了不同的 Gradle 版本。
在本教學中,我們將探討一個常見的 Gradle 錯誤: ./gradlew: command not found 。具體來說,我們將嘗試理解該錯誤的原因。此外,我們還將了解如何重現和修復此錯誤。
2. 理解問題
Gradle 可以透過兩種方式運作:
- 使用系統級安裝方式運行
- 使用專案特定的 Gradle Wrapper 腳本(Linux 系統上為
gradlew)執行
如果我們已經有一個 Gradle 項目,則無需安裝 Gradle,因為我們可以使用專案專屬的 Gradle Wrapper 。在這種情況下,Wrapper 會使用gradle/wrapper/gradle-wrapper.properties設定檔中指定的 Gradle 版本。
但是,在 Linux 系統中,執行./gradlew命令時可能會出現錯誤:
$ ./gradlew
上述問題可能由以下幾個原因引起:
- 克隆或本地程式碼庫中缺少文件
- 文件不可執行
- 從錯誤的路徑運行文件
- 其他的
值得注意的是,本文所有操作均透過套件管理器和手動安裝兩種方式安裝 Gradle 完成。無論採用哪一種方式,以下步驟均適用。
3. 重現錯誤步驟
讓我們先來了解一下在典型的 Linux 環境中, gradlew: command not found錯誤是如何出現的。
在此,我們想要確認兩個事實:
- 錯誤的根本原因
- 無需進行系統級的 Gradle 安裝。
那麼,讓我們來探討一下可能會出現這種錯誤的情況。
首先,我們建立一個範例項目, gradle-demo :
$ mkdir gradle-demo && cd gradle-demo
接下來,我們將專案啟動為 Java 應用程式:
$ gradle init --type java-application
最終,我們得到了一個可以運行的 Gradle 專案。
讓我們看看專案目錄的內容:
$ ls
build.gradle gradle gradlew gradlew.bat settings.gradle src
從輸出結果中,我們來檢查gradlew檔案的權限設定:
$ ls -l gradlew
-rwxrwxr-x 1 vagrant vagrant 8618 Nov 10 06:12 gradlew
接下來,我們運行gradlew命令:
$ gradlew
-bash: gradlew: command not found
由此可見,問題的關鍵就在於此。
4. 診斷並解決病因
既然我們已經重現了錯誤,接下來讓我們看看如何識別和修復任何相關問題。
4.1. 運行gradlew不帶./或路徑
在Linux系統中,如果我們僅透過腳本名稱直接執行任何腳本,可能會收到command not found 」的錯誤:
$ gradlew
-bash: gradlew: command not found
如果我們打算按名稱使用該腳本,我們可以將其放在 shell 通常檢查可執行檔的位置,例如/usr/local/bin 、 /bin等。
或者,我們可以將腳本移到PATH環境變數指向的某個目錄,或是將目前腳本目錄路徑加入到該清單中。需要注意的是,我們可能需要修改~/.bashrc或~/.bash_profile檔案以套用這些變更。
但是,如果我們不想做太多更改,只要我們目前位於腳本所在的目錄中,就可以直接使用./明確引用該腳本:
$ ./gradlew
./前綴告訴 shell 執行位於目前目錄中的名為gradlew檔案。
或者,我們可以指定完整的絕對路徑(通常是專案根目錄)並以這種方式運行它:
$ /full/path/to/gradlew
這種方法應該也適用。
4.2. 修復檔案權限
有時,在正確運行腳本時,我們可能會遇到與檔案權限相關的問題。具體來說,腳本檔案可能根本沒有執行權限。
在這種情況下,我們有兩種選擇:
- 使用特定的 shell 運行腳本
- 將腳本設定為可獨立執行。
當然,只要 gradlew 位於當前目錄或我們知道其完整路徑,我們就可以直接使用bash來運行gradlew :
$ bash gradlew
另一方面,我們也可以直接賦予檔案執行權限:
$ sudo chmod +x gradlew
現在,直接呼叫該腳本應該可以正常運作了:
$ ./gradlew
同樣,如果目前目錄設定正確,我們可以直接使用腳本名稱gradlew 。
4.3. 修復文件缺失問題
通常,開發者會將包裝檔案與其餘程式碼放在同一個程式碼倉庫中。然而,在某些程式碼倉庫中,這些文件可能會缺少。換句話說,像gradlew這樣的包裝檔案可能不會包含在克隆的專案中。
因此,我們需要檢查與 Gradle wrapper 相關的文件是否存在:
$ ls -l
接下來,如果檔案缺失,我們可以使用gradle指令產生它們:
$ gradle wrapper
上述命令恢復與 Gradle Wrapper 相關的必要文件,包括gradlew 。
4.4 工作目錄問題
在 Gradle 中, gradlew檔案應該位於專案的根目錄中。
如果檔案位於其他位置,則將其移至專案根目錄:
$ cp /current/path/to/gradlew /path/to/project/gradlew
$ cd /path/to/project
$ ./gradlew
因此,上述方法應該可以解決與路徑相關的問題。需要注意的是,務必確保將正確的文件複製到正確的位置。
5. 結論
本文討論了導致gradlew: command not found 」錯誤的原因。總而言之,解決此錯誤主要有三種方案:
- 產生包裝文件(如果缺失)
- 修復檔案權限
- 將檔案放置在正確的位置(根目錄)
通常情況下,上述錯誤可以透過正確的執行權限來解決。