如何調試 Java 開源項目源碼,記一種源碼導入開發工具並調試的通用方法
- 2021 年 4 月 15 日
- 筆記
- Java基礎/JVM
楔子
說起讀開源項目源碼,很多朋友覺得高大上、大佬牛逼,云云~
擋在很多人面前的不是源碼怎麼讀,而是不知道如何導入源碼到開發工具以及如何調試源碼。
本文將以 spring-cloud-gateway
源碼導入一個簡單的 SpringBoot 項目中舉例,目的就是給讀者一個導入開源項目源碼並調試的簡單方法。
看文過程中感覺有不明白的地方歡迎評論留言,如果本文幫到了你,本人不勝榮幸的同時,也歡迎為本文點個大拇哥 😅
準備工作
1、默認大家本地有裝 IDEA、Maven、Git,Java 程式設計師通識就不再細述。
2、下載源碼 //github.com/spring-cloud/spring-cloud-gateway.git
3、切換 tag 創建分支 v3.0.2
本例中切換分支有其原因:根據BOM
spring-cloud-dependencies-parent
中定義的版本對應的倉庫tag 正是v3.0.2
4、使用 //start.spring.io/ 初始化一個demo,引入 spring-cloud-starter-gateway依賴,使用Java 8,項目名等其他資訊默認
點擊 GENERATE 下載生成的程式碼壓縮包,解壓到自己的目錄
5、目前 demo 與 spring-cloud-gateway 源碼都放到了 ~/WorkSpace/gitRepo
目錄下了。
接下來,開始導入項目與源碼
導入項目與源碼
1、導入demo工程
給出一下demo的pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="//maven.apache.org/POM/4.0.0" xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="//maven.apache.org/POM/4.0.0 //maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2、檢查 gateway 相關依賴是否引入
直接輸入關鍵字,搜索 gateway
,查看是否有gateway相關依賴,這是我們一般引Maven依賴的方式。
3、引入 spring-cloud-gateway 源碼工程
使用 spring-cloud-gateway 下的pom.xml 引入項目
等待依賴拉取完成,如下圖所示
驗證
1、驗證External Libraries 下是否仍有 spring-cloud-starter-gateway 依賴
直接用搜索關鍵字來查
2、修改 spring-cloud-gateway 子工程源碼,測試demo是否使用spring-cloud-gateway源碼工程
把demo工程run起來,什麼也不需要配置,直接看日誌輸出
如上圖,當前依賴的是源碼了,可以放心的加註釋與Debug了。
原理
這個方法是利用了Maven依賴搜索順序做到的。
源碼依賴 > 本地倉庫依賴 > 遠程倉庫依賴
ps:Gradle也是類似的
詳細解釋就是引入 spring-cloud-gateway
的 pom.xml時,會連帶著將其子工程均依賴到當前工作空間中,對於 Maven 而言,這幾個子工程的pom.xml是它首先要搜索的地方,這些pom.xml正是定義坐標的地方。
當Maven按demo工程的pom找坐標時,會按下圖的坐標到所有引進來的工程中先找上一波
當找到spring-cloud-gateway源碼工程時,發現還有子工程,再到子工程找一遍
找到 spring-cloud-starter-gateway
工程的pom.xml時,就會將其源碼依賴進來
由於SpringBoot 和 SpringCloud 的 Starter 都是虛包,spring-cloud-starter-gateway
會把其他相關依賴引到項目中。
後話
寫這篇文章做個記錄,希望能幫到有需要的人,如果本文對你有所啟發,點個推薦再走唄~
我是 Hellxz,一個Java/Vue/K8s/DevOps等集多功能於一身的軟體工程師!
細水長流,我們下次再見,peace~
本文同步發佈於我的CSDN部落格 //blog.csdn.net/u012586326?spm=1001.2101.3001.5343