前言
此教程已在进行多次实操,每次都能构建成功,本人在教程中给出截图比较多,应该还比较清晰明了;
愿想要学习spring源码的小伙伴们都能构建成功;
从构建开始到成功一共有9个步骤(1-9);
新建java项目并引用新构建的spring框架,此处用了3个步骤(10-12);
第一步: 下载源码
Github链接:https://github.com/spring-projects/spring-framework
第二步: 下载gradle包
gradle 下载链接:https://gradle.org/releases/
我这里下载的版本是gradle 4.9,下载下来也是一个zip包
第三步: 配置gradle环境变量,因为spring是由gradle编译的;注意win7和win10在配置环境变量这块会略有不同,本人用的是win7
检查一下是否配置成功,打开命令行输入gradle -v
第四步: 修改gradle-wrapper配置文件该文件在\spring-framework-5.1.x\gradle\wrapper
目录下
将distributionUrl的路径改成我们已经下载好的gradle-4.9-bin.zip
包所在路径,我这里是D:\gradle-4.9-bin\gradle-4.9-bin.zip,配置该项的目的是避免其在运行的时候自动下载
注意:本地目录是以file
开头
第五步: 配置gradle的中央仓库,设置为国内的阿里云,修改文件build.gradle
repositories {
mavenCentral()
maven { url "https://repo.spring.io/libs-spring-framework-build" }
maven { url "https://repo.spring.io/snapshot" }
maven {url 'https://maven.aliyun.com/nexus/content/groups/public/'}
maven {url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
}
第六步: 编译,Windows环境下运行gradlew.bat
脚本文件就行了,尽量不要双击运行,使用cmd命令行运行才是正确的打开方式,这样的话报错也能直接看到,从下图中可以看到编译成功
了
第七步: 预编译spring-oxm项目,运行gradlew :spring-oxm:compileTestJava
即可,从下图中可以看出编译成功
了
第八步: 设置IDEA
首先,新建一个gradle项目
设置IDEA,红框内的地址选择我们解压后
gradle路径
第九步: 将我们已经编译好的spring源码导入到IDEA当中
导入源码后会自动开始构建,构建的时间有点久,从下图中可以看到构建成功,整个过程耗时15分钟(本人的小霸王已经在岗6年)
由于gradle编译过程比较慢,我们这个时候可以将编译类型改成IDEA编译,如下图
至此整个spring源码的构建工作就完成了,接下来新建一个项目调试一下
第十步: 新建一个子gradle java项目
添加spring依赖compile(project(":spring-context"))
到项目的build.gradle文件当中,添加完依赖之后点击右上角的刷新按钮,如下图
如下图,项目就创建好了
在项目中添加配置类AppConfig、测试类Apple和启动类SpringApplication
AppConfig类
package service;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan
public class AppConfig {
}
Apple类
package service;
import org.springframework.stereotype.Component;
@Component
public class Apple {
}
SpringApplication类
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import service.AppConfig;
import service.Apple;
public class SpringApplication {
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
System.out.println(Apple.class);
}
}
第十一步: 运行子项目
点击开始运行,立即推,运行报错:(
从报错来看是我们Kotlin: Language version 1.1太低了,那就调高一点
这里研究了一下也不太好确定是哪个子模块的Kotlin: Language version低,可以这么解决,打开spring
的build.gradle
文件,注意这里是spring的build.gradle文件
,不是咱们新建项目中的build.gradle文件,分别将apiVersion
和languageVersion
字段设置为1.4,之后,重启IDEA即可:
再次点击开始运行,立即推,运行报错:(
从报错来看是我们没有加spring-instrument
的依赖,那我们在项目的build.gradle文件中加上compile(project(":spring-instrument"))
即可
加compile(project(":spring-instrument"))
依赖,并点击右上方刷新按钮
再次点击开始运行,给它最后一次机会,立即推,运行成功:)
第十二步: 项目调试,在源码中打个断点试试,如下图,是我们想要的结果,哦了
总结
最近在学spring源码,刚开始构建的是看官方给出的文档一步一步进行,但着实是:(
很难构建成功,至少我没有;
因此在构建spring这块走了些许弯路,好在卡的时间不是很长,最后总算让我给整出来了,然后你会发现成功一次,后面基本没啥问题了,今天是我第三次构建spring源码;
以上所描述的每一步以及每一张截图都是本人实际操作过的,写这篇文章主要希望大家能少走弯路,同时也是怕自己以后再想做这件事的时候,又会在这里耽误时间,最后愿所有喜欢java的小伙伴都能一次成功!