一、准备
-
jdk1.8及以上
-
IDEA 2020.1
-
gradle-5.6.4
-
Spring-framework (5.2.x)
二、Spring源码本地构建
下载配置Gradle
1.下载地址
下载你所需要打版本。并解压到你需要存放的目录中。
2.配置环境变量
新建系统变量
path中添加信息
3.验证
cmd 查看gradle版本:
gradle -v
表明gradle 安装成功
下载Spring源码
spring源码是在GitHub上,为了下载速度,我们在码云上进行下载。
下载地址为:
https://gitee.com/mirrors/Spring-Framework/tree/5.2.x
选择分支,你可以下载zip包或者通过Git命令下载。
Git命令如下:
git clone -b 5.2.x https://gitee.com/mirrors/Spring-Framework.git
这里下载需要几分钟,请耐心等待。
修改配置
下面要所的就非常重点了。请认真查看,并配置,否则会导致编译失败。我们需要修改四个文件,请看截图:
最后一个修改的文件是在目录:…/spring-framework/gradle/wrapper/gradle-wrapper.properties
下面就分别说明这四个文件:
-
第一个:修改settings.gradle 由于国外网站下载依赖速度非常慢,因此我们改成阿里云的maven仓库。
maven { url "https://maven.aliyun.com/repository/public"}
修改后如下图所示:
-
第二个:修改 gradle.properties 文件
version=5.2.13.BUILD-SNAPSHOT ## 设置此参数主要是编译下载包会占用大量的内存,可能会内存溢出 org.gradle.jvmargs=-Xmx2048M ## 开启 Gradle 缓存 org.gradle.caching=true ## 开启并行编译 org.gradle.parallel=true
修改之后如图:
-
第三个:修改 build.gradle 文件 加上使用阿里云仓库,提高下载速度。
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
修改之后的截图如下:
-
第四个:gradle-wrapper.properties 编译是用自己下载后的gradle
distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists # 注释掉从网络下载发行版的代码 # distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip # 添加本地已下载的发行版 distributionUrl=file:///D:/Java/gradle-5.6.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists
修改后的截图如下:
准备构建
1.预编译spring-oxm 根据import-into-idea.md要求,导入idea之前,必须先进行spring-oxm和spring-core的预编译。进入spring-framework项目目录下,打开cmd使用命令如下:
./gradlew :spring-oxm:compileTestJava
执行命令和结果如下图:
说明: 如果中间出现错误,多执行几次,就能执行成功。
下面我把我遇到的错误都贴出来,仅供大家参考。
2.预编译 spring-core 使用命令如下:
./gradlew :spring-core:compileTestJava
执行后的截图如下:
预编译spring-core时,没有遇到错误,一次性成功。
至此,准备工作就完成了。接下来就是如何去导入到idea中,并对idea进行配置。
Idea导入Spring源码
1.下面开始使用idea导入Spring源码,File -> New -> Project from Existing Souces…
2.选择spring-framework项目
3.选择使用gradle编译,点击finish。
4.这时候,idea就会进行编译,可以先取消编译。因为我们还需要做一些提高编译速度的配置。
File -> Settings -> Gradle
5.改为配置之后,你需要手动去点击重新编译。这个编译过程会很慢,需要耐心等待。
到这儿,使用idea+gradle构建spring5.2.x源码就已经全部完成。
三、验证
废了这么大的力气,终于构建完成了,写个简单的demo测试一下。
1.在spring-framework项目下,新建我们自己的测试module,如下图:
2.选择使用gradle
3.输入自己的module名称
4.因为要验证spring项目,所以我们创建的module要依赖spring模块,我们在刚刚创建的模块下build.gradle文件中修改使用阿里云仓库,同时依赖spring-context模块。
implementation(project(":spring-context"))
修改后,如图所示:
5.刷新依赖,重新编译,大概几分钟。
6.编写一个配置类
package com.hgs.spring.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.hgs")
public class HgsConfig {
}
7.编写一个实体Bean
package com.hgs.spring.repository;
import org.springframework.stereotype.Repository;
@Repository
public class Hello {
public void hello(){
System.out.println("Hello,hgs!!");
}
}
8.编写测试类,运行,如下图:
package com.hgs.spring;
import com.hgs.spring.config.HgsConfig;
import com.hgs.spring.repository.Hello;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class TestHelloBean {
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(HgsConfig.class);
Hello hello = ac.getBean(Hello.class);
hello.hello();
}
}
四、总结
本文所有内容都来自于本人亲自实践,如果对您实实在在有帮助,点赞就是最大的帮助,如果遇到构建过程中遇到任何问题,也欢迎留言告诉我,我看到后会第一时间帮你解答。