最近一直在跟着大佬的源码解析在看spring boot 源码,在啃的时候,光看倒是没啥感觉,所以就跟着一起动手执行,观看不做傻把式,竟然第一次搭建spring boot 源码的环境就错误百出,执行千里,始于足下,还是老老实实找问题,解决。下面是碰到的一些坑和解决办法。经供参考。

  • 环境准备
    1、安装maven 3.5或者以上版本。
    2、安装JDK 8或者以上,如果是最下载的是最新的版本2.3.0 ,建议安装jdk 11,因为我后期碰到一些问题,升级了jdk 就ok了.。
    3、源码fork到自己的库 link 这一步fork 方便自己存档,修改自便,当然如果你觉得不需要,可以忽略。
  • 开源 spring boot avue 代码生成器 springboot源码编译_后端

  • 4、git clone 到本地导入IDEA(笔者ide是idea,其他ide 同样,不浪费时间说这个)

git clone https://github.com/spring-projects/spring-boot.git

  • 由于Spring Boot的发布版本代码都在tag上,所以需要使用git tag命令查看所有的tag]

git tag

  • 然后切换到名为v2.0.0.RELEASE的tag上:

git checkout -b v2.0.0.RELEASE v2.0.0.RELEASE

  • 这样,代码就被保存到本地分支v2.0.0.RELEASE上了,可以随意操作
    5、开始进行源码编译工作
源码视图

开源 spring boot avue 代码生成器 springboot源码编译_maven_02

  • 修改最外层pom.xml文件

<disable.checks>true</disable.checks>

开源 spring boot avue 代码生成器 springboot源码编译_后端_03

  • 接着切换到spring-boot根目录下,开始进行编译,变过执行过程又两种方式,我这里使用的Maven版本是apache-maven-3.5.4
  • 方式一 : 使用mvn clean install 编译项目
mvn -Dmaven.test.skip=true clean install

-Dmaven.test.skip=true 在打包过程中会忽略testcase,不然编译过程漫长,而且可能会发生一些异常,初次编译的目的削减掉这一步,如果正常编译通过,后面可以对那测试案例做测试。

  • 方式二 : 使用 mvnwrapper 编译项目
  • 1
mvn -N io.takari:maven:wrapper
  • 2 (window)
mvnw clean install -DskipTests -Pfast

我的编译结果

开源 spring boot avue 代码生成器 springboot源码编译_spring boot_04

我再执行编译的过程中也出现了几个低级错误,其中也碰到了

开源 spring boot avue 代码生成器 springboot源码编译_java_05


然后参一些博客的解决办法

开源 spring boot avue 代码生成器 springboot源码编译_java_06


删除掉后重新来一遍

mvn -Dmaven.test.failure.ignore=true -Dmaven.test.skip=true clean install

也就成功了,后来急于测试源码,也就没去看具体的原因。主要是这个gradle plugin对我要做的学习不重要,所以没关心。哈哈

6、进行测试

  • 选取项目里的一个单元测试运行一下,走起,发现运行成功了。
  • 自己创建子模块项目引入编译的源码进行调试,
    在spring-boot/spring-boot-project目录下创建一个Spring Boot项目测试一下自己编译的源码是否可以正常运行

    子模块项目就创建一个简单的spring boot demo,按照自己平时创建springboot demo案例就行。
    做个简单的请求案例,我的如下:

开源 spring boot avue 代码生成器 springboot源码编译_后端_07


运行

开源 spring boot avue 代码生成器 springboot源码编译_spring_08


测试结果

开源 spring boot avue 代码生成器 springboot源码编译_java_09

正常结束。

  • 总结
    再调试过程中出现了好几次失败,一些奇怪的问题也出现了,就是已经编译好了,运行案例的时候老是提示找不到类,或者不存在。我自己去找到对应的编译的文件都存在,因为项目比较巨大,没有找到根本原因,后来把jdk 升级到11 后,重新编译了一遍。就ok了。反正最后也成功了。:)