用java寫了一個程序,想要打包成exe,奈何找到的方法都需要配套jre環境,讓用戶自己安裝好像不太友好,軟件附帶又太大了,一個jre就200M,而程序又是個小程序,感覺沒必要。
找到說精簡jre的,但是自己手動精簡太麻煩了,而且如果以后寫程序都這么手動精簡一遍,這誰受得了。作為程序員,還是想找到一種一勞永逸並且自動化且簡便的方法。在知乎的問題評論里發現有人說jlink,於是查了一下,但是沒有詳細資料,又換英文搜索了一下, 找到了個詳細介紹的。
jdk9之前會附帶一個jre,之后就不附帶了,如果需要jre得自己生成。jdk9之后進行了模塊化,使得用戶能夠根據需要生成自定義的jre,而不是將整個jre打包,只用導出用到的部分就好。
1、生成jar文件
2、查看jar依賴了哪些模塊
jdeps mylib.jar
3、根據依賴模塊生成特定jre
jlink --output minimal-with-logging --add-modules java.base,java.logging
如上面的命令,會生成一個minimal-with-logging的文件夾,這個文件夾就是jre,該jre包含了兩個模塊,分別是java.base和java.logging。根據第二步查看的依賴模塊,自行修改。
用生成的自定義jre,再用launch4j打包成exe,這樣就達到了不需要用戶自行安裝jre,同時減小軟件大小的目的。我導出的jre大小是70M,大概占原來的1/3,雖然還是很大,但是已經知足了。再用7z壓縮后就只有17M了,GOOD。
參考文章:
https://www.devdungeon.com/content/how-create-java-runtime-images-jlink
