使用工具: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. ATM + 购物车项目

    ''' 存放配置文件 ''' import os #获取项目根目录 BASE_PATH=os.path.dirname(os.path.dirname(__file__)) #获取用户目录 USER_ ...

  2. VSCode下,项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

    vscode下webpack错误:无法将“webpack”项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次. 解决方法: 1.因为 ...

  3. python 面向对象专题(三):继承

    目录 Python面向对象03 /继承 1. 初识继承 2. 单继承 3. 多继承 4. 总结 1. 初识继承 概念:专业角度:如果B类继承A类,B类就称为子类,派生类,A类就称为父类,超类,基类 种 ...

  4. 使用Typora写博客,图片即时上传,无需第三方图床-EasyBlogImageForTypora

    背景 习惯使用markdown的人应该都知道Typora这个神器,它非常简洁高效.虽然博客园的在线markdown编辑器也不错,但毕竟是网页版,每次写东西需要登录系统-进后台-找到文章-编辑-保存草稿 ...

  5. unity-TextAsset

    定义: 当把Text files导到unity,将会变成TextAsset. 支持的格式: .txt .html .htm .xml .bytes .json .csv .yaml .fnt 注意 不 ...

  6. 解决使用resin服务器Unsupported major.minor version 51.0错误

    是因为jdk版本不对,更换成需要的版本

  7. OSCP Learning Notes - Exploit(6)

    Antivirus Bypassing Tools: Kali Linux Detection Platform: https://www.virustotal.com/gui/home/upload ...

  8. 自已动手作图搞清楚AVL树

    @ 目录 一.背景 二.平衡二分搜索树---AVL树 2.1 AVL树的基本概念 结点 高度 平衡因子 2.2 AVL树的验证 三.旋转操作 3.1 L L--需要通过右旋操作 3.2 R R--需要 ...

  9. Redis(一)简介及安装、测试

    一.Redis简介: 关于关系型数据库和nosql数据库 关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据 库是基于特殊的结构,并将数据存储到内存的数据库.从性能上而言, ...

  10. 【新生学习】第一周:深度学习及pytorch基础

    DEADLINE: 2020-07-25 22:00 写在最前面: 本课程的主要思路还是要求大家大量练习 pytorch 代码,在写代码的过程中掌握深度学习的各类算法,希望大家能够坚持练习,相信经度过 ...