1、构建初始化工作
相关软件版本必须一致,否则会产生各种不必要的错误等
- JDK 1.8
- Gradle-5.6.4(可以查看gradle/wrapper/gradle-wrapper.properties文件中配置的版本,官方提供的是radle-5.6.4)
- IntelliJ IDEA 2019.1 x64 以上(其他版本没试过)
2、构建spring源码到本地
(1)拉取项目源码
将源码拉取或下载到本地
(2)使用本地gradle
目的是为了不需要再次下载gradle,我这里把gradle-5.6.4-bin.zip
的安装包放在了gradle的安装目录下
(3)执行gradle.bat
项目根目录输入cmd,执行gradle.bat命令
(3)idea导入项目
导入项目,使用本地gradle
导入之后,刷新gradle,应该要很长时间,一定要网很好的地方刷新,不然总是报错,多刷新几次
(4)预编译spring-oxm
这一步是官方给出的导入步骤,使用./gradlew :spring-oxm:compileTestJava
预编译spring-oxm
(5)修改dosc.gradle
在编译之前还需要对spring-framework-5.2.8.RELEASE/gradle/dosc.gradle
文档进行修改,因为有些注释,文件路径在编译时需要调整
(6)添加AspectJ编译
问题原因是spring源码的AOP使用了aspectJ ,而java不识别aspectJ
用迅雷下载(因为快)AspectJ:https://www.eclipse.org/aspectj/downloads.php
java -jar aspectj-1.9.6.jar
运行下载的jar进行安装
ctrl + alt + shift + s
添加两个
- AspectJ(spring.spring-aop.main)
- AspectJ(spring.spring-aspects.main)
添加之后的效果
修改AspectJ编译的方式
(7)修改spring-core缺失jar
spring-core缺少spring-cglib-repack-3.3.0.jar,spring-objenesis-repack-3.1.jar
找到 Gradle>spring-core>Tasks>other下面的两个工具,双击运行
把原来报错的两个jar删除,保留新导入的本地jar即可,效果图如下
(8)解决SingletonTargetSource找不到
首先,打开类spring-aop\src\main\java\org\springframework\aop\framework\AopProxyUtils.java
发现报错,
报错找不到import org.springframework.aop.target.SingletonTargetSource;
,网上没人解决这个问题,我是和同时讨论之间找到解决方法的。
在Windows下查看该目录spring-aop\src\main\java\org\springframework\aop\target
是存在的,但是在idea中显示不出来
解决方法:File–>Settings–>Editor–>File Types–>右边Ignore files and folders找到target文件名去掉即可
这时,target目录出来了,但是变成了灰色,修改项目根目录下的.gitignore
注释掉target/
,文件则可正常使用
(9)构建spring源码
看侧边栏就知道,这个过程比较漫长,我时间短是因为clean之后构建过好几次
如果报错
随便找一个maven项目,把下面的坐标放进去,刷新maven,让本地仓库有这个jar包即可
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.9.5</version>
</dependency>
3、创建测试模块
添加spring核心依赖,compile(project(":spring-context"))
如有报错,则根据以下报错汇总解决即可
4、报错问题汇总
(1)报错:找不到CoroutinesUtils
找到spring-core\kotlin-coroutines\build\libs\kotlin-coroutines-5.2.8.RELEASE.jar
,右键 Add As Library,然后点开IDEA上方工具栏,Build - Rebuild Project,没有效果则关闭项目重新打开再点击Rebuild Project,简单粗暴
(2)报错:缺少spring-cglib-repack-3.3.0.jar,spring-objenesis-repack-3.1.jar
spring-core缺少spring-cglib-repack-3.3.0.jar,spring-objenesis-repack-3.1.jar
找到 Gradle>spring-core>Tasks>other下面的两个工具,双击运行
把原来报错的两个jar删除,保留新导入的本地jar即可,效果图如下
(3)报错:Error:(354, 51) java: 找不到符号 符号: 变量 CoroutinesUtils
找到spring-core\kotlin-coroutines\build\libs\kotlin-coroutines-5.2.8.RELEASE.jar
,右键 Add As Library,然后点开IDEA上方工具栏,Build - Rebuild Project,没有效果则关闭项目重新打开再点击Rebuild Project,简单粗暴
或者执行以下操作,实际上是一样的效果, 就是将jar添加到模块中
(4)报错:Aspectj Error:(38, 38) java: 程序包org.springframework.aop.target不存在
问题原因是spring源码的AOP使用了aspectJ ,而java不识别aspectJ
用迅雷下载(因为快)AspectJ:https://www.eclipse.org/aspectj/downloads.php
java -jar aspectj-1.9.6.jar
运行下载的jar进行安装
ctrl + alt + shift + s
添加两个
- AspectJ(spring.spring-aop.main)
- AspectJ(spring.spring-aspects.main)
添加之后的效果
修改AspectJ编译的方式
(5)报错:找不到 import org.springframework.aop.target.SingletonTargetSource;
首先,打开类spring-aop\src\main\java\org\springframework\aop\framework\AopProxyUtils.java
发现报错,
报错找不到import org.springframework.aop.target.SingletonTargetSource;
,网上没人解决这个问题,我是和同时讨论之间找到解决方法的。
在Windows下查看该目录spring-aop\src\main\java\org\springframework\aop\target
是存在的,但是在idea中显示不出来
解决方法:File–>Settings–>Editor–>File Types–>右边Ignore files and folders找到target文件名去掉即可
这时,target目录出来了,但是变成了灰色,修改项目根目录下的.gitignore
注释掉target/
,文件则可正常使用
5、其他相关项目整理
(1)强迫症修改项目名与配置名相同
我们这里可以看到,后面的名字和项目名字不同,这里统一处理以下,将右侧的rootProject.name修改为以下值
rootProject.name = "spring-framework-5.2.8.RELEASE"
刷新完成之后,强迫症消失了
(2)上传项目到github/码云
先使用github/码云创建仓库地址,然后拿到仓库地址,例如:
https://github.com/Tellsea/spring-framework-5.2.8.RELEASE.git
把项目构建成git仓库
现在所有文件为红色,然后通过右键项目名,git,add,把所有文件变成绿色
然后提交文件到缓存区,过程可能慢一点,因为文件数量有点大
提交到缓存区之后,本地文件变成白色,但是线上的代码仓库还没有代码,我们还需要将缓存区提交到线上
填写第一步创建的线上仓库地址,然后点击提交即可