Spring5源码环境搭建

202 阅读4分钟

本次搭建的spring版本是v5.2.6.RELEASE,我的代码仓库地址为:gitee.com/andy_yeung/… 供大家参考。

一、下载源码

  1. GitHub地址

github.com/spring-proj…

建议选择下载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

gradle.org/releases/

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上创建好一个空仓库

仓库地址:gitee.com/andy_yeung/…

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. 问题解决

  1. 缺失jar引入

地址:gitee.com/andy_yeung/…

  1. 新增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环境搭建工作,还有一些单测类的错误已经不影响阅读源码了,没有必要浪费时间去解决。