1. 前期工作准备
开发环境:
JDK-1.8
DEA-2020.2.4
GRADLE-5.6.4
SRING-5.2.x.RELEASE
GIT
1、下载 Spring 源码
现在,Spring 源码托管在 Github 上面,所以,我们可以通过 Git 将此源码下载下来。
首先,进入 Spring 官网,点击 Github 图标,即可进入到 Spring 源码页面
如图:
安装 Git,然后 选择分支,即 Spring 源码的版本,复制 Spring 源码地址,使用 Git 进行下载
2、下载、安装并配置 Gradle
找到对应的 Gradle 版本。下载 Spring 源码的 Zip 包,并解压 。
然后打开 spring-framework-5.2.x/gradle/wrapper/gradle-wrapper.properties
查看源码使用的 Gradle 的版本号:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
由 distributionUrl
的属性值知:Spring5.2.x 的版本对应的 Gradle 版本为 5.6.4
下载 Gradle。进入 Gradle 官网:https://gradle.org/releases/.
下载完毕后,进行解压,并配置环境变量
- GRADLE_HOME:安装目录
- GRADLE_USER_HOME:自定义仓库
- 环境变量 Path:%GRADLE_HOME%\bin
测试是否安装成功。在命令行窗口中输入:
gradle -v
配置 Gradle 仓库源。在 Gradle 安装目录下的 init.d 文件夹下,新建一个 init.gradle 文件,里面填写以下配置:
allprojects {
repositories {
maven { url 'file:///D:/professionbehindEnd/gradle/GradleRepository'}
mavenLocal()
maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" }
maven { name "Bstek" ; url "http://nexus.bsdn.org/content/groups/public/" }
mavenCentral()
}
buildscript {
repositories {
maven { name "Alibaba" ; url 'https://maven.aliyun.com/repository/public' }
maven { name "Bstek" ; url 'http://nexus.bsdn.org/content/groups/public/' }
maven { name "M2" ; url 'https://plugins.gradle.org/m2/' }
}
}
}
repositories 中写的是获取 jar 包的顺序:先是本地的 Maven 仓库路径;接着的 mavenLocal() 是获取 Maven 本地仓库的路径,应该是和第一条一样,但是不冲突;第三条和第四条是从国内和国外的网络上仓库获取;最后的 mavenCentral() 是从Apache提供的中央仓库获取 jar 包。
IDEA 中配置 Gradle。全局配置Gradle仓库
2. 构建 Spring 源码
解压 Spring 源码包,进入当前目录,shift + 鼠标右键选择 “在此处打开命令窗口” ,键入 gradlew build
开始构建
E:\occupation\spring-framework>gradlew build
加速构建。可在源码包根目录 build.gradle 文件中(末尾)更新如下配置,可加快构建效率:
plugins {
id 'io.spring.dependency-management' version '1.0.9.RELEASE' apply false
id 'io.spring.ge.conventions' version '0.0.7'
id 'io.spring.nohttp' version '0.0.5.RELEASE'
id 'org.jetbrains.kotlin.jvm' version '1.3.72' apply false
id 'org.jetbrains.dokka' version '0.10.1' apply false
id 'org.asciidoctor.jvm.convert' version '2.4.0'
id 'org.asciidoctor.jvm.pdf' version '2.4.0'
id 'de.undercouch.download' version '4.1.1'
id "io.freefair.aspectj" version '4.1.6' apply false
id "com.github.ben-manes.versions" version '0.28.0'
id 'com.gradle.build-scan' version '3.2'
}
repositories {
maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
maven { url 'https://repo.springsource.org/plugins-release'}
}
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
maven { url 'https://repo.springsource.org/plugins-release'}
}
}
【注意】:所有的仓库配置url前的http都要加上 s :“https://xxx”,要不然 > Task :checkstyleNohttp 任务会报错
如果结果中有 BUILD SUCCESSFUL 字样就明预编译成功:
可能出现的错误:
Git 的问题,暂时还不知道如何解决,不影响构建。
3. IDEA 导入 Spring 源码
选择下载到本地的 Spring 源码
配置 Gradle。配置后点击OK开始导入,过程有点长,如果配置国内镜像会好很多
配置 jdk1.8, Spring 高版本中使用了 1.8 新特性,为了避免报错,需要配置。
4. 对 Spring-test 模块做 junit 测试
结果,发现报错了:
Error:Kotlin: warnings found and -Werror specified
后得知,在 build.gradle
文件中有关于 kotlin 版本约束:
在 IDEA 配置中查看:
版本要与之对应。第一次导入时,用的 IDEA 版本是 2018.2,由于出现上面的问题,我就更换 IDEA 版本为 2020.2.4。然后,就没有上述报错了。
5. Spring 入门案例调试
在 spring-test 模块中,某个测试类中编写一个 Spring 入门案例代码。我这里是在 org.springframework.test.jdbc.JdbcTestUtilsTests 测试类中
在原有的测试类中,添加一个测试方法,代码如下:
@Test
void testDo() {
BeanFactory beanFactory = new ClassPathXmlApplicationContext("bean.xml");
MyTest bean = beanFactory.getBean(MyTest.class);
System.out.println(bean);
}
要想运行成功,先前条件有两个:
- 在 main 文件夹下,添加一个 MyTest 类(这个和 bean.xml 中配置的类保持一致:com.zzc.MyTest)
- 在 test/resource 文件夹下,添加一个 bean.xml
bean.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 https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="myTestBean" class="com.zzc.MyTest"/>
</beans>
然后,启动测试类,编译成功后,如下图:
在后期过程中,Spring 源码就开整咯~~