Spring源码编译过程

版本整理:

Spring版本:5.2.0.RELEASE

JDK版本:1.8.0_151

IDEA版本:2018.2.3

Gradle:目前不需要安装,在编译完成后根据提示安装对应版本即可

一、Spring源码下载

1.进入Spring官网 https://spring.io/,跳转到页面最下方git链接,点击进入github

2.在git中进入Spring-framework仓库

3.选择要下载的Spring分支版本,推荐下载release版本,因为这种版本属于稳定版,我下载的是5.2.0.RELEASE,选择方式如下图

4.进行压缩包下载

5.此时我们Spring源码已经下载完成,解压后放到工作空间中

二、编译代码

1.添加阿里云镜像

在编译过程中,Spring会去自动下载一些依赖的包,默认使用的是官方的镜像,下载比较慢,所以我们提前添加好国内镜像,将下面这行代码粘贴到build.gradle文件中的repositories节点下即可 

maven { url "http://maven.aliyun.com/nexus/content/groups/public" }

2.预编译spring-oxm模块

打开命令行窗口,并切换到源码所在文件夹,执行以下命令

gradlew :spring-oxm:compileTestJava

出现BUILD SUCCESS字样时说明构建成功,如下图所示

注意:此处由于网络原因可能会编译失败,多试几次直到出现BUILD SUCCESS为止。

3.根据编译后的源码下载并安装对应版本Gradle

在完成对spring-oxm模块的编译后,会在当前目录生成一个.gradle文件夹,打开后可以查看对应的Gradle版本。

去Gradle官网下载对应版本Gradle并安装即可。

地址:https://gradle.org/releases/  下载binary-only即可。

安装好后记得配置Gradle的环境变量

  • 新增 GRADLE_HOME 环境变量,指向Gradle解压目录

  • 配置Path环境变量:新增 %GRADLE_HOME%\bin

之后测试是否安装成,在命令行中输入以下命令:gradle -v,查看是否正确输出了对应版本。

4.为安装好的Gradle配置国内镜像

进入Gradle安装目录,在init.d目录下新建一个init.gradle文件,并添加以下内容:

allprojects{
    repositories {
        def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
        all { ArtifactRepository repo ->
            def url = repo.url.toString()
            if ((repo instanceof MavenArtifactRepository) && (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com'))) {
                project.logger.lifecycle 'Repository ${repo.url} replaced by $REPOSITORY_URL .'
                remove repo
            }
        }
        maven {
            url REPOSITORY_URL
        }
    }
}

三、IDEA构建

1.将代码导入到IDEA中

点击Finish后等待IDEA构建完项目,如果你之前已经按照我的方法配置了Gradle的国内镜像,这个过程不会太久,我们本机只用了10多分钟就构建完成了

构建完成后整个项目结构如下:

2.构建整个项目

选择Build > Build Project

四、添加测试模块

1.创建Module

2.选择Gradle以及java

创建完成后,添加一些必要依赖:

修改创建好的模块中的build.gradle文件,添加如下三个依赖

compile(project(":spring-aop"))
compile(project(":spring-context"))
optional("org.aspectj:aspectjweaver")

3.创建测试类

创建配置类

创建任意Service

创建测试类

运行测试类,出现如下输出则证明编译成功!

 

五、过程问题整理

1.AnnotationCacheAspect找不到符号

这是因为AnnotationCacheAspect.aj 不是java文件需要另外的aspectj进行处理,可以按照以下步骤解决这个问题

  • 下载aspectj,对应链接:https://www.eclipse.org/downloads/download.php?file=/tools/aspectj/aspectj-1.9.5.jar

  • 安装aspectj

打开命令行,cd到AspectJ的jar包所在的文件夹,运行java -jar aspectj-1.9.4.jar命令,打开AspectJ的安装界面,直接点击Next,如下图:

之后一直下一步即可。

IDEA中配置aspectj

确保以下两个插件已经被**

  1. Spring AOP/@AspectJ

  2. AspectJ Support

将编译器改为 Ajc,接着设置Ajc的安装目录,选择到aspectjtools.jar,同时,一定要将Delegate to Javac选项打钩,这个代理设置的作用只对指定的项目进行Ajc编译,其他的项目还是用默认的javac编译器编译。如果不勾选这个代理选项,则全部项目都使用Ajc编译器编译,可能会导致编译错误。

  • 指定需要使用Ajc编译的项目

分别为spring-aopspring-aspects添加Facets属性。

点击File --> Project Structure --> Facets,选择spring-aop.main,点击OK

点击File --> Project Structure --> Facets,选择spring-aspects.main,点击OK

完成添加。

2.Can’t find resource for bundle java.util.PropertyResourceBundle, key kotlin.gradle.testing.enabled

这个错是idea自身的问题,没有找到kotlin.gradle.testing.enabled这个配置。

配置文件位于/idea/lib/util.jar/misc/registry.propertise

在配置文件中添加kotlin.gradle.testing.enabled=false后,重启idea即可。

3.找不到 CoroutinesUtils 类

右键spring-core/kotlin-coroutines/src/main/kotlin/org/springframework/core/CoroutinesUtils.kt文件,选择Build Modle kotlin-coroutines-main 即可。

在这里插入图片描述

本文参考:https://blog.csdn.net/hollis_chuang/article/details/107373611