如何调试 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

如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

本例中切换分支有其原因:根据BOM spring-cloud-dependencies-parent 中定义的版本对应的仓库tag 正是v3.0.2

4、使用 https://start.spring.io/ 初始化一个demo,引入 spring-cloud-starter-gateway依赖,使用Java 8,项目名等其他信息默认

如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

点击 GENERATE 下载生成的代码压缩包,解压到自己的目录

如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

5、目前 demo 与 spring-cloud-gateway 源码都放到了 ~/WorkSpace/gitRepo 目录下了。

接下来,开始导入项目与源码

导入项目与源码

1、导入demo工程

如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

给出一下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 相关依赖是否引入

如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

直接输入关键字,搜索 gateway,查看是否有gateway相关依赖,这是我们一般引Maven依赖的方式。

如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

3、引入 spring-cloud-gateway 源码工程

如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

使用 spring-cloud-gateway 下的pom.xml 引入项目

如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

等待依赖拉取完成,如下图所示

如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

验证

1、验证External Libraries 下是否仍有 spring-cloud-starter-gateway 依赖

直接用搜索关键字来查

如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

2、修改 spring-cloud-gateway 子工程源码,测试demo是否使用spring-cloud-gateway源码工程

如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

把demo工程run起来,什么也不需要配置,直接看日志输出

如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

如上图,当前依赖的是源码了,可以放心的加注释与Debug了。

原理

这个方法是利用了Maven依赖搜索顺序做到的。

源码依赖 > 本地仓库依赖 > 远程仓库依赖

ps:Gradle也是类似的

详细解释就是引入 spring-cloud-gateway 的 pom.xml时,会连带着将其子工程均依赖到当前工作空间中,对于 Maven 而言,这几个子工程的pom.xml是它首先要搜索的地方,这些pom.xml正是定义坐标的地方。

当Maven按demo工程的pom找坐标时,会按下图的坐标到所有引进来的工程中先找上一波如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

当找到spring-cloud-gateway源码工程时,发现还有子工程,再到子工程找一遍

如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

找到 spring-cloud-starter-gateway 工程的pom.xml时,就会将其源码依赖进来

如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

由于SpringBoot 和 SpringCloud 的 Starter 都是虚包,spring-cloud-starter-gateway 会把其他相关依赖引到项目中。

后话

写这篇文章做个记录,希望能帮到有需要的人,如果本文对你有所启发,点个推荐再走呗~

我是 Hellxz,一个Java/Vue/K8s/DevOps等集多功能于一身的软件工程师!如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

细水长流,我们下次再见,peace~


本文同步发布于我的CSDN博客 https://blog.csdn.net/u012586326?spm=1001.2101.3001.5343

上一篇:导出用户列表到Excel的几种方法


下一篇:修改jar包配置文件的正确操作,jar包解压出来的文件夹重新打成jar,不依靠开发工具!!!!