Java中Jar包反編譯解壓和壓縮操作方法
1、簡(jiǎn)述
JAR 文件就是 Java Archive ( Java 檔案文件),它是 Java 的一種文檔格式。 JAR 文件非常類似 ZIP 文件。準(zhǔn)確的說(shuō),它就是 ZIP 文件,所以叫它文件包。JAR 文件與 ZIP 文件唯一的區(qū)別就是在 JAR 文件的內(nèi)容中,多出了一個(gè)META-INF/MANIFEST.MF 文件,這個(gè)文件是在生成 JAR 文件的時(shí)候自動(dòng)創(chuàng)建的 (也可以自行創(chuàng)建)
2、反編譯
反編譯常用的工具:luyten,jd-gui,我們可以通過(guò)反編譯查看原來(lái)代碼,同時(shí)可以通過(guò)將class文件反編譯成Java文件。
備注:ThreadPoolExecutor 多線程反編譯是無(wú)法看到,所以要注意當(dāng)前class文件是否使用的多線程,如果采用多線程,是無(wú)法直接反編譯Java來(lái)使用。
3、命令參數(shù)
用法:jar {ctxui} [vfmn0PMe] [jar文件] [清單文件] [入口點(diǎn)] [-C目錄](méi)文件…
-c:創(chuàng)建新檔案 -t:列出要?dú)w檔的目錄 -x:從存檔中提取命名(或所有)文件 -u:更新現(xiàn)有檔案 -v:在標(biāo)準(zhǔn)輸出上生成詳細(xì)輸出 -f:指定歸檔文件名 -m:包含來(lái)自指定清單文件的清單信息 -n:在創(chuàng)建新存檔后執(zhí)行Pack200規(guī)范化 -e:指定獨(dú)立應(yīng)用程序的應(yīng)用程序入口點(diǎn) -0只存儲(chǔ);不使用ZIP壓縮 -P:從文件名保留前導(dǎo)的“ /”(絕對(duì)路徑)和“ ..”(父目錄)組件 -M:不為條目創(chuàng)建清單文件 -i:為指定的jar文件生成索引信息 -C:更改為指定目錄并包含以下文件 如果任何文件是目錄,則將對(duì)其進(jìn)行遞歸處理。 清單文件名稱,歸檔文件名稱和入口點(diǎn)名稱為 以與“ m”,“ f”和“ e”標(biāo)志相同的順序指定。
A.解壓
在jar包當(dāng)前文件下,cmd指令 通過(guò)jar -xvf解壓當(dāng)前jar包
jar -xvf shop-order-0.0.1-SNAPSHOT.jar
B.壓縮
在當(dāng)前文件目錄下,替換我們所需要替換的文件,重新將當(dāng)前解壓的jar壓縮,注意后綴要帶上./META-INF/MANIFEST.MF .:
jar -uvf shop-order-0.0.1-SNAPSHOT.jar BOOT-INF/classes/application.properties
C.更新
在不解壓的情況下,更新jar包某個(gè)文件,可以直接通過(guò)jar 更新指令對(duì)某個(gè)文件修改:
jar -uvf shop-order-0.0.1-SNAPSHOT.jar BOOT-INF/classes/application.properties
4、Jar啟動(dòng)
在Linux環(huán)境啟動(dòng)參數(shù)設(shè)置:
java -Xms512m -Xmx512m -Xmn1024k -Xss1024k -XX:MaxMetaspaceSize=256m -XX:MetaspaceSize=256m -jar shop-order-0.0.1-SNAPSHOT.jar
a、-Xms :表示java虛擬機(jī)堆區(qū)內(nèi)存初始內(nèi)存分配的大小,通常為操作系統(tǒng)可用內(nèi)存的1/64大小即可,但仍需按照實(shí)際情況進(jìn)行分配。
b、-Xmx:表示java虛擬機(jī)堆區(qū)內(nèi)存可被分配的最大上限,通常為操作系統(tǒng)可用內(nèi)存的1/4大小。但是開(kāi)發(fā)過(guò)程中,通常會(huì)將 -Xms 與 -Xmx兩個(gè)參數(shù)的配置相同的值,其目的是為了能夠在java垃圾回收機(jī)制清理完堆區(qū)后不需要重新分隔計(jì)算堆區(qū)的大小而浪費(fèi)資源。
c、-Xmn:至于這個(gè)參數(shù)則是對(duì) -XX:newSize、-XX:MaxnewSize兩個(gè)參數(shù)的同時(shí)配置,也就是說(shuō)如果通過(guò)-Xmn來(lái)配置新生代的內(nèi)存大小,那么-XX:newSize = -XX:MaxnewSize = -Xmn。
d、-XX:MaxMetaspaceSize:設(shè)置元空間最大值,默認(rèn)是 -1,即不限制,只受限于本地內(nèi)存大小
e、-XX:MetaspaceSize:指定元空間的初始空間大小,達(dá)到該值就會(huì)觸發(fā)垃圾回收進(jìn)行類型卸載,同時(shí)收集器會(huì)對(duì)該值進(jìn)行調(diào)整:如果釋放了大量的空間,就適當(dāng)降低該值;如果釋放了很少的空間,那么在不超過(guò) -XX:MaxMetaspaceSize的情況下,適當(dāng)提高該值。
到此這篇關(guān)于Java中Jar包反編譯解壓和壓縮的文章就介紹到這了,更多相關(guān)java jar反編譯內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud+SpringBoot項(xiàng)目搭建結(jié)構(gòu)層次的實(shí)例
這篇文章詳細(xì)介紹了SpringCloud項(xiàng)目的架構(gòu)層次及其搭建經(jīng)驗(yàn),包括Controller層、Service層、Repository層、Entity層、DTO層、Exception層等,通過(guò)文字和圖片的形式,幫助讀者理解如何組織和實(shí)現(xiàn)一個(gè)SpringBoot項(xiàng)目的不同層次2025-01-01IDEA 中創(chuàng)建并部署 JavaWeb 程序的方法步驟(圖文)
本文主要介紹了IDEA 中創(chuàng)建并部署 JavaWeb 程序的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02使用spring整合Quartz實(shí)現(xiàn)—定時(shí)器功能
這篇文章主要介紹了使用spring整合Quartz實(shí)現(xiàn)—定時(shí)器功能,不基于特定的基類的方法,需要的朋友可以參考下2018-04-04java中Map、Set、List的簡(jiǎn)單使用教程(快速入門(mén))
這篇文章主要給大家介紹了關(guān)于java中Map、Set、List簡(jiǎn)單使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01微信小程序獲取手機(jī)號(hào)的完整實(shí)例(Java后臺(tái)實(shí)現(xiàn))
我們?cè)谧鲂〕绦蜷_(kāi)發(fā)的過(guò)程中,經(jīng)常會(huì)涉及到用戶身份的問(wèn)題,最普遍的就是我們要獲取用戶的手機(jī)號(hào)碼,下面這篇文章主要給大家介紹了關(guān)于微信小程序獲取手機(jī)號(hào)的完整實(shí)例,后臺(tái)由Java實(shí)現(xiàn),需要的朋友可以參考下2022-06-06