介紹
graalvm是乙個類似於jvm的虛擬機器,但還可以編譯和執行多種語言,如c++, js, python。當然這裡我們介紹它最特別之處:可以把j**a應用直接轉換成最精簡的本地二進位制應用(exe, elf等),然後可以脫離jvm,直接在本地平台執行。此處重點介紹exe。
安裝安裝vs環境(這裡是vs2022),需要安裝的元件如下
新增環境變數d:\ok\graalvm\bin
開啟控制台,執行gu install native-image(需要科-學-s-w),這個包能提供建立本地映象的能力。(native-image 命令)
用法控制台應用
編寫乙個j**a檔案
我這裡路徑為 d:/ok/test-se/main.j**a,內容如下:
import j**a.util.*;
public class main
}編譯這個j**a檔案(j**ac),得到main.class
開啟x64 native tools command prompt for vs 2022,如圖:
這個命令列整合了c++的編譯環境,用來生成目標exe檔案。
在這個命令列中cd到main.class的資料夾,輸入
native-image main
稍等片刻,即可看到生成了main.exe。
main.exe大小只有14.5mb,比jlink生成的還小。雙擊開啟效果如下,相當成功!
j**afx應用
這次我們難度加大點,來啟動乙個j**afx應用。
我們都知道,從jdk11開始j**afx就被移出了,使用時需要我們自己匯入對應的jar包。
生成單獨的jar包
pom.xml加入以下內容
org.apache.m**en.plugins
m**en-compiler-plugin
3.8.1
1717
org.apache.m**en.plugins
m**en-assembly-plugin
3.3.0
package
single
jar-with-dependencies
單獨啟動類的全類名
然後執行m**en package,執行完畢後把專案目錄的target/*-jar-with-denpendencies.jar(單jar檔案)複製出來,重新命名備用。(我這裡複製到d:/ok/test-fx/fx-demo.jar)
生成配置檔案
注:因為graalvm是在編譯時把所有用到的類都放在最後的二進位制檔案中,而它卻無法覺察到反射,jni等操作,所以需要我們編寫配置檔案告訴它,讓他把反射用到的class檔案,jni呼叫的dll檔案等也都加進來,這樣才能正確執行j**afx應用。
在vs控制台中,我們先cd到jar檔案的目錄,然後執行以下命令:
d:\ok\graalvm\bin\j**a -agentlib:native-image-agent=config-output-dir=./config -jar fx-demo.jar
這個命令會執行jar包,然後在執行時記錄它呼叫的資源到config資料夾的一些json檔案中。
執行成功以後,試用一下被開啟的j**afx應用(方便配置檔案的記錄,防止少記錄反射等資訊),然後關閉應用,就在資源管理器中就能看到在jar檔案的旁邊生成了乙個config資料夾,開啟以後出現這些檔案:
其中reflect-config.json記錄了反射的類,jni-config.json記錄了jni的方法,resource-config.json記錄了呼叫的dll資源,其他的還有動態**呼叫情況等等。
生成exe檔案
在剛剛的vs控制台執行以下命令:
native-image -h:configurationfiledirectories=./config -jar fx-demo.jar
該命令會根據jar檔案和剛剛生成的config資料夾中的配置檔案生成最終的exe可執行檔案。
結果竟然報錯了:
不過我們在jar檔案的目錄下看到生成了以下檔案:
其實這個錯誤應該是graalvm的乙個bug,不影響exe生成。
然後我們刪除目錄下多餘的檔案:awt.dll, j**a.dll, fx-demo.build_artifacts.txt。
開啟exe
生成的exe只有37.3mb!開啟fx-demo.exe,可以看到以下內容:
測試成功!!!
注:黑框暫時不知道怎麼去除。
總結graalvm可以把j**a應用程式直接轉換為本地應用,執行時不再依賴jvm,並且最終的成品還比jlink更小,是個相當不錯的工具。
Phoenix入門到精通
摘要 此phoenix系列文章將會從phoenix的語法和功能特性 相關工具 實踐經驗以及應用案例多方面從淺入深的闡述。希望對phoenix入門 在做架構設計和技術選型的同學能有一些幫助。phoenix是乙個開源的hbase sql層。它不僅可以使用標準的jdbc api替代hbase client...
GIT入門到精通
git工作流 版本回退 分支管理 標籤管理 遠端倉庫 linux torvalds在 1991 年建立了開源的 linux,從此,linux系統不斷發展,已經成為最大的伺服器系統軟體了。linux雖然建立了linux,但linux的壯大是靠全世界熱心的志願者參與的,這麼多人在世界各地為linux編寫...
Git 入門到精通
git是乙個開源的分布式版本控制系統,用以有效 高速的處理從很小到非常大的專案版本管理。git的特點 git 是用於 linux核心開發的版本控制工具。與常用的版本控制工具 cvs,subversion 等不同,它採用了分布式版本庫的方式,不必伺服器端軟體支援 wingeddevil注 這得分是用什...