使用工具:JDK1.8.0_11、Gradle4.9、idea2018.1.3

1. 配置Gradle

  Gradle下载地址:https://gradle.org/releases/

  在下载页找到自己需要的版本,点击“binary-only”,只下载运行包。

  注意:不建议下载比较新的gradle版本,可能使用时会有各种冲突,我选择的是v4.9。

  下载后的压缩包:gradle4.9-bin.zip

  解压压缩包

  配置环境变量:右键计算机->属性->高级系统设置->环境变量,在系统变量区域,点击新建,输入变量名为:GRADLE_HOME,变量值为:D:\Software\Gradle\gradle-6.1.1(根据实际情况)。找到Path,在原始内容基础上加入%GRADLE_HOME%\bin;,必须以分号结束。

  最后重新打开cmd命令行,输入:gradle -v  检查是否配置成功。

2. 下载Spring源码

   Git地址:https://github.com/spring-projects/spring-framework

  下载地址:https://codeload.github.com/spring-projects/spring-framework/zip/5.1.x

  打开这个地址,当前最新的版本是的Spring5.1.x版本的源码地址,如果要下载其他版本,可以点击红框处修改。

  点击Clone or download 下载Spring的zip压缩包。

3. Idea导入Spring源码

  1. 打开Idea,选择File---> New --> Project form Existing Sources

  

  2. 选择要导入的spring-framework-5.0.x源码项目

  3. 选择使用Gradle项目

  4. 设置导入参数

  选择"Use auto-import",表示同时下载相关依赖。

  选择"Use local gradle distribution",表示引用本地的Gradle Home,选择安装的本地文件目录。

  在"Gradle VM options:" 官方推荐在编译时把内存设置成2048M,内容: -XX:MaxPermSize=2048m -Xmx2048m -XX:MaxHeapSize=2048m

  选择"OK",Idea就会自动编译,如下图:

  这个过程只能算是下载编译时需要的依赖包,并不算真正的编译,整个过程根据网络情况时间不同,大概1个小时左右。依赖下载成功后的样子是这样的。

4. 导入时的常见错误

4.1 Uninitialized object exists on backward branch 365

  出现这个错误,在网上翻阅了一些资料,都说是与JDK版本冲突造成的。

  方案1:换其他版本的JDK挨个试。

  方案2:点击“Open File”,会打开如下文件build.gradle文件,指定到我当前的第15行内容。把org.jetbrains.dokka的version的版本改小,再保存尝试编译,我改到0.9.15的时候才能正常编译。

  

4.2 Uninitialized object exists on backward branch 129

  这个错误我是编译5.0.x版本的Spring源码出现的,这次报错的插件是kotlin,同样需要打开build.gradle文件,修改第14行org.jetbrains.kotlin.jvm的版本,我是改成了1.2.61可以正常编译5.0.x版本的。

4.3 No such property

  点击“Open File”,会打开如下文件spring-beans.gradle文件,把下面第28行代码注掉。

4.  编译代码

  在上面都执行完毕之后,只是完成了依赖包的下载,还没有真正的编译。在源码包的根目录下有个描述文件import-into-idea.md,大概意思是需要先编译spring-core和spring-oxm,这是其他模块的依赖,spring-aspects在编译时会报错,但不影响。

  1. 首先编译核心项目spring-core、spring-beans、spring-context、spring-oxm,(尽量按照这个顺序执行,编译完核心包之后,其他的项目编译顺序就无所谓了)打开要编译的项目的test目录,在org.spring.framework路径上右击,选择“Run 'Test' in 'springframework'”

  2. 错误1:我在执行test的之后还报错了,错误如下:

  解决办法:这个主要是Kotlin插件的版本问题,解决方案是更新新版本的Kotlin插件。在idea 工具中File->Settings->Plugins输入Kotlin更新。插件更新之后要重启idea。

     错误2:在运行测试用例时可能会提示cglib包找不到的问题

  解决办法:在spring framework目录下执行gradle命令:

gradle objenesisRepackJar
gradle cglibRepackJar

  这样就会下载包括cglib相关的依赖的了。

  错误3:spring-oxm的特使用例,缺少Flights、Flight对象,这两个对象就是在测试用例目录的,就是没有,把这几个报错类注掉吧

  3. 再次执行Run 'Tests' in 'springframework',等待直接结束,可能偶给别tests方法执行失败,可以忽略不计。(注意:如果运行时提示一些类找不到,可以先把错误的类注掉)

  4. 执行Run Tests结束后,项目中会显示out文件夹,存放的是编译后的class文件。

  5. 按照此方法,依次编译其他项目,至此,Spring源码编译完毕。

5. 测试

  编译完成之后,在spring源码项目新建一个Module,选择gradle类型。

  在新项目里的build.gradle文件中引用spring其他模块,如下:

dependencies {
compile project(":spring-context")
compile project(":spring-core")
compile project(":spring-beans")
testCompile group: 'junit', name: 'junit', version: '4.12'
}

  编写测试代码,我这里包括三个类:1个dao,一个config,一个启动类

@Repository
public class IndexDao { public void query(){
System.out.println("IndexDao query");
}
} @Configuration
@ComponentScan("dao的路径")
public class AppConfig { } public class Test { public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
IndexDao dao = context.getBean(IndexDao.class);
dao.query();
} }

  查看Test类是否能正常运行,并查看运行结果,如果运行结果是IndexDao query,则证实Spring源码完全编译成功。

Gradle编译Spring源码的更多相关文章

  1. 记一次Idea+Gradle编译Spring源码遇到的坑

    打算开始研究Spring源码,于是照着书上的指导从网上下载了Spring5.0.2版本和Gradle4.0(必须JDK1.8.60以上),本地编译的时候没有任何问题,就是导入Idea的时候一直报下面这 ...

  2. spring源码系列(一)sring源码编译 spring源码下载 spring源码阅读

    想对spring框架进行深入的学习一下,看看源代码,提升和沉淀下自己,工欲善其事必先利其器,还是先搭建环境吧. 环境搭建 sping源码之前是svn管理,现在已经迁移到了github中了,新版本基于g ...

  3. 编译Spring源码

    近期,学习Spring源码.会陆续记录这次学习历程. Spring源码下载,环境中需要准备好的东西,git,gradle,eclipse (需要自己安装好) 1.Git clone Spring源码: ...

  4. grable编译spring源码并导入eclipse

    1.下载安装gradle, spring 源码构建加入了gradle支持. gradle下载: http://www.gradle.org/downloads ,下载后设置环境变量: GRADLE_H ...

  5. 1.编译spring源码

    本文是作者原创,版权归作者所有.若要转载,请注明出处 下载spring源码,本文用的是版本如下: springframework 5.1.x,   IDE工具idea 2019.2.3    JAVA ...

  6. gradle 编译kafka源码慢

    我前提已经在环境变量中将GRADLE_HOME设置到了gradle的目录(在E盘),并且在环境变量里设置了本地仓库GRADLE_USER_HOME. 编译kafka源码时候,很慢很慢.百度了一下,有说 ...

  7. 修改和编译spring源码,构建jar(spring-context-4.0.2.RELEASE)

    上周在定位问题时,发现Spring容器实例化Bean的时候抛出异常,为了查看更详细的信息,决定修改spring-context-4.0.2.RELEASE.jar中的CommonAnnotationB ...

  8. 如何编译spring源码,并导入到eclipse中

    wsc@WSC-PC /d/wsc/study-spring-source$ git clone https://github.com/spring-projects/spring-framework ...

  9. gradle 构建spring源码时候报错

    这是使用jdk1.7报的错,我卸载1.7后使用1.8 ,就可以了

随机推荐

  1. 我终于弄懂了Python的装饰器(一)

    此系列文档: 1. 我终于弄懂了Python的装饰器(一) 2. 我终于弄懂了Python的装饰器(二) 3. 我终于弄懂了Python的装饰器(三) 4. 我终于弄懂了Python的装饰器(四) 一 ...

  2. 二分查找&二叉排序树

    首先我们先来复习一下二分查找的算法 对于正向序列的二分查找 递归实现: bool binary_search(vector<int> &sort_arry,int begin,in ...

  3. java 面向对象(三十五):泛型在继承上的体现

    泛型在继承上的体现: /* 1. 泛型在继承方面的体现 虽然类A是类B的父类,但是G<A> 和G<B>二者不具备子父类关系,二者是并列关系. 补充:类A是类B的父类,A< ...

  4. 数据可视化基础专题(十一):Matplotlib 基础(三)常用图表(一)折线图、散点图、柱状图

    1 折线图 折线图主要用于表现随着时间的推移而产生的某种趋势. cat = ["bored", "happy", "bored", &quo ...

  5. 微信小程序随手笔记

    1.全局导入vant时build后有问题(只能页面引入) 2.微信小程序只能用:https开头,在微信公众号里还要修改下配置 3.微信小程序里textarea与vant的van-popup有问题,手机 ...

  6. 使用MapReduce运行WordCount案例

    @ 目录 一.准备数据 二.MR的编程规范 三.编程步骤 四.编写程序 Mapper程序解读 一.准备数据 注意:准备的数据的格式必须是文本,每个单词之间使用制表符分割.编码必须是utf-8无bom ...

  7. redis linux开机启动 (简单高效)

    1. 在edis下载文件包中找 redis/utils 找到redis_init_script 将它拷贝到  /etc/init.d 目录并重命名为redis cd redis cd utils mv ...

  8. QQ音乐Android客户端Web页面通用性能优化实践

    QQ音乐 Android 客户端的 Web 页面日均 PV 达到千万量级,然而页面的打开耗时与 Native 页面相距甚远,需要系统性优化.本文将介绍 QQ 音乐 Android 客户端在进行 Web ...

  9. Python numpy 浮点数精度问题

    Python numpy 浮点数精度问题 在复现FP(fictitious play, Iterative solution of games by fictitious play-page393)算 ...

  10. 12C oracle 12.1.0.2版本打补丁

    从support  1454618.1文档 中可以下载到各版本的补丁和PSU. 此次采用的是28349311 版本号的psu 和28440711 版本号的jvm.opatch版本号6880880_12 ...