本文将粗略的搭建一个Spring源码的阅读环境,为后面的源码阅读做一个准备。做任何事情不管是有一个完美的或者是不太完美的开头,只要去做了,那么就是一种胜利。

由于spring使用了gradle构建工具,接下来先安装gradle。

安装gradle

  • 从Gradle官网下载gradle安装包,打开https://gradle.org/releases/

  • 将下载的安装包gradle-x.x.x-all.zip解压到当前目录

  • 环境变量配置
    • 配置GRADLE_HOME

    • 配置Path

  • 打开目录行工具,输入gradle -v,能看到gradle的版本信息表示安装已经成功

导入Spring源码

Spring在github上的仓库地址是:https://github.com/spring-projects/spring-framework,本文不会直接去github上去下载源码,网速实在太慢。本文使用的码云上Spring仓库的镜像,该镜像每日同步一次,地址是https://gitee.com/mirrors/Spring-Framework

  • 从git导入项目

  • 填写要克隆的git仓库信息,可以点击右边的【Test】按钮测试,等待仓库克隆完成

  • 打开导入的Spring项目

  • 从gradle导入Spring项目,等待gradle build完成



    注意:

    • 上面使用的是本地自己安装的gradle。
    • idea中gradle默认的服务目录路径是用户目录下的.gradle目录,对于Administrator用户,对应的目录是C:\Users\Administrator\.gradle。该目录占用的空间一般比较多,所以在这里将这个目录放到其他的盘中。
  • 构建完成后报错如下(只列出了一部分):

...
Error:(63, 30) java: cannot find symbol
symbol: class Signature
location: class org.springframework.cglib.core.KeyFactory
...
location: class org.springframework.cglib.proxy.Enhancer
Error:(152, 30) java: cannot find symbol
...

spring未了避免与cglib和objenesis冲突,将cglib和objenesis相关的包重新repack到org.springframework.cgliborg.springframework.objenesis包中,这部分的代码没有包含到源码当中。构建之前,可以通过添加Gradle任务来解决,见:https://github.com/spring-projects/spring-framework/blob/master/import-into-idea.md#known-issueshttps://youtrack.jetbrains.com/issue/IDEA-160605

解决办法如下:

  • 在idea中打开Gradle面板

  • 在右侧的Gradle面板Spring -> Tasks -> other -> cglibRepackJar

  • 激活任务

  • 选择要激活的cglibRepackJar任务

  • 重新构建项目(花费的时间较长)

创建测试模块my-test

为了方便编写测试spring的代码,在spring-framework单独新建一个模块my-test

  • 右键spring-framework项目->New->Module...

  • 输入ArtifactId: my-test

  • 一路下一步,最后点击完成,新的模块就建好了

  • 添加依赖:api(project(":spring-context"))

  • 为了能让my-test自动导入相关的依赖,在Gradle面板中右键spring节点

  • 在my-test模块中编写程序测试

    • 创建MyApplication

      package com.zfx;
      
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.support.ClassPathXmlApplicationContext; public class MyApplication { public static void main(String[] args) {
      ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
      Hello hello = (Hello)ac.getBean("hello");
      hello.sayHello();
      } }
    • 在resources目录下新建applicationContext.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="hello" class="com.zfx.Hello"></bean> </beans>
    • 新建Hello

      package com.zfx;
      
      public class Hello {
      
      	public void sayHello() {
      System.out.println("Hello, zhangfengxian");
      } }
    • 运行MyApplication,可以看到控制台输出:Hello, zhangfengxian

  • 至此整个环境算是搭建好了

其他问题

spring-aspects模块构建时报错

解决办法一:排除spring-aspects模块

在工具栏点击File -> Project Structure...



解决办法二:使用Acj或者Eclipse编译

在工具栏点击File -> Settings...



此问题的相关链接:

本文思维导图

Spring源码阅读环境搭建的更多相关文章

  1. Sping学习笔记(一)----Spring源码阅读环境的搭建

    idea搭建spring源码阅读环境 安装gradle Github下载Spring源码 新建学习spring源码的项目 idea搭建spring源码阅读环境 安装gradle 在官网中下载gradl ...

  2. 搭建 Spring 源码阅读环境

    前言 有一个Spring源码阅读环境是学习Spring的基础.笔者借鉴了网上很多搭建环境的方法,也尝试了很多,接下来总结两种个人认为比较简便实用的方法.读者可根据自己的需要自行选择. 方法一:搭建基础 ...

  3. Spring5源码阅读环境搭建-gradle构建编译

      前沿:Spring系列生态十分丰富,涉及到各个方面.但是作为Spring生态的核心基础Spring,是最重要的环节,需要理解Spring的设计原理,我们需要解读源码.   在构建Spring源码阅 ...

  4. 基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建

    基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建 作者:Awesome 日期:2017-10-21 需准备的软件工具 Ardupilot飞控源码 PX4 toolchain JAVA ...

  5. Hadoop源码阅读环境搭建(IDEA)

    拿到一份Hadoop源码之后,经常关注的两件事情就是 1.怎么阅读?涉及IDEA和Eclipse工程搭建.IDEA搭建,选择源码,逐步导入即可:Eclipse可以选择后台生成工程,也可以选择IDE导入 ...

  6. Spring 源码阅读环境的搭建

    前言 本文记录了 Spring 源码环境的搭建方式,以及踩过的那些坑!​当前版本:5.3.2-SNAPSHOT. 环境准备 Git JDK master 分支需要 JDK 11 5.2.x 分支, J ...

  7. Spring源码分析_01_ idea搭建spring源码阅读环境

    二.参考资料 1.Intellij Idea如何导入spring源码

  8. idea构建spring源码阅读环境

    注:由于文章不是一次性完成,下文中的test1目录和test目录应为同一个目录. (一)安装git和Gradle Spring项目托管在github之上,基于Gradle来构建项目.所以要想搭建Spr ...

  9. spring-framework-4.1.x源码阅读环境搭建(导入Eclipse)

    注意:搭建spring-framework-4.1.x源码 eclipse工作空间需要安装jdk8. spring-framework-4.1.x项目采用目前主流的项目管理工具gradle进行构建,至 ...

随机推荐

  1. JavaWEB开发05_Bootstrap

    上次课内容:什么JQ : write less do more 写更少的代码,做更多的事情 javascript函数库 基本选择器: ​ ID选择器: #ID名称 ​ 类选择器: .类名 ​ 元素选择 ...

  2. 【leetcode】1253. Reconstruct a 2-Row Binary Matrix

    题目如下: Given the following details of a matrix with n columns and 2 rows : The matrix is a binary mat ...

  3. PDFtk:PDF文件处理

    造冰箱的大熊猫@cnblogs 2018/9/12 使用PDFtk很多年了,今天得空把相关内容整理总结一下. 1.PDFtk能干什么 - 是否想把两个PDF文档合并到一起 - 是否想从PDF文档中摘出 ...

  4. 在$scope中变量和方法的使用

    代码: angularjs.html <!doctype html> <html> <head> <meta charset="UTF-8" ...

  5. Confluence 6 Office 和 PDF 文件

    插入一个文件到页面中是能够让你将有用的文件,电子表格,幻灯片或者其他可用的文件在你小组中进行分享的好方法. 针对所有的文件类型,你可以选择以链接方式插入一个文件.缩略图将会对文档的内容进行预览同时可以 ...

  6. poj 2559 Largest Rectangle(单调栈)

    Largest Rectangle in a Histogram Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26549 ...

  7. Python argparse 用法总结

    使用argparse的四个基本步骤 创建 ArgumentParser() 对象 调用 add_argument() 方法添加参数 使用 parse_args() 解析添加的参数 # example ...

  8. 3.1 JAVA集合框架以及区别

    涉及的参考链接:https://www.runoob.com/java/java-collections.html,http://how2j.cn/k/collection/collection-ar ...

  9. LinkedList类源码浅析(二)

    1.上一节介绍了LinkedList的几个基本的方法,其他方法类似,就不一一介绍: 现在再来看一个删除的方法:remove(Object o) remove方法接受一个Object参数,这里需要对参数 ...

  10. 02.替换空格 (Java)

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路 感觉这题对于Java意义 ...