JEP 282 jlink:Java連結器
作者 Jean-Francois Denise
所有者 Jim Laskey
建立 2015/07/16 12:55
更新 2017/05/19 02:01
型別 功能
狀態 已關閉/已交付
域 JDK
討論 拼圖的開發在 openjdk.java.net
努力 L
持續時間 L
優先 2
檢驗人 Alan Bateman, Alex Buckley, Iris Clark, Jim Laskey, Mandy Chung, Mark Reinhold
支援 Brian Goetz
發行 9
概要
建立一個用於將一組模組和它們的依賴組裝與優化到一個自定義執行時映象中去的工具,此執行時映象的細節在
非目標
此 JEP 所定義的工具唯一的功能就是用於建立模組化執行時映象。
為外掛定義一個標準的,或受支援的 API 並非此 JEP 的目標。相反的,此中所定義的外掛 API 將是完全實驗性的。在我們從此 JEP 所定義的 API 的應用中獲得足夠經驗之後,將來或許會建立一個新的 JEP 用於討論標準 API 的定義。
動機
JEP261 在編譯時(javac命令)和執行時(java命令)之間定義了一個可選階段:連結時。連結時需要一個連結工具用於組裝和優化一組模組以及它們的可傳遞依賴,以建立一個執行時映象,或可執行檔案。
執行時是一個對全域性進行優化的較好時機,因為在編譯時進行優化會比較困難,而在執行時進行優化代價高昂。一個例子是,在一個計算的所有輸入成為常量(亦既非未知)時對其進行優化。還有一個例子是把不再會被執行到的程式碼移除。
描述
一個基本的對連結工具 jlink 的呼叫如下:
$ jlink --module-path <模組路徑> --add-modules <模組名> --limit-modules <模組名> --output <輸出路徑>
- –module-path 是連結器將要發現可觀測模組的路徑。這些模組可以是以 JAR 檔案,JMOD 檔案或 exploded 模組的形式存在
- –add-modules 將要被加入執行時映象的模組名。這些模組還會通過傳遞依賴,導致更多的模組被加入
- –limit-modules 對可觀測模組的集合進行限制
- –output 用於存放產生的執行時映象的路徑
–module-path, –add-modules 和 –limit-modules 選項在 JEP261 中進行了詳細描述。
其餘 jlink 將會支援的選項包含:
- –help 列印使用/幫助資訊
- –version 列印版本資訊
替代方案
連結工具的替代方案是使用平臺特定的 JDK 和 JRE 映象構建指令碼。但採用這一途徑會讓建立自定義執行時映象變的困難。
測試
除了計劃中的用於測試該工具的單元測試集合,JDK 構建也會通過建立 JDK 和 JRE 執行時映象而經常呼叫 jlink 工具。
風險與假設
該工具的需求集合目前尚未完成。工具的擴充套件性會隨著時間推移不斷完善。