听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

栏目: IT技术 · 发布时间: 4年前

内容简介:源码学习第一步,Spring源码编译之所以写这么一篇文章是因为群里的小伙伴在编译源码时碰到了问题,再加上笔者自身正准备做一个源码的注释版本,恰好也需要重新编译一份代码,至于为什么要将源码编译到本地就不用多说了吧?比如,你可以任意的添加注释,一边读源码一边记笔记,甚至你可以修改源码,更好的调试程序等等。但是如果你坚持通过导入依赖或者引入jar包的方式来学习源码,我觉得也可以,没有最好的,只有最适合自己的!

源码学习第一步,Spring源码编译

之所以写这么一篇文章是因为群里的小伙伴在编译源码时碰到了问题,再加上笔者自身正准备做一个源码的注释版本,恰好也需要重新编译一份代码,至于为什么要将源码编译到本地就不用多说了吧?

比如,你可以任意的添加注释,一边读源码一边记笔记,甚至你可以修改源码,更好的调试程序等等。但是如果你坚持通过导入依赖或者引入jar包的方式来学习源码,我觉得也可以,没有最好的,只有最适合自己的!

本文的主要目的是帮助那些在源码学习之初就被源码编译劝退的同学重拾信心!

话不多说,我们开始正题

参考官方文档:

https://github.com/spring-projects/spring-framework/wiki/Build-from-Source

https://github.com/spring-projects/spring-framework/blob/master/import-into-idea.md

前期准备

git
jdk

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

  1. Gradle ,目前不需要安装,在编译的时候根据源码提示按照对应版本的 Gradle 即可
  2. IDEA ,我使用的版本如下:

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

1、获取Spring源码

这里我推荐使用clone的方式将源码拉取到本地,最大的好处在于可以利用IDEA直接比较版本间的差异,例如

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

在上图中我本地编译的 5.0 版本的代码,所以我对比的是 5.05.1 版本 populateBean 方法实现的差异。

接下来我们开始拉取Spring源码,大家可以按照以下几步进行

  1. 在任意磁盘路径下新建一个文件夹,名称随便取,建议为 SpringFramWork
  2. 进入 SpringFramWork 文件夹中,打开 git 命令行,输入以下命令
git clone https://github.com/spring-projects/spring-framework.git

接着等待仓库克隆完毕,这个过程可能会耗费比较长的时间,如果实在不行的话,大家可以直接将源码的压缩包down下来。

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

如果你是跟我一样直接拉取的代码,记得切换到 5.2.x 版本,在命令行中执行命令:

git checkout origin/5.2.x

2、添加阿里云镜像

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

//添加阿里云镜像
maven { url "http://maven.aliyun.com/nexus/content/groups/public" }

如下图所示 听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

3、预先编译spring-oxm模块

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

gradlew :spring-oxm:compileTestJava

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

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

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

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

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

双击打开 .gradle 文件夹就能看到对应所需要的 gradle 的版本号

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

大家直接在这个网站上下载对应所需要的版本即可: https://gradle.org/releases/,选择 binary-only

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

GRADLE_HOME
%GRADLE_HOME%\bin

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

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

5、为安装好的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
        }
    }
}

如下图所示:

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

6、将代码导入到IDEA中

6.1、打开IDEA并选择导入项目

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

6.2、选择导入一个Gradle项目

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

6.3、配置导入的项目

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

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

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

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

如果你跟我一样是直接检出的代码,记得将分支切换到 5.2.x

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

7、构建整个项目

选择Build > Build Project

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

可能出现的问题

AnnotationCacheAspect找不到符号

在这个过程中你可能会碰到如下错误:

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

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

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

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

接着选择 jdk 的安装路径,继续Next。

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

接着选择 AspectJ 的安装路径,然后Install安装。

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

  • IDEA中配置 aspectj

确保以下两个插件已经被激活

  1. Spring AOP/@AspectJ

  2. AspectJ Support

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

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

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

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

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

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

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

完成添加,如下图所示:

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

完成上述步骤后,再次选择 Build > Build Project ,成功完成编译

8、添加测试模块

8.1、右键工程名 ---> new ---> module

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

8.2、选择Gradle及Java

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

8.3、输入模块名称

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

点击next ---> Finish 完成测试模块的创建

最后,添加一些必要的依赖,修改创建好的模块中的 build.gradle 文件,添加如下三个依赖

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

如下图所示:

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

至此,我们就完成了整个Spring的编译,并且在创建了一个日后学习使用的模块!

如果本文对你有帮助的话,记得点个赞吧!也欢迎关注我的公众号,微信搜索:程序员DMZ,或者扫描下方二维码,跟着我一起认认真真学Java,踏踏实实做一个coder。

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

嵌入式系统软件设计中的常用算法

嵌入式系统软件设计中的常用算法

周航慈 / 2010-1 / 24.00元

《嵌入式系统软件设计中的常用算法》根据嵌入式系统软件设计需要的常用算法知识编写而成。基本内容有:线性方程组求解、代数插值和曲线拟合、数值积分、能谱处理、数字滤波、数理统计、自动控制、数据排序、数据压缩和检错纠错等常用算法。从嵌入式系统的实际应用出发,用通俗易懂的语言代替枯燥难懂的数学推导,使读者能在比较轻松的条件下学到最基本的常用算法,并为继续学习其他算法打下基础。 《嵌入式系统软件设计中的......一起来看看 《嵌入式系统软件设计中的常用算法》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具