2017-09-25 97 views
8

我按照拼圖quickstart here。我成功地跑給出的jlink命令:如何運行由JDK 9 jlink生成的圖像?

jlink --module-path $JAVA_HOME/jmods:mlib --add-modules com.greetings --output greetingsapp 

產生一個「運行時圖像」,這是一個類似的分解目錄結構:

~ tree -d greetingsapp 
greetingsapp 
├── bin 
├── conf 
│   └── security 
│    └── policy 
│     ├── limited 
│     └── unlimited 
├── include 
│   └── darwin 
├── legal 
│   └── java.base 
└── lib 
    ├── jli 
    ├── security 
    └── server 

如何運行呢?我期待着一個二進制可執行文件,而不是一個分解的目錄樹。

bin目錄中有一個java和一個keytool。我沒有看到任何.jar文件或.class文件通過捆綁的java可執行文件運行。

+2

我前一段時間回答了這個問題:https://stackoverflow.com/questions/44085367 –

回答

4

要運行,這樣做:

greetingsapp/bin/java -m com.greetings/com.greetings.Main 

或者,你可以有JLINK建立一個啓動程序腳本,這是否

jlink --module-path $JAVA_HOME/jmods:mlib --add-modules com.greetings --output greetingsapp --launcher launch=com.greetings/com.greetings.Main 

,然後用運行:

greetingsapp/bin/launcher 

形成相同的文檔: -

$ java -p mods -m com.greetings/com.greetings.Main 

可以被執行以運行從模塊結構的Main類不使用jshell以及鏈接。


另外,jlink是接頭工具,可用於鏈接的一組模塊,與他們的傳遞依賴沿,以創建稱爲Modular Runtime Images定製模塊化運行時圖像可使用來實現隨Java 9模塊引入的JMOD tool。 正如評論中指出的那樣,如果您只是打算執行主類,則可以通過@Jorn回答。

您可以通過使用Java的二進制文件中生成的圖像的bin 文件夾,並且使用命令運行應用程序:

java com.greetings.Main 

在另一方面,一個例子創建要用作模塊的JMOD文件進一步如下:

jmod create --class-path mods/com.greetings --cmds commands 
    --config configfiles --header-files src/h --libs lib 
    --main-class com.greetings.Main --man-pages man --module-version 1.0 
    --os-arch "x86_x64" --os-name "Mac OS X" 
    --os-version "10.10.5" greetingsmod 

編輯:擴大+澄清有我正在尋找的答案。

+0

第一個命令不使用jlink或jlink生成的輸出。它使用系統Java和'mods'目錄下的編譯過的.class文件。 – clay

+0

@clay正確。這就是我剛纔提到的*來自模塊結構*。*更新它來清楚說明。 – nullpointer

+0

一個額外的問題將是:你如何調試自定義圖像? -Xdebug不起作用 – madduci