歷史文章:
【jar】JDK將單個的java文件打包為jar包,並引用到項目中使用【MD5加密】
【java】javac命令在win10不可用,提示javac不是內部或外部命令,也不是可運行的程序【解決方法】
【javac命令不能使用,提示不是內部命令或外部命令,請查看歷史文章】
=================需求說明==========================
之前的文章中,僅說明了單個的java文件,沒有多的外部依賴的單個java文件編譯成class文件。
1.現在有個需求:
在使用一個mybatis-gen-1.2.jar包完成 自動代碼生成過程中,【jar包中全是已經編譯好的class文件】發現某個地方的源碼寫的有問題。
現在需要通過將class文件反編譯成 java文件,修改源碼后,再將java文件編譯成可以使用的class文件,以完成這次需求。
2.可以看到,jar包中的文件全是編譯的class文件
===================處理方式========================
1.將class文件拖拽至 IDEA中,就可以看到源碼了
2.將class文件中的內容,拷貝到一個新建的同名java文件中,然后可以進行修改源碼的操作
【因為class文件中的源碼無法直接修改,因此將整個文件中的源碼拷貝至 一個新建的同名java文件中】
現在代碼可以操作了,就直接刪除問題代碼行
3.現在,按照源碼的包路徑,在任意的一個文件下,按照包路徑創建層級目錄,再將文件放入對應目錄中
4.這個時候,單獨執行編譯命令,是不能成功編譯文件的,因為本源文件還依賴了其他幾個源碼文件
從剛剛的源碼可以看出來,本文件是依賴了其他幾個文件的:
5.所以,需要將本文件依賴的其他幾個源碼文件,按照相同的方式,打開class文件,新建同名java文件,復制源碼到同名java文件,然后創建對應的包路徑,將java文件放入對應位置
6.分別放置完成后,新創建一個source.txt文件,將多個需要編譯class的java文件,完整路徑放在source文件中,注意,文件之間有依賴關系的話,將被依賴的文件放在前面,依賴別的文件的放在后面,保證編譯的順序
7.最后,cmd進入到source.txt文件所在路徑,執行javac命令,開始編譯工作
javac -encoding utf-8 @source.txt -Xlint:unchecked
注意加上參數:
-Xlint:unchecked
以保證取消驗證,順利編譯成功
注意,source.txt文件前面有一個@符號
編譯完成,就可以看到各個目錄下,已經生成的class文件
8.最后,將編譯好的class文件,放入jar包中,替換原本有問題的class文件