最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java如何反編譯jar包并修改class文件重新打包

 更新時(shí)間:2022年03月09日 10:36:21   作者:帆影匆匆  
這篇文章主要介紹了java如何反編譯jar包并修改class文件重新打包,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

反編譯jar包并修改class文件重新打包

這兩天碰到一個(gè)需求:需要修改一個(gè)jar包中的邏輯代碼,并且重新打包

本來(lái)是很簡(jiǎn)單的問題,但是因?yàn)檫@個(gè)jar包不是可執(zhí)行的jar包(沒有main方法入口),jar反編譯之后又是不能通過(guò)idea重新打包,因?yàn)閖ar是混亂的

所以費(fèi)了點(diǎn)時(shí)間,在此記錄下

解決思路

反編譯jar包

首先用一些反編譯工具類似 jad-gui 之類的 ,將項(xiàng)目反編譯成java文件包

示例的jar包并不是業(yè)務(wù)真正使用,只是寫博客demo,假設(shè)這個(gè)包就叫 demo.jar

這時(shí)候?qū)С鰹閖ava文件即可

用javac 編譯成class文件

注意這里容易出問題,因?yàn)楫?dāng)前java文件可能有一些依賴其他jar包的代碼,那就需要一個(gè)一個(gè)引入

# 最后必須以 : 結(jié)束
# 如果有編譯問題可以嘗試 -Xlint:unchecked 這個(gè)參數(shù)
javac -classpath demo.jar:依賴jar包路徑1:依賴jar包路徑2: Demo.java

此時(shí)會(huì)在當(dāng)前運(yùn)行目錄下生成 Demo.class

此時(shí)目錄結(jié)構(gòu)如下(請(qǐng)忽略和上圖jad-gui的不匹配)

- demo
? - META-INF
? ? MANIFEST.MF
? - com
? ? - demo
? ? ? demo.class

打jar包

# 在demo文件夾下運(yùn)行
# 最后這個(gè) . 代表當(dāng)前目錄所有文件
jar cvfm Demo.jar META-INF/MANIFEST.MF .

大功告成 :

jar包反編譯后修改源碼再編譯

1. 場(chǎng)景

需要對(duì)當(dāng)前的jar包功能進(jìn)行修改,但是沒有源碼

兩種方式:

  • 通過(guò)反編譯軟件如JD-GUI或其他Java開發(fā)常用的IDE如IDEA查看源代碼,創(chuàng)建新工程,按照文件結(jié)構(gòu)逐個(gè)將文件源碼復(fù)制粘貼到工程中,再根據(jù)個(gè)人需求進(jìn)行修改、編譯等。
  • 通過(guò)反編譯軟件JD-GUI直接保存成源碼格式的工程文件,再通過(guò)IDEA打開工程,進(jìn)行必要的配置后,再根據(jù)需求進(jìn)行修改編譯。

很明顯第一種方式比較費(fèi)時(shí),選用第二種方式。

2. 詳細(xì)步驟 

2.1 查看源碼

如果僅僅是查看源代碼的話,有兩種方式:

方式一:

直接通過(guò)jd-gui打開jar文件即可。

方式二:

通過(guò)IDEA的External Libraries查看。在IDEA中通過(guò)Project Structure將需要查看的jar包添加到Libraries,之后就可以查看了。

第二種方式雖然稍微麻煩一點(diǎn),但如果只是查看源碼的話,個(gè)人更傾向第二種。

2.2 生成源文件

借助jd-gui可以直接生成**.java**源文件。通過(guò)菜單File -> Save All Sources就可以生成源文件壓縮包。

注:查看生成的源碼文件中有一些多余的注釋,如行號(hào)及一些元數(shù)據(jù)信息,可以通過(guò)修改jd-gui的偏好設(shè)置重新生成。

2.3 構(gòu)建項(xiàng)目

通過(guò)IDEA直接打開源文件;

創(chuàng)建src目錄,將源文件方法到src下,根據(jù)報(bào)錯(cuò)信息,修改工程的外部引用;

2.4 編譯成jar包

兩種類型可以選擇:Empty可以不設(shè)置主類,適用于編譯沒有主類的jar包;

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java字符串拼接效率測(cè)試過(guò)程解析

    Java字符串拼接效率測(cè)試過(guò)程解析

    這篇文章主要介紹了Java字符串拼接效率測(cè)試過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java中減少if-else的幾種方式

    Java中減少if-else的幾種方式

    if判斷語(yǔ)句是很多編程語(yǔ)言的重要組成部分,但是,若我們最終編寫了大量嵌套的if語(yǔ)句,這將使得我們的代碼更加復(fù)雜和難以維護(hù),本文主要介紹了Java中減少if-else的幾種方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • SpringBoot項(xiàng)目中的favicon.ico圖標(biāo)無(wú)法顯示問題及解決

    SpringBoot項(xiàng)目中的favicon.ico圖標(biāo)無(wú)法顯示問題及解決

    這篇文章主要介紹了SpringBoot項(xiàng)目中的favicon.ico圖標(biāo)無(wú)法顯示問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • springboot?vue前后端接口測(cè)試樹結(jié)點(diǎn)添加功能

    springboot?vue前后端接口測(cè)試樹結(jié)點(diǎn)添加功能

    這篇文章主要為大家介紹了springboot?vue前后端接口測(cè)試樹結(jié)點(diǎn)添加功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Java發(fā)起http請(qǐng)求的完整步驟記錄

    Java發(fā)起http請(qǐng)求的完整步驟記錄

    這篇文章主要給大家介紹了關(guān)于Java發(fā)起http請(qǐng)求的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • SpringBoot中使用Ehcache的詳細(xì)教程

    SpringBoot中使用Ehcache的詳細(xì)教程

    EhCache 是一個(gè)純 Java 的進(jìn)程內(nèi)緩存框架,具有快速、精干等特點(diǎn),是 Hibernate 中默認(rèn)的 CacheProvider。這篇文章主要介紹了SpringBoot中使用Ehcache的相關(guān)知識(shí),需要的朋友可以參考下
    2020-08-08
  • Java實(shí)現(xiàn)簡(jiǎn)單的掃雷小程序

    Java實(shí)現(xiàn)簡(jiǎn)單的掃雷小程序

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單的掃雷小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Java中security與shiro的區(qū)別詳解

    Java中security與shiro的區(qū)別詳解

    這篇文章主要介紹了Java中security與shiro的區(qū)別詳解,Spring?Security在架構(gòu)上將認(rèn)證與授權(quán)分離,并提供了擴(kuò)展點(diǎn),它是一個(gè)輕量級(jí)的安全框架,它確?;赟pring的應(yīng)用程序提供身份驗(yàn)證和授權(quán)支持,需要的朋友可以參考下
    2023-08-08
  • MyBatis3源碼解析之如何獲取數(shù)據(jù)源詳解

    MyBatis3源碼解析之如何獲取數(shù)據(jù)源詳解

    用myBatis3與spring整合的時(shí)候,我們可以通過(guò)多種方式獲取數(shù)據(jù)源,下面這篇文章主要給大家介紹了關(guān)于MyBatis3源碼解析之如何獲取數(shù)據(jù)源的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • 修改若依框架Token的過(guò)期時(shí)間問題

    修改若依框架Token的過(guò)期時(shí)間問題

    本文介紹了如何修改若依框架中Token的過(guò)期時(shí)間,通過(guò)修改`application.yml`文件中的配置來(lái)實(shí)現(xiàn),默認(rèn)單位為分鐘,希望此經(jīng)驗(yàn)對(duì)大家有所幫助,也歡迎支持腳本之家
    2025-02-02

最新評(píng)論

昌乐县| 武隆县| 邹城市| 义乌市| 托克逊县| 米脂县| 琼海市| 临江市| 含山县| 唐河县| 叙永县| 田东县| 从江县| 武隆县| 涪陵区| 永兴县| 石台县| 浮梁县| 吉安市| 平原县| 静乐县| 五峰| 天峻县| 特克斯县| 喀什市| 仪陇县| 兰考县| 阿拉善左旗| 资兴市| 孝感市| 运城市| 精河县| 昌乐县| 财经| 丰都县| 靖江市| 施甸县| 呈贡县| 克山县| 盐亭县| 景宁|