我們在看框架源碼的時候,如果沒有註釋,看起來會比較喫力。所以如果能夠一邊看源碼一邊自己加中文註釋,下次閱讀的時候就會輕鬆很多。
問題是:通過maven下載的jar,查看源碼,實際上看到的是經過反編譯的class文件,是不能夠修改的(提示:file is read only)。
如果把當前maven下載的jar包強行關聯到自己下載的源碼,又有可能會出現字節碼跟源碼文件不一致的情況(提示:Library source does not match the bytecode for class),導致debug的時候無法進入代碼。
如果要保證源碼和字節碼一致,最好的辦法當然是在本地把下載的源碼編譯生成jar包,上傳到本地maven倉庫,再引用這個jar。
以MyBatis爲例,如果我們要給MyBatis源碼加上中文註釋(以IDEA操作爲例):
01 配置Maven
因爲需要用Maven打包編譯源代碼,所以第一步是檢查Maven的配置。
第一個是環境變量,需要在系統變量中添加MAVEN_HOME,配置Maven主路徑,例如“E:\dev\apache-maven-3.5.4”,確保mvn命令可以使用。
第二個是檢查Maven的配置。Maven運行時,默認會使用conf目錄下的settings.xml配置,例如:E:\dev\apache-maven-3.5.4\conf\settings.xml。
爲了保證下載速度,建議配置成國內的aliyun中央倉庫(此處需要自行搜索)。
並且,settings.xml中的localRepository應該和IDEA中打開的項目設置中的Local repository保持一致(例如:E:\repository)。否則項目引入依賴時,無法讀取到編譯後的jar包。
02 下載編譯MyBatis源碼
因爲MyBatis源碼編譯依賴parent項目的源碼,所以第一步是編譯parent項目。
先從git clone兩個工程的項目(截止2020年4月,最新版本是3.5.4)。
以在E盤根目錄下載爲例。
git clone https://github.com/mybatis/parent
git clone https://github.com/mybatis/mybatis-3
打開mybatis-3中的pom.xml文件,查看parent的版本號,例如:
<parent>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-parent</artifactId>
<version>31</version>
<relativePath />
</parent>
確定parent版本是31(記住這個數字)。
把mybatis版本號改成自定義的版本號,避免跟官方版本號衝突(加上了-snapshot):
<artifactId>mybatis</artifactId>
<version>3.5.4-snapshot</version>
<packaging>jar</packaging>
進入parent目錄,切換項目分支(不能在默認的master分支中編譯),工程名後面的數字就是前面看到的parent版本號。
開始編譯parent項目:
cd parent
git checkout mybatis-parent-31
mvn install
接下來編譯mybatis工程,進入mybatis-3目錄,切換到最新3.5.4分支(不能在默認的master分支中編譯)。
cd ../mybatis-3
git checkout mybatis-3.5.4
mvn clean
mvn install -DskipTests=true -Dmaven.test.skip=true -Dlicense.skip=true
編譯完畢,本地倉庫就會出現一個編譯後的jar包,例如:E:\repository\org\mybatis\mybatis\3.5.4-snapshot\mybatis-3.5.4-snapshot.jar, 在我們的項目中就可以引入這個jar包了(version是自定義的version)。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4-snapshot</version>
</dependency>
03 關聯jar包到源碼
本地編譯的jar包已經有了,接下來是把jar包和源碼關聯起來。
Project Structure —— Libries —— Maven: org.mybatis:mybatis:3.5.4-snapshot —— 在原來的Sources上面點+(加號) —— 選擇到下載的源碼路徑,例如:E:\mybatis-3\src\main\java,點擊OK.
關聯好之後,開始打斷點debug,就會進入到本地的源碼,可以給本地的源碼加上註釋了。
04 注意
1、如果之前打開過類的字節碼文件,本地可能有緩存,一樣會有“Library source does not match the bytecode for class”的提示。解決辦法:File —— Invalidate Caches and Restart(IDEA會重啓)。
2、如果添加註釋導致了debug的當前行跟實際行不一致,再把mybatis3工程編譯一次即可。