本次搭建的spring版本是v5.2.6.RELEASE,我的代码仓库地址为:gitee.com/andy_yeung/… 供大家参考。
一、下载源码
- GitHub地址
建议选择下载Zip压缩包的形式先下载到本地
二、安装配置Gradle环境
因为Spring源码的构建并不是通过Maven来构建的,而是在国外比较受欢迎的Gradle , 所以,接下来我们还得要在本地安装一下Gradle ,具体选择什么版本需要根据spring中定义的gradle版本来下载,
这里spring规定的是5.6.4-bin.zip,那我们下载时也应该选择此版本下载。以下示例版本号有误,应选择5.6.4-bin下载,图示仅供参考。
1. 下载gradle
下载地址1
services.gradle.org/distributio…
all:表示附带源码的版本
bin:表示二进制版本
下载地址2
binary-only:表示附带源码的版本
complete:表示二进制版本
2. 解压gradle
解压后的目录如下所示:
3. 配置环境变量
home变量
此电脑--->属性--->高级系统设置--->环境变量--->新建系统环境变量--->确定
变量名:GRADLE_HOME
变量值:gradle安装目录
path变量
gradle_user_home变量
这个变量的值是本地依赖仓库的目录,我选用的是先前的maven本地仓库
4. 查看安装效果
可以查看到版本即安装配置成功
5. 添加配置文件
在init.d目录下新建一个init.gradle文件
文件内容如下:
allprojects {
repositories {
maven { url 'file:///D://Maven_repository_scala'} -- 本地仓库地址,注意路径分隔符不要写错为“\”
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/' }
}
}
}
6. 配置IDEA的Gradle
我的idea版本是2023.1
我本地安装了两个版本的gradle,我选用的是6.5.1版本
Gradle user home 要和环境变量的 GRADLE_USER_HOME保持一致
Local installation 是gradle解压的目录, 和GRADLE_HOME保持一致
三、修改spring项目的一些配置
在将下载好的spring源码导入IDEA之前, 我们需要修改一下Spring源码中,关于构建Gradle的一些配置,方便后续Spring源码的构建。
1. gradle.properties
改成如下所示:
version=5.2.6.RELEASE
org.gradle.jvmargs=-Xmx2048M
org.gradle.caching=true
org.gradle.parallel=true
org.gradle.daemon=true
2. settings.gradle
添加这一行
maven { url "https://maven.aliyun.com/repository/public" }
3. build.gradle
添加这两行
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
另外,注释掉这一行,因为在Gradle构建v5.2.6.RELEASE版本的Spring源码时,这个jar包可能下载不到了
四、导入IEDA
出现入下图所示即构建成功
五、上传至Gitee仓库
1. 现在gitee上创建好一个空仓库
2. 在本地项目目录下初始化本地仓库
在目录E:\IDEAWorkSpace\spring-5.2.6\spring-framework-5.2.6.RELEASE下执行 git init 来初始化本地仓库
3. 将本地仓库和远程仓库关联起来
执行命令
git remote add origin https://gitee.com/andy_yeung/spring-5.2.6-source.git
4. 添加文件到暂存区
git add .
5. 将暂存区内容添加到本地仓库中
git commit -m "这里写上提交信息"
6. 将本地仓库和远程仓库合并
git pull --rebase origin master
7. 将文件push到远程仓库
git push origin master
8. 检查远程仓库查看是否成功
六、解决spring项目编译错误
查看控制台发现编译报红
jar下载地址 repo1.maven.org/maven2/
以上报红分两类:
1. cglib和objenesis的编译错误
2. aspectj编译问题
cglib和objenesis的编译错误
1. 问题及原因
为了避免第三方class冲突,spring将最新的cglib和objenesis给重新打包了,并且在源码中未提供这一部分。所以需要导入这一缺失的jar包。
2. 问题解决
- 缺失jar引入
- 新增jar在gradle中生效
因为整个spring都在gradle环境中,所以要使得jar生效就必须更改gradle配置文件
compile fileTree(dir: 'libs' ,include: '*.jar')
aspectj编译问题
1. 问题发现
略
2. 问题解决
1. 下载Aspectj的稳定版本
1. 确保系统安装了jdk
2. 下载aspectj.jar,官网地址 [https://www.eclipse.org/aspectj/downloads.php](https://www.eclipse.org/aspectj/downloads.php)
2. Aspectj安装
在aspectj-1.9.0.jar所在文件夹下,执行java -jar aspectj-1.9.0.jar,弹出安装界面后点两次next,然后点install,即安装成功
3. 配置aspectj环境变量
aspectj_home环境变量
path环境变量
classpath环境变量
4. 查看aspectj是否安装配置成功
如下所示即成功
5. IDEA使用aspectj编译器——Ajc
安装Aspectj插件,我这里已经安装过了,不同版本的IDEA插件名称不同,2023.1版本的idea是下图所示的插件,早期idea版本需要 AspectJ Support和Spring AOP/@AspectJ插件
6. 安装此插件后编译插件里才有了Ajc
7. 为spring-aspectj添加Facets属性
8. 更改编译器
七、至此大功告成
到这里,我们已经完成了整个spring环境搭建工作,还有一些单测类的错误已经不影响阅读源码了,没有必要浪费时间去解决。