Spring源码阅读环境搭建 coder

摘要:
目录安装gradle导入Spring源代码创建测试模块我的测试其他问题Spring方面模块构建错误本文的思维导图将大致设置一个Spring源代码阅读环境,//gradle.org/releases/将下载的安装包gradle-x.x.x-all.zip解压缩到当前目录环境变量配置gradle_HOME配置路径以打开目录行工具。

目录

本文将粗略的搭建一个Spring源码的阅读环境,为后面的源码阅读做一个准备。做任何事情不管是有一个完美的或者是不太完美的开头,只要去做了,那么就是一种胜利。
由于spring使用了gradle构建工具,接下来先安装gradle。

安装gradle

  • 从Gradle官网下载gradle安装包,打开https://gradle.org/releases/
    Spring源码阅读环境搭建 coder第1张
  • 将下载的安装包gradle-x.x.x-all.zip解压到当前目录
    Spring源码阅读环境搭建 coder第2张
  • 环境变量配置
    • 配置GRADLE_HOME
      Spring源码阅读环境搭建 coder第3张
    • 配置Path
      Spring源码阅读环境搭建 coder第4张
  • 打开目录行工具,输入gradle -v,能看到gradle的版本信息表示安装已经成功
    Spring源码阅读环境搭建 coder第5张

导入Spring源码

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

  • 从git导入项目
    Spring源码阅读环境搭建 coder第6张

  • 填写要克隆的git仓库信息,可以点击右边的【Test】按钮测试,等待仓库克隆完成
    Spring源码阅读环境搭建 coder第7张

  • 打开导入的Spring项目
    Spring源码阅读环境搭建 coder第8张

  • 从gradle导入Spring项目,等待gradle build完成
    Spring源码阅读环境搭建 coder第9张
    注意:

    • 上面使用的是本地自己安装的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面板
    Spring源码阅读环境搭建 coder第10张
  • 在右侧的Gradle面板Spring -> Tasks -> other -> cglibRepackJar
    Spring源码阅读环境搭建 coder第11张
  • 激活任务
    Spring源码阅读环境搭建 coder第12张
  • 选择要激活的cglibRepackJar任务
    Spring源码阅读环境搭建 coder第13张
  • 重新构建项目(花费的时间较长)
    Spring源码阅读环境搭建 coder第14张

创建测试模块my-test

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

  • 右键spring-framework项目->New->Module...
    Spring源码阅读环境搭建 coder第15张

  • 输入ArtifactId: my-test
    Spring源码阅读环境搭建 coder第16张

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

  • 添加依赖:api(project(":spring-context"))
    Spring源码阅读环境搭建 coder第17张

  • 为了能让my-test自动导入相关的依赖,在Gradle面板中右键spring节点
    Spring源码阅读环境搭建 coder第18张

  • 在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   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...
Spring源码阅读环境搭建 coder第19张
解决办法二:使用Acj或者Eclipse编译
在工具栏点击File -> Settings...
Spring源码阅读环境搭建 coder第20张
此问题的相关链接:

本文思维导图

Spring源码阅读环境搭建 coder第21张

免责声明:文章转载自《Spring源码阅读环境搭建 coder》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Jmeter获取时间SVG矢量绘图 path路径详解(贝塞尔曲线及平滑)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Spring jar包详解(转)

spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到spring-mock.jar来进行辅助测试,正式应用系统中是用不得这些类的。     除了spring.jar文件,Spring还包括有其它13个独立的jar包,各自包含着对应...

Akka源码分析-Remote-发消息

上一篇博客我们介绍了remote模式下Actor的创建,其实与local的创建并没有太大区别,一般情况下还是使用LocalActorRef创建了Actor。那么发消息是否意味着也是相同的呢? 既然actorOf还是委托给了LocalActorRef,那么在本地创建的Actor发消息还是跟以前一样的,那么如果如何给远程的Actor发消息呢?我们一般是通过act...

Gradle 实战(1)—— 配置环境变量

背景:Gradle 是一款构建工具,继 Ant 、Maven 之后的现代构建工具,我会在接下来的博文中陆续介绍,我在工作中是如何使用 Gradle 的。 下载 Gradle 下面是 Gradle 的官方网站地址: Gradle l Modern Open-Source Enterprise Build Automation - Gradle http:...

Apache Tomcat 7 安装与配置

下载 首先需要下载tomcat7的安装文件,地址如下: http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.69/bin/apache-tomcat-7.0.69.tar.gz 安装与配置 安装之前需要确保已经安装JDK,若没有安装JDK请参考上一篇blog先正确安装JDK: Linux CentOS...

调试JDK源码时可编辑操作的实现

目录 一、解压源码压缩包 二、创建Java项目 三、复制源码文件到文件夹 四、Platform Settings中新增一个SDK 五、修改新建SDK的 Sourcepath 配置 六、修改 Project 以及 Modules 的 SDK 七、项目结构图 八、测试调试过程中对源码进入注释 以下操作在以下环境中测试通过:idea 2019.3,jd...

opendpi 源码分析(二)

先介绍opendpi如何设置各个协议的处理,然后介绍如何处理每一个包,最后是软件的流程图。 第一:首先看下要用到的重要的宏 View Code #define IPOQUE_SAVE_AS_BITMASK(bitmask,value) (bitmask)=(((IPOQUE_PROTOCOL_BITMASK)1)<<(value)) #de...