2021年12月25日 星期六

5.3 在命令列(command line)使用模組指令選項-jdeps

指令jdeps提供有關模組內依賴項目的資訊。

相比於指令javajar使用選項「--describe-module」,該指令除了檢視模組資訊檔之外,它還查看程式碼,因此可以反應更詳實的結果。

先從一個簡單的範例開始,使用選項「-summary」提供模組zoo.animal.feedingJAR檔的依賴項目的概略說明:

jdeps 
-summary 
mods/zoo.animal.feeding.jar

選項「-summary」可以使用「-s」予以簡化。兩者會有一樣結果:

輸出顯示只有一個套件並依賴於內建的java.base模組:

【結果】

zoo.animal.feeding -> java.base

若未使用-summary選項則可以得到完整的結果。指令為:

jdeps 
mods/zoo.animal.feeding.jar
結果為:

文字結果:

1

zoo.animal.feeding

2

 [file:///C:/java11/code/zoo.staff/mods/zoo.animal.feeding.jar]

3

   requires mandated java.base (@11.0.12)

4

zoo.animal.feeding -> java.base

5

   zoo.animal.feeding      -> java.io        java.base

6

   zoo.animal.feeding      -> java.lang      java.base

【說明】

1

模組名稱。

2

模組檔案路徑。

3

模組相依項目與版本。

4

與使用-summary選項結果相同。

5

模組zoo.animal.feeding使用套件java.io,屬於模組java.base

類別Task使用System.out,稱為「標準輸出」,涉及Java I/O

6

模組zoo.animal.feeding使用套件java.lang,屬於模組java.base

類別Task使用System類別,屬於套件java.lang

接下來檢視一個具備更複雜的模組依賴關係的zoo.animal.careJAR檔案。因為zoo.animal.care依賴於zoo.animal.feeding,分析時必須使用選項「--module-path」告知相依模組的路徑。先前檢視zoo.animal.feeding不需要該選項是因為所有依賴模組都內建在JDK中。

指令為:

jdeps 
-summary
--module-path mods
mods/zoo.animal.care.jar

注意這裡的「--module-path」選項不能以-m-p取代。

結果為:

文字結果:

zoo.animal.care -> java.base

zoo.animal.care -> zoo.animal.feeding

可以看出zoo.animal.care模組依賴自定義的zoo.animal.feeding模組與Java內建的java.base模組。

去除選項-summary改以完整模式下執行:

jdeps --module-path mods mods/zoo.animal.care.jar

【結果】

1

zoo.animal.care

2

 [file:///C:/java11/code/zoo.staff/mods/zoo.animal.care.jar]

3

   requires mandated java.base (@11.0.12)

4

   requires transitive zoo.animal.feeding

5

zoo.animal.care -> java.base

6

zoo.animal.care -> zoo.animal.feeding

7

   zoo.animal.care.details     -> java.lang            java.base

8

   zoo.animal.care.details     -> zoo.animal.feeding    zoo.animal.feeding

9

   zoo.animal.care.medical    -> java.lang            java.base

可以看出行56與使用-summary選項結果相同,行7-9則輸出相依的套件與模組細節。

沒有留言:

張貼留言