執行具有庫依賴項的 Java 應用程式

這是 主類“可執行 JAR” 示例的延續。

典型的 Java 應用程式包含特定於應用程式的程式碼,以及你已實現或已由第三方實現的各種可重用庫程式碼。後者通常被稱為庫依賴項,通常打包為 JAR 檔案。

Java 是一種動態繫結語言。當你執行具有庫依賴項的 Java 應用程式時,JVM 需要知道依賴項的位置,以便它可以根據需要載入類。從廣義上講,有兩種方法可以解決這個問題:

  • 可以將應用程式及其依賴項重新打包到包含所有必需類和資源的單個 JAR 檔案中。

  • 可以通過執行時類路徑告訴 JVM 在哪裡找到依賴的 JAR 檔案。

對於可執行 JAR 檔案,執行時類路徑由“Class-Path”清單屬性指定。 (編者注:這應該在 jar 命令的單獨主題中描述。) 否則,需要使用 -cp 選項或使用 CLASSPATH 環境變數來提供執行時類路徑。

例如,假設我們在“myApp.jar”檔案中有一個 Java 應用程式,其入口點類為 com.example.MyApp。還假設應用程式依賴於庫 JAR 檔案“lib / library1.jar”和“lib / library2.jar”。我們可以在命令列中使用 java 命令啟動應用程式,如下所示:

$ # Alternative 1 (preferred)
$ java -cp myApp.jar:lib/library1.jar:lib/library2.jar com.example.MyApp

$ # Alternative 2
$ export CLASSPATH=myApp.jar:lib/library1.jar:lib/library2.jar
$ java com.example.MyApp

(在 Windows 上,你將使用 ; 而不是:作為類路徑分隔符,並且你將使用 set 而不是 export 設定(local)CLASSPATH 變數。)

雖然 Java 開發人員對此感到滿意,但它並不使用者友好。因此,通常的做法是編寫一個簡單的 shell 指令碼(或 Windows 批處理檔案)來隱藏使用者不需要了解的詳細資訊。例如,如果將以下 shell 指令碼放入名為 myApp 的檔案中,則將其設定為可執行檔案,並將其放入命令搜尋路徑中的目錄中:

#!/bin/bash
# The 'myApp' wrapper script

export DIR=/usr/libexec/myApp
export CLASSPATH=$DIR/myApp.jar:$DIR/lib/library1.jar:$DIR/lib/library2.jar
java com.example.MyApp

然後你可以按如下方式執行它:

$ myApp arg1 arg2 ...

命令列上的任何引數都將通過 $@ 擴充套件傳遞給 Java 應用程式。 (你可以使用 Windows 批處理檔案執行類似操作,但語法不同。)