利用bat反編譯jar包產生源碼jar包

來源:互聯網
上載者:User

反編譯所使用的工具是jad.exe,筆者的測試版本是1.5.8e,壓縮與解壓縮使用的是WinRAR

jad.exe 可反編譯一個class檔案為java檔案,筆者的BAT可通過此工具將一個jar包反編譯成一個完整的源碼jar包,同時產生的目錄也可以在eclipse中使用

jad.exe 官方網站 : http://www.kpdus.com/jad.html  (英文的)

BAT指令碼見後

安裝方法如下:

        複製粘貼後面的文本為一個BAT,然後與jad.exe放在同一個目錄即可(WinRAR需正確安裝)

使用方法如下:   (有3種使用方法, 使用其中任意一種均可,結果是相同的)

      1. 雙擊BAT,提示輸入需反編譯的jar包,請輸入完整的jar路徑

     2. 直接將 jar 包拖放在bat上

     3.右鍵點擊jar包,選擇開啟檔案,然後選擇使用該BAT來執行

運行後的結果如下:

      在jar包的同一目錄下, 將會產生一個目錄,一個jar,目錄下有兩個子目錄,一個目錄存放解壓縮後的所有class,一個目錄存放反編譯後的java檔案,jar包是用源碼壓縮產生的

幾點說明:

     1. 工具中使用的WinRAR是自動識別安裝路徑的,請正確安裝WinRAR

    2. 工具使用的jad.exe,須與BAT放在同一目錄,或者放在PATH可搜尋到的位置

    3.  jar包中非class檔案,也會完整拷貝在源碼目錄下,方便產生源碼工程

    4. 產生的目錄名與原 jar 包同名, 產生的源碼 jar 包的檔案名稱是在原名稱中加入-src而產生, 如原 jar 包為 jdbc.jar, 則產生的目錄名為 jdbc, 而產生的源碼jar 包名則為 jdbc-src.jar

    5. eclipse使用方法1, 將BAT產生的目錄放在workspace中,然後建立同名工程

    6. eclipse使用方法2,在 eclipse 中建立同名工程,使用src為源檔案目錄,bin為class檔案目錄,然後將BAT產生的目錄拷貝在eclipse的workspace中

 

該BAT為 blog.csdn.net/seavers 原創, BAT源碼僅供個人學習,使用,研究,未經本人同意,不可用於商業用途

 

 

BAT源碼如下: (請直接拷貝在BAT檔案中)

 

::功能:     反編譯jar包,產生對應的源碼jar包,詳細說明方檔請登陸我的blog

::開啟/關閉命令列顯示
@echo OFF

::::::::::::::::::::::::::::解析並設定變數::::::::::::::::::

::尋找jad檔案的路徑, 這裡取的jad.exe, 表示從PATH中尋找,如果想手工指定,需在這裡修改
set JAD_PATH=jad.exe

::設定解壓出的class檔案存放的位置(相對路徑)
set CLASS_PATH=bin

::設定反編譯後的java檔案存放的位置(相對路徑)
set JAVA_PATH=src

::檢查JAD檔案是否存在bat所在目錄下,
if exist "%~dp0jad.exe" set JAD_PATH=%~dp0jad.exe

::判斷參數個數,如果沒有檔案參數,則報錯,這裡也可以使用%~f1,也可以用%1,沒有關係,之後要去掉引號
if ""%1""=="""" (set /P JAR_PATH=請輸入要反編譯的JAR包的路徑...) else (set JAR_PATH=%~f1)
if '%JAR_PATH:~0,1%%JAR_PATH:~0,1%'=='""' set JAR_PATH=%JAR_PATH:~1,-1%

::擷取原始碼存放的路徑,這裡取JAR包所在路徑,然後去掉".jar"作為檔案夾路徑, 這裡的LOCATION不能帶引號,因為下面還要追加字元)
if ""%2""=="""" (set LOCATION=%JAR_PATH:~0,-4%) else (set LOCATION=%~f2)

::::::::::::::::::::開始執行程式:::::::::::::::::::::::::::::::

::擷取WinRAR.exe的路徑,設定在臨時變數rarpath中
for /f "usebackq delims=" %%i in (`ftype WinRAR`) do set RARPATH=%%i

::對rarpath進行解析,去掉前面7個節符,去掉後面5個字元,得到WinRAR執行路徑
::路徑大致是這樣的形式  Winrar="C:/Program Files/WinRAR/WinRAR.exe" "%1"
set RAREXE=%RARPATH:~7,-5%

::調用WinRAR命令,解壓檔案到指定目錄的bin目錄下
%RAREXE% x "%JAR_PATH%" "%LOCATION%/%CLASS_PATH%/"

::遍曆整個bin目錄,取所有class檔案,調用jad.exe反編譯出源碼,非class的拷貝到src目錄下
::開啟變數延遲功能
setlocal EnableDelayedExpansion
for /r "%LOCATION%/bin" %%i in (*.*) do if '%%~xi'=='.class' ("%JAD_PATH%"  -o -r -sjava -ff -b -nonlb -space -t -8 -d"%LOCATION%/%JAVA_PATH%" "%%~si") else (set TEMP_PATH=%%i & echo f|xcopy "%%i" "!TEMP_PATH:%LOCATION%/bin=%LOCATION%/src!")
endlocal EnableDelayedExpansion

::將產生的java檔案壓縮成源碼檔案
%RAREXE% a -ep1 -r "%LOCATION%-src.zip" "%LOCATION%/%JAVA_PATH%/*.*"

::::::::::::::::::程式結束, 顯示運行結果::::::::::::::::::::::
echo *********************************************
echo 程式運行結束
echo 解析的JAR包的路徑為 %JAR_PATH%
echo 解壓縮工具WinRAR.exe的路徑為 %RAREXE%
echo 反編譯工具JAD.exe的路徑為 %JAD_PATH%
echo 解析後的檔案的根路徑為 %LOCATION%
echo 解析後的class檔案存放在 %LOCATION%/%CLASS_PATH%
echo 解析後的java檔案存放在 %LOCATION%/%JAVA_PATH%
echo 壓縮後的java檔案存放在 %LOCATION%-src.zip
echo *********************************************
pause

文章來源:http://www.diybl.com/course/3_program/java/javajs/2008116/96535_2.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.