使用jar包反編譯形成pom工程
這周接了一個需要吧把jar還原代碼新建pom項目的工作,一百多個jar還是挺累的,鼠標用的都不靈敏了。當然這只是量的問題,下面記錄一下具體的操作方法。
1. 反編譯jar得到源碼
1.1 使用jd-gui工具
這個不需要安裝,下載之后壓縮包里面有exe應(yīng)用程序。打開jd-gui.exe,先設(shè)置一下反編譯后不需要有注釋。點擊help -> preferences, 不要勾選write original line number 和write metadata
1.2 點擊file - > open file 選中需要反編譯的jar
或者直接把jar拖入到j(luò)d-gui的窗口。左邊是列舉包路徑和文件,右邊的窗口是顯示源代碼的
1.3 保存反編譯的源代碼
file -> save all source ,它會以zip的形式保存在本地計算機。
反編譯之后的源文件有些是正常的,有部分可能是需要人工修復一下代碼,比如反編譯后有g(shù)oto關(guān)鍵詞,super指向報錯等問題??梢該Q其他的反編譯工具試試,再比對反編譯之后的差異進行參考對其修復代碼。這里還介紹一個反編譯工具luyten,最新版本是0.0.5。其他的根據(jù)也很多,可以網(wǎng)上搜索。
如果同時使用不同的反編譯工具,建議以某一個為主,其他做輔助參考。因為不同的反編譯工具反編譯之后的代碼是有些差異的。比如變量名稱,gd-gui是反編譯是String str ,luyten 反編譯是 String name,當然這個變量在整個類或者方法中都是一致的,不會報錯關(guān)系不大,只是可閱讀性是否容易看懂源碼。格式上gd-gui會有很多斷行空行沒luyten整齊好閱讀。luyten 的反編譯速度沒jd-gui快(luyten點擊單個文件后右下角會顯示進度條,100%時右邊窗口就顯示代碼了)
2. ideal新建pom工程
2.1 file ->new ->project
選擇maven選項,project SDK如果是第一次使用ideal的選擇一下本機的jdk安裝目錄,點擊下一步
2.2 GroupId 和 ArtifactId 可以自定義填寫
建議都寫項目名稱,版本號自定義也可默認不修改
2.3 項目名稱和項目文件保存路徑會自動填入
(第一次使用ideal需要設(shè)置一下項目路徑)
2.4 新建好的項目結(jié)構(gòu)如下
3. 復制jar源碼到pom工程
3.1 解壓上面1.3那個步驟輸出的zip
只需要復制主要代碼到新pom項目下的src-main-java目錄下
若解壓后發(fā)現(xiàn)里面還有jar,說明你這個jar當時創(chuàng)建的時候本來就用了別人的jar,那這些解壓后的jar在新建的pom工程肯定也是需要用上的,可以參考下面的3.2.1 步驟,也可以直接放在項目下和main-src-java 同一級目錄就行,然后選中這些jar右鍵 選as Library 構(gòu)建依賴。建議用下面3.2.1步驟的方案比較規(guī)范一些。
3.2 補充pom文件里面的配置
項目需要用到哪些jar都需要在此寫好(文章末尾附有參考pom.xml文件),以下只列舉了幾個公網(wǎng)上可以自動下載到的jar。每次修改了pom文件后,右下角會出現(xiàn)彈框,點擊import changes才會刷新依賴,java文件里面才能引用到新加的架包
3.2.1 如果用到了自己封裝的jar,需要在本地倉庫(我的是安裝maven時默認的C:\Users\Administrator.m2\repository)下新建文件夾放好jar,下圖圈出的三個分別是groupId、artifactId、version,可以自定義命名,最后文件夾下的架包命名是artifactId-version.jar(如下圖就是fastjson-1.2.6.jar)
pom里面配置如下
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.6</version> </dependency>
3.2.2 如果用到公司私服上的jar,需要在maven安裝目錄下的settings.xml文件里面配置私服的 地址/鏡像。
配置本地的maven倉庫地址
<localRepository>D:\my_mevan\repository</localRepository> # 自行修改本地地址
配置私服鏡像
<mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/.../.../</url> # 填寫你的url </mirror>
3.2.3 如果別人給了整個倉庫給你,把倉庫復制到C:\Users\Administrator.m2\下即可,然后file->setting到下面這個界面,選擇別人給你的倉庫就不用自己本地的倉庫了。此處不建議把別人倉庫下的文件下合并到自己的repository下面,可能會有問題引用不到的喲
3.3 檢查源代碼
反編譯后有問題的代碼片段,根據(jù)代碼上下文進行修復或者自己寫個與原來功能一致的代替。若遇道switch(字符串)有紅色波浪線時(jdk1.7版本才開始支持字符串類型),可以參考如下設(shè)置file->Project Structure
Modules-> Source->language level選 8開頭的這個(一般大于7開頭均可)
3.4編譯打包
點擊右上側(cè)的maven打開推窗,編輯package進行編譯,等最下面的窗口打印日志,如果顯示Process finished with exit code 0 表示打包成功,Process finished with exit code 1 表示有錯誤,根據(jù)日志提示修改完錯誤重試。打包成功后會出現(xiàn)target文件夾,里面存放的是編譯之后的class和輸出的jar
pom文件附件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>yulisao</groupId> <artifactId>yulisao</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <!--打包輸出方式,可以是jar、war等格式 --> <name>這里寫你的項目名稱</name> <description>這里寫項目簡要描述</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <!--構(gòu)建項目配置--> <!--這個可以解決因switch(字符串)無法編譯問題--> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <!--這里是項目jar依賴節(jié)點配置--> <dependencies> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> </dependency> <!--項目需要用到的架包,都依次按此格式寫好--> </dependencies> </project>
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Sprigmvc項目轉(zhuǎn)為springboot的方法
本篇文章主要介紹了Sprigmvc項目轉(zhuǎn)為springboot的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02Java 異步線程監(jiān)聽與結(jié)果回調(diào)及異常捕獲總結(jié)分析
異常是程序之中導致程序中斷的一種指令流,異常一旦出現(xiàn)并且沒有進行合理處理的話,那么程序就將中斷執(zhí)行,這篇文章綜合介紹了異步線程監(jiān)聽與結(jié)果回調(diào)及異常捕獲2021-11-11Java中不得不知的Collection接口與Iterator迭代器
這篇文章主要介紹了Java中的Collection接口與Iterator迭代器,文中有詳細的代碼示例供大家參考,對我們的學習或工作有一定的幫助,需要的朋友可以參考下2023-06-06Java Iterator迭代器_動力節(jié)點Java學院整理
迭代器是一種模式,它可以使得對于序列類型的數(shù)據(jù)結(jié)構(gòu)的遍歷行為與被遍歷的對象分離,接下來通過本文給大家分享Java Iterator迭代器_動力節(jié)點Java學院整理,需要的朋友參考下吧2017-05-05基于Beanutils.copyProperties()的用法及重寫提高效率
這篇文章主要介紹了Beanutils.copyProperties( )的用法及重寫提高效率的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09netty?pipeline中的inbound和outbound事件傳播分析
這篇文章主要為大家介紹了netty?pipeline中的inbound和outbound事件傳播分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04