目录
环境准备
1、安装git
2、jdk,版本为1.8
3、Gradle,目前不需要安装,在编译的时候根据源码提示按照对应版本的Gradle即可
4、IDEA,我使用的版本为 IDEA2020.3.1
1、获取Spring源码
推荐使用clone的方式将源码拉取到本地,好处在于可以利用IDEA直接比较版本间的差异
在磁盘空间中新建一个文件夹,如SpringFramWork,进入SpringFramWork文件夹中,鼠标右键,选择git bash here ,打开git命令行,输入以下命令,拉取spring源码
git clone https://github.com/spring-projects/spring-framework.git
等待仓库克隆完毕,这个过程可能会耗费比较长的时间,如果实在不行的话,大家可以去GitHub官网或者码云直接将源码的压缩包down下来。
官网下载(下载太慢):
https://github.com/spring-projects/spring-framework/archive/v5.0.2.RELEASE.zip码云下载:
https://gitee.com/mirrors/Spring-Framework/tree/v5.0.2.RELEASE/
如果你是跟我一样通过命令直接拉取的代码,记得切换到5.2.x版本,在git命令行中执行命令:
git checkout origin/5.2.x
2、添加阿里云镜像
在编译过程中,Spring会去自动下载一些依赖的包,默认使用的是官方的镜像,下载比较慢,所以我们提前添加好国内镜像,将下面这行代码粘贴到build.gradle文件中的repositories节点下即可 ,
//添加阿里云镜像
maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
3、预先编译spring-oxm模块
打开Windows的命令提示符窗口,切换到源码所在文件夹,比如:E:\software\SpringFramWork\spring-framework,执行以下命令
gradlew :spring-oxm:compileTestJava
这里需要等待比较长的时间,我是20分钟,出现BUILD SUCCESS字样时说明构建成功
4、根据编译后的源码下载并安装对应的版本的Gradle
在完成对spring-oxm模块的编译后,会在当前spring-framework目录生成一个.gradle文件夹,打开后可以查看对应的Gradle版本。双击打开.gradle文件夹就能看到对应所需要的gradle的版本号,在下面的网站上下载对应所需要的版本即可:https://gradle.org/releases/,选择binary-only
5、下载安装好后配置Gradle的环境变量
新增 GRADLE_HOME 环境变量,指向Gradle解压目录。配置Path环境变量:新增 %GRADLE_HOME%\bin
之后测试是否安装成,在命令行中输入以下命令:gradle -v,查看是否正确输出了对应版本。
6、为安装好的Gradle配置国内镜像
进入Gradle安装目录,在init.d目录下新建一个init.gradle文件,并添加以下内容:
allprojects{
repositories {
def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
all { ArtifactRepository repo ->
def url = repo.url.toString()
if ((repo instanceof MavenArtifactRepository) && (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com'))) {
project.logger.lifecycle 'Repository ${repo.url} replaced by $REPOSITORY_URL .'
remove repo
}
}
maven {
url REPOSITORY_URL
}
}
}
7、将代码导入到IDEA中
打开IDEA并选择打开项目,选择当前的spring-framework目录,点击Finish后等待IDEA构建完项目,如果你之前已经按照我的方法配置了Gradle的国内镜像,这个过程不会太久,我们本机只用了10多分钟就构建完成了
如果你跟我一样是直接检出的代码,记得在IDEA中将git分支切换到5.2.x
如果在右下角没有出现git分支,鼠标右键点击右键角的一栏,勾选git branch
出现git分支后,鼠标左键点击,弹出选择列表,选择5.2.x
8、构建整个项目
选择Build > Build Project
9、添加测试模块
右键工程名 —> new —> module,选择Gradle及Java,输入模块名称,点击next —> Finish 完成测试模块的创建
最后,添加一些必要的依赖,修改创建好的模块中的build.gradle文件,添加如下三个依赖
compile(project(":spring-aop"))
compile(project(":spring-context"))
optional("org.aspectj:aspectjweaver")
10、为模块添加访问源码的入口
在新模块的java目录下新增一个package,com.gxb.service,在该package下新增一个service类
package com.gxb.service;
public interface WelcomeService {
String sayHello(String name);
}
在com.gxb.service包下新增一个impl包,在该包下新增一个service实现类
package com.gxb.service.impl;
import com.gxb.service.WelcomeService;
public class WelcomeServiceImpl implements WelcomeService {
@Override
public String sayHello(String name) {
System.out.println("welcome " + name);
return "return success!";
}
}
在com.gxb包下创建一个类,并编写一个入口函数
package com.gxb;
import com.gxb.service.WelcomeService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Entrance {
public static void main(String[] args) {
System.out.println("hello spring");
String classPath = "spring/spring-config.xml";
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(classPath);
WelcomeService welcomeService = (WelcomeService) applicationContext.getBean("welcomeService");
System.out.println(welcomeService.sayHello("gxb"));
}
}
在resource下新增一个文件夹spring,在spring文件夹下新增一个spring-config.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="welcomeService" class="com.gxb.service.impl.WelcomeServiceImpl">
</bean>
</beans>
使用debug方式运行main函数,程序成功启动
参考官方文档:
https://github.com/spring-projects/spring-framework/wiki/Build-from-Source
https://github.com/spring-projects/spring-framework/blob/master/import-into-idea.md