如何調試 Java 開源項目源碼,記一種源碼導入開發工具並調試的通用方法


楔子

說起讀開源項目源碼,很多朋友覺得高大上、大佬牛逼,雲雲~

擋在很多人面前的不是源碼怎么讀,而是不知道如何導入源碼到開發工具以及如何調試源碼。

本文將以 spring-cloud-gateway 源碼導入一個簡單的 SpringBoot 項目中舉例,目的就是給讀者一個導入開源項目源碼並調試的簡單方法。

看文過程中感覺有不明白的地方歡迎評論留言,如果本文幫到了你,本人不勝榮幸的同時,也歡迎為本文點個大拇哥 😅

准備工作

1、默認大家本地有裝 IDEA、Maven、Git,Java 程序員通識就不再細述。

2、下載源碼 https://github.com/spring-cloud/spring-cloud-gateway.git

3、切換 tag 創建分支 v3.0.2

本例中切換分支有其原因:根據BOM spring-cloud-dependencies-parent 中定義的版本對應的倉庫tag 正是v3.0.2

4、使用 https://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="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 https://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博客 https://blog.csdn.net/u012586326?spm=1001.2101.3001.5343


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM