Dive into Spring framework -- 搭建spring 源码的开发环境
spring是一个类之间依赖的管理容器,大家都知道,但我们中很多人都仅仅停留在使用的层面,但spring本身具有极大的研究价值,所以在使用了几年spring之后,还是想深入的探究一下其根源。记录于此,愿与各位共享。
spring有很多功能模块,从spring的官网doc 我们可以看到其分了29个部分,当然主要内容是从chapter 5 IoC开始的。现在来说明一下接下来要各个部分,我们要分析的内容。对于每个大的模块,我们会深入分析各个模块的源码,深入理解这些实现方式,并通过scala来实现一个山寨的框架,用Scala是不想直接抄袭,可以说是照葫芦画瓢。刚刚说了,spring是个大集成,她不仅仅有设计良好的各个模块用以支撑各类之间的dependences,并且有支持很多其他框架的接口模块,这个对我们来说是额外的收获,所以在后面的各个模块中,其他的那些第三方框架,咱也不会落掉任何一个,理解他们我们可以更加深入的理解spring是如何包容第三方框架。尤为可喜的是spring在尽力支持第三方框架的最新版本。能坚持下去,咱还是能有点收获的。
spring的开放源码在GitHub上,别跟外国人客气,尽情的去把他们的优秀的成果down下来。这里要特别说明一下如何将spring源码导入到Eclipse。
现在spring把源码各个模块里面的pom文件都删除了,我们就不能直接用maven来导入了,pity! 他们现在使用gradle来管理项目。
第一步是搭建你的gradle环境:
Eclipse的gradle插件的update site: http://dist.springsource.com/release/TOOLS/gradle,只需要选择“extensions / gradle integration”. 通过Eclipse --> Help --> Install New Software... 来安装。耐心的安装上plugin之后,去下源码,git clone https://github.com/spring-projects/spring-framework.git
download完成后,先别急导入到Eclipse,看看github项目里面说的,配置prerequisites:需要git和jdk8(Git and OpenJDK 8 early access build 100 or later
),请注意那里面的提示:一定要把JAVA_HOME指向jdk1.8.0.
接下来进入源码路径, 运行import-into-eclipse.sh(linux/Mac).这一步你就照着提示做下去就可以了。比较苦逼的是能否一次性把所有依赖包都下下来,如果不能一次性得到最终的complete提示,你就多试几次吧。我就碰到好几次运行到中途就卡住了,一直在build一个模块,实际上就是在下载对应jar依赖包。于是我就取消(ctrl+c),再重新运行,用了一个晚上终于成功看到了最后complete的提示。
设置Eclipse的jdk环境变量,这里就不多说了,但是将默认的选择成jdk1.8.0.
现在可以导入到Eclipse了,在workspace里面import-->Gradle --> Gradle project, 选择你的spring源码路径,会有提示说要build model,那就build吧。
build完成后,把run before 和run after两个选项去掉,finish!
一切都成功的话,你会看到各个模块都是有包结构的,否则就会有很多编译错误。 Wish you good luck!
如果有什么问题,尽情留言,咱怎么的也能解决掉,你说呢?
转载请注明出处。
Dive into Spring framework -- 搭建spring 源码的开发环境的更多相关文章
- GEF入门实例_总结_01_教程、源码、开发环境准备
一.前言 最近在学Eclipse插件开发,发现了一个比较好的GEF入门教程,并且按照教程上的操作,一步步实现了一个入门Demo,在此感谢作者的贡献. 好记性不如烂笔头,故决定总结一下这段时间的学习心得 ...
- 基于Ubuntu系统搭建以太坊go-ethereum源码的开发环境
第一.先安装geth的CLI环境sudo apt-get install geth,这个很重要 第二.下载源代码 git clone https://github.com/ethereum/go-et ...
- 在eclipse中配置spark 0.9.1源码的开发环境
一.准备工作: 1.下载release版spark 0.9.1,本次用的版本是spark-0.9.1-bin-cdh4. 2.下载scala IDE 3.0.2,这个版本ide的支持scala 2.1 ...
- Centos7 下Boost 1.61.0源码 配置开发环境
1 下载地址 https://sourceforge.net/projects/boost/files/boost/1.61.0/ boost_1_61_0.tar.gz 2 卸载系统自带的boost ...
- Spring Cloud 学习 之 Spring Cloud Eureka(源码分析)
Spring Cloud 学习 之 Spring Cloud Eureka(源码分析) Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 ...
- Spring框架之AOP源码完全解析
Spring框架之AOP源码完全解析 Spring可以说是Java企业开发里最重要的技术.Spring两大核心IOC(Inversion of Control控制反转)和AOP(Aspect Orie ...
- Spring框架之jdbc源码完全解析
Spring框架之jdbc源码完全解析 Spring JDBC抽象框架所带来的价值将在以下几个方面得以体现: 1.指定数据库连接参数 2.打开数据库连接 3.声明SQL语句 4.预编译并执行SQL语句 ...
- 【Spring】Spring IOC原理及源码解析之scope=request、session
一.容器 1. 容器 抛出一个议点:BeanFactory是IOC容器,而ApplicationContex则是Spring容器. 什么是容器?Collection和Container这两个单词都有存 ...
- spring boot 2.0 源码分析(一)
在学习spring boot 2.0源码之前,我们先利用spring initializr快速地创建一个基本的简单的示例: 1.先从创建示例中的main函数开始读起: package com.exam ...
随机推荐
- LINux网络的NAPI机制详解一
在查看NAPI机制的时候发现一篇介绍NAPI引入初衷的文章写的很好,通俗易懂,就想要分享下,重要的是博主还做了可以在他基础上任意修改,而并不用注明出处的声明,着实令我敬佩,不过还是附上原文链接! ht ...
- mysql之引擎、Explain、权限详解
引擎 简介 Innodb引擎 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别.该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基 ...
- Java 运算符及优先级
运算符 分割符: , ; [] () 算数运算符: + - * / % ++ -- 关系运算符: > < >= <= == != 逻辑运算符: ! & | ^ & ...
- Hadoop2.7.3+spark2.1.0+hbase0.98分布式集群部署
运行环境配置(10.79.115.111-114) 1.关闭防火墙与selinux 关闭防火墙: CentOS 7.x默认使用的是firewall作为防火墙. systemctl stop firew ...
- (转)extern关键字两种场景的使用
第一种场景 -- extern extern关键字的作用是声明变量和函数为外部链接,即该变量或函数名在其它文件中可见.用其声明的变量或函数应该在别的文件或同一文件的其它地方定义. 例如语句:exter ...
- JDBC—DAO
一.JDBC 什么是JDBC?JAVA DataBase Connectivity (Java 数据库连接技术)由Java编写的一组类和接口组成,为各种类型的数据库提供统一的访问.JDBC的作用?一种 ...
- ZOJ - 2587 Unique Attack (判断最小割是否唯一)
题意:判断最小割是否唯一. 分析:跑出最大流后,在残余网上从源点和汇点分别dfs一次,对访问的点都打上标记. 若还有点没有被访问到,说明最小割不唯一. https://www.cnblogs.com/ ...
- 【转载】Android中attr自定义标签详解
原文链接:http://blog.sina.com.cn/s/blog_62ef2f14010105vi.html:仅对排版进行优化,更方便阅读 <LinearLayout xmlns:andr ...
- web性能深入探究 eventloop 与浏览器渲染的时序问题 #
https://github.com/jin5354/404forest/issues/61
- Openwrt架设GIT服务
#下载宝刷LEDE版系统后, 在上面安装git包 opkg update opkg install git #安装好后在将git仓库装到SD(TF)卡上 #用fdisk对SD 卡分区 #fdisk / ...