本文介紹了JPMS和FATUBER可執(zhí)行JAR–它是如何協(xié)同工作的?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我想知道當使用JDK>8(即實際上使用JPMS)以及可執(zhí)行JAR時,F(xiàn)ATUBER JAR是如何工作的。
我有兩個與此主題相關(guān)的問題:
1.FATUBER JAR創(chuàng)建組裝流程
每個Java模塊通常是一個JAR,它在根條目中保存module-info.class
。
我正在使用Maven,我正在使用Maven匯編插件來構(gòu)建FATUBER JAR(帶有依賴關(guān)系的JAR引用描述符)。
如果我的應(yīng)用程序依賴于許多模塊化JAR,那么所有這些JAR將如何共存?畢竟,每個JAR的module-info.class
都將覆蓋另一個JAR的module-info.class
文件,因為所有的module-info.class
都應(yīng)該在根條目中…?
(側(cè)標:我已經(jīng)用我創(chuàng)建的maven sample project對它進行了測試,并發(fā)現(xiàn)最終的FAT JAR只保存第一個遇到的依賴項的module-info.class
。使用-X
選項還發(fā)現(xiàn),由于第一個文件的存在,所有其他module-info.class
文件都被跳過…)
2.可執(zhí)行JAR
眾所周知,可執(zhí)行JAR可以通過java -jar <jar-file-name.jar>
運行。當以這種形式使用JDK 11時-我的(FAT)JAR及其所有依賴項是否會從類路徑運行,并由此被視為未知模塊的一部分?還是從模塊路徑?
推薦答案
您可以從FAT JAR中刪除MODULES-INFO.CLASS,以去除模塊化元數(shù)據(jù)。這是一個簡單的解決方案,現(xiàn)在您的FAT JAR將是可執(zhí)行的。
zip -d FatJar.jar module-info.class
這篇關(guān)于JPMS和FATUBER可執(zhí)行JAR–它是如何協(xié)同工作的?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,