所有分类
  • 所有分类
  • 实时新闻

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

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

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

话不多说,我们开始正题

参考官方文档:

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

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

前期准备

  1. 确保本机已经安装好了git
  2. jdk对应版本为1.8
听说你还没学Spring就被源码编译劝退了?30+张图带你玩转
  1. Gradle,目前不需要安装,在编译的时候根据源码提示按照对应版本的Gradle即可
  2. IDEA,我使用的版本如下:
听说你还没学Spring就被源码编译劝退了?30+张图带你玩转

1、获取Spring源码

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

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

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

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

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

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

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

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

gitcheckout origin/5.2.x

2、添加阿里云镜像

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

//添加阿里云镜像

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

如下图所示

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

3、预先编译spring-oxm模块

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

gradlew:spring-oxm:compileTestJava

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

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

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

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

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

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

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

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

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

  • 新增 GRADLE_HOME 环境变量,指向Gradle解压目录
  • 配置Path环境变量:新增 %GRADLE_HOME%\bin

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

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

5、为安装好的Gradle配置国内镜像

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

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

如下图所示:

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

6、将代码导入到IDEA中

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

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

6.2、选择导入一个Gradle项目

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

6.3、配置导入的项目

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

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

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

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

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

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

7、构建整个项目

选择Build > Build Project

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

可能出现的问题

AnnotationCacheAspect找不到符号

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

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

这是因为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,如下图:

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

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

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

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

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

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

  1. Spring AOP/@AspectJ
  2. AspectJ Support
听说你还没学Spring就被源码编译劝退了?30+张图带你玩转

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

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转
  • 指定需要使用Ajc编译的项目

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

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

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

完成添加,如下图所示:

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

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

8、添加测试模块

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

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

8.2、选择Gradle及Java

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

8.3、输入模块名称

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

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

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

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

如下图所示:

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

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

作者:程序员DMZ

原文链接:https://daimingzhi.blog.csdn.net/article/details/107101967

原文链接:https://www.w1ym.com/82531/,转载请注明出处~~~
0

评论0

请先

站点公告

【温馨提示】 本站不建议您对本站支付任何费用或开通任何会员本站99%资源为免费资源只提供共享不提供技术支持,本站资源主要以学习开发为主,本站是为个人资源记录学习研究等情况而建立,如特殊原因下载,需在24小时删除相关资源。本站资源均来自互联网收集或网友分享,若有侵权,请联系站长删除,谢谢。立即查看
显示验证码
没有账号?注册  忘记密码?