SpringBoot源码分析(三)之源码编译

SpringBoot源码分析(三)之源码编译

文章目录

  • SpringBoot源码分析(三)之源码编译
  • 前言
  • 一、源码下载
  • 二、本地编译
    • 1.修改根pom文件
    • 2.编译源码
  • 三、源码环境的使用
    • 1.源码的工程下创建Spring Boot项目
    • 2.在独立的项目中导入源码


前言

对于想研究Spring Boot源码的同学来说,最好能在本地进行编译,同时在分析源码的时候,可以添加自己的注释,接下来,我们先来搭建一下我们本地源码环境。
由于Spring Boot源码项目在2.3.0版本之前都是用的Maven构建的,在2.3.0版本之后改用Gradle构建项目。为了简单省事,本文选择了SpringBoot2.2.5版本的源码进行编译,因为我们大部分人使用的都是Maven,省去了安装Gradle环境的环节。

一、源码下载

既然我们选择了SpringBoot2.2.5版本的源码,我们可以去github上找到对应版本的Spring Boot源码(https://github.com/spring-projects/spring-boot).我们选择的是v2.2.5.RELEASE,
SpringBoot源码分析(三)之源码编译_第1张图片
选择好版本之后,直接点击下载即可。
SpringBoot源码分析(三)之源码编译_第2张图片

二、本地编译

我们将下载的Spring Boot源码解压,导入到IDEA中。

1.修改根pom文件

首先,我们先将pom文件上Spring Boot的版本号由2.2.5.RELEASE改为2.2.5.snapshot,同时我们需要添加一个 disable.checks属性并将其设置成true,可以在编译源码的时候关闭maven的代码检查。
pom.xml

<properties>
	<revision>2.2.5.snapshotrevision>
	<main.basedir>${basedir}main.basedir>
	
	<disable.checks>truedisable.checks>
properties>

如何不设置disable.checks属性的话,那么在Maven编译打包的时候,就需要忽略maven的代码检查。

mvn clean install -DskipTests -Pfast

2.编译源码

此时,我们就可以编译我们的源码了。打开IDEA右侧的Maven条框,点击上方的“M”图标(execute Maven Goal),将mvn clean install -DskipTests指令输入进去,点击回车按键即可。
SpringBoot源码分析(三)之源码编译_第3张图片
编译的过程中,可能会出现如下错误:
SpringBoot源码分析(三)之源码编译_第4张图片
按照提示,执行命令即可:

mvn spring-javaformat:apply

然后再次执行编译命令,慢慢等候即可。

但是笔者编译的时候使用的是MAC电脑,在编译spring boot gradle plugin时,出现了Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:exec (gradle) on project spring-boot-gradle-plugin: Command execution failed.
SpringBoot源码分析(三)之源码编译_第5张图片

经过查询报错日志得知,该异常是因为MAC电脑下 /Library/Internet\ PlugIns/JavaAppletPlugin.plugin/Contents/Home/lib中没有tools.jar
解决的办法就是在该路径下添加tools.jar,本文参考的是:https://blog.csdn.net/GUO_NULL192/article/details/119649802

1.先执行/usr/libexec/java_home -V,快速找到MAC下的java jdk路径。
如图,会显示两个jdk路径,其中/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home路径下没有tools.jar,跟报错日志说法一致。
在这里插入图片描述
2.将我们jdk1.8中的tools.jar移动到/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home下即可。

cp /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/lib/tools.jar /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib

此刻,我们再次执行编译命令,慢慢等候几分钟即可。

三、源码环境的使用

既然编译好了Spring Boot源码,那么我们就可以来创建我们自己的Spring Boot项目了,当然创建的Spring Boot项目最好和我们编译的源码版本一致。
创建自己的Spring Boot项目并关联我们编译好的源码,一般有两种方式:一种是直接在源码工程中创建我们的项目作为源码工程中的一个模块;另一种就是单独创建一个Spring Boot工程,将源码导入到该工程中。

1.源码的工程下创建Spring Boot项目

源码编译好之后,我们就可以在Spring Boot源码项目中来创建我们自己的SpringBoot项目了,我们在 spring-boot-project项目下创建 module:springboot-demo。
并将pom中parent中spring boot的版本改成2.2.5.snapshot。
SpringBoot源码分析(三)之源码编译_第6张图片
此时,我们的demo项目可以成功运行。在查看Spring Boot中的注解时,直接点击就可以跳到源码部分。当然了,我们只编译了Spring Boot的源码,对于Spring的注解,我们还是看不了的。

2.在独立的项目中导入源码

在独立的Spring Boot工程中使用我们编译之后的源码,可能更方便大家来针对源码的功能进行调试。在创建Spring Boot的demo工程时,使用的版本最好和我们编译的Spring Boot版本一致。
1.先创建2.2.5.RELEASE版本的spring boot项目;
2.将编译好的2.2.5.snapshot版本的源码导入到项目;
依次点击IDEA->File->Project Structure,
找到Project settings下的Libraries,在libraries中找到spring boot并点击,在右侧的+里面找到我们源码编译的目录,并选择导入即可。
SpringBoot源码分析(三)之源码编译_第7张图片

此时,我们的源码就导入到项目中了。我们可以通过点击项目中Spring Boot中的方法或者注解,跳转到源码中去,在源码中我们可以进行修改和注释,在第一次改动源码的时候,会弹出一个提示:这个文件不属于该项目。我们点击第二条“I want to edit all files in this directory”即可。
SpringBoot源码分析(三)之源码编译_第8张图片
再次打开源码:我们就能发现我们在demo中修改的源码,会同步到spring boot 2.2.5 snapshot源码中。
SpringBoot源码分析(三)之源码编译_第9张图片

你可能感兴趣的:(spring,boot,java)