在构建spring源码的过程中,碰到了很多的问题,网上搜索了很多的教程,没有一个能构建成功的。。。下面总结下一下自己的经验。
(一)环境准备
1、 Idea 2018.3.5
2、gradle 5.6
gradle下载完之后,设置环境变量,如下:GRADLE_HOME和GRADLE_USER_HOME(用于存放下载的jar)
win+r,输入cmd点击回车,执行命令gradle -version
这样就设置成功了;
试过很多版本,这一套版本构建没出现问题。可能每个人情况不一样
(二)下载
方式一: spring的源码是由github版本控制器来管理,所以直接使用git直接clone Spring源码到本地:git clone git://github.com/SpringSource/spring-framework.git(不会的百度下,git怎么下载,我平常使用svn,git接触的少)
方式二:github网站下载,下载5.0x或者5.1版本,其中5.0x更加稳定
https://github.com/spring-projects/spring-framework
(三)编译
打开 spring-framework-master文件夹下的文件import-into-idea.md
在spring-framework-master的路径下打开cmd,执行命令 gradlew :spring-oxm:compileTestJava ,构建就会开始。因为会下载jar,需要的时间会比较久,可以使用科学的上网工具。中间由于网络问题,可能会失败几次,多执行几次命令就可以了。
出现红框中的内容就是成功了,下面的报错不用管,是git的问题。
(四)导入idea
1、选择gradle
2、
(五)修改文件
打开gradle下的docs.gradle文件
1、注释方法 dokka
2、注释方法asciidoctor
3、修改方法task schemaZip为下面的内容(spring是在linux是开发的,路径和windows的不一样,因此需要需改这个方法。不改百分之99会报错)
task schemaZip(type: Zip) {
group = "Distribution"
baseName = "spring-framework"
classifier = "schema"
description = "Builds -${classifier} archive containing all " +
"XSDs for deployment at https://springframework.org/schema."
duplicatesStrategy 'exclude'
moduleProjects.each { subproject ->
def Properties schemas = new Properties();
subproject.sourceSets.main.resources.find {
//这的路径需要改为\\
it.path.endsWith("META-INF\\spring.schemas")
}?.withInputStream { schemas.load(it) }
for (def key : schemas.keySet()) {
def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1')
assert shortName != key
File xsdFile = subproject.sourceSets.main.resources.find {
//这里需要进行路径替换
it.path.endsWith(schemas.get(key).replaceAll('\\/','\\\\'))
}
assert xsdFile != null
into (shortName) {
from xsdFile.path
}
}
}
}
``3、`右侧gradle(没有的百度下),双击spring-oxm下的compileTestJava

4、上一步执行成功之后,执行下面步骤

执行成功之后,就表示构建差不多成功了
(六)测试
找到DispatcherServletTests.java,运行一下,如果没有报错,那么恭喜你,你构建成功了,就可以开心的往下玩耍了,不过一般不会一次成功,经常会报错找不到某个类。
解决办法参考下面的问题解决

(七)问题
1、说明
项目的路径不能存在中文、特殊字符和空格。很多莫名其妙的问题都是这个导致的,需要特别注意
2、nohttpProxy
这个问题是没有设置代理,可能需要科学上网工具了,能科学上网后

3、导入spring源码spring-core报错,在org.springframework.core.ReactiveAdapterRegistry中报错:
这个是缺少依赖导致的,需要添加依赖---》File--Project Structure---点击左上角+
kotlin-coroutines-5.2.3.BUILD-SNAPSHOT.jar位于spring-core\kotlin-coroutines\build\libs
其他缺少包的也可以这样做,少那个就添加哪个


写在最后:
有问题,欢迎留言。我们共同解决。