1. 1.源码下载
  2.  
  3.  
  4. Spring已经将源码从svn迁移到了git。对于习惯了svn的人来说依然可以svn checkout,最好checkout到英文路径下,本人中文路径编译不过,具体原因不明
    ,路径: https://github.com/SpringSource/spring-framework

  5. ,反正不想多装git,有兴趣的自己可以装git,然后用git下载
  6.  
  7. 官方说明:
  8.  
  9. The Spring Framework repository has moved to http://github.com/SpringSource/spring-framework.
  10.  
  11. See the readme there for details on working with Git, building the framework, etc.
  12.  
  13. Note that svn-based access is still available via GitHub's support for Subversion clients, e.g.:
  14.  
  15. $ svn checkout https://github.com/SpringSource/spring-framework
  16.  
  17. See https://github.com/blog/966-improved-subversion-client-support for more details.
  18.  
  19. 2.环境与工具

  20. 1)jdk不用提,必需品。最新的springFramework已经采用gradle编译,故需要下载gradle包,如果人懒的话不想下载直接跳到第二步

  21. 下载地址:

  22.   http://services.gradle.org/distributions/gradle-1.1-all.zip

  23.     解压后将gradle-1.1\bin目录路径添加到环境变量Path中,类似jdk的环境变量设置,cmd下输入gradle -version 查看当前版本是否路径配置成功
    2)

  24. 修改下gradlew.bat中关于jvm内存设置的参数后,在cmd中进入\spring-framework目录中,运行 gradlew build -x test。跳过所有的测试,

  25. 因为测试总会有失败,原因在spring-oxm的测试用例有问题,导致编译失败,如果不信的话大可以试下,结果你懂得。。。

如果运行gradlew 出现无法初始化jvm的消息,则需要修改下gradlew.bat中关于jvm内存设置的参数,git下来之后原始设置是set GRADLE_OPTS=-XX:MaxPermSize=1024m -Xmx1024m %GRADLE_OPTS%,,恐怕就springFramework开发组那么有钱...配置好高...本人4G内存条都不行囧,

可将MaxPermSize和Xmx稍微写小一点,512M完全没问题的。

错误信息如下:

  Error occurred during initialization of VM
  Could not reserve enough space for object heap
  Could not create the Java virtual machine

gradlew,这个是存在在spring-framework目录下的一个bat文件,是对Gradle的一个封装,在使用这个命令时会自动去下载gradle,如果已经安装了gradle则在编  译过程中使用的gradlew命令应该都可以替换成gradle。自动下载gradle是根据gradle\wrapper目录中的gradle-wrapper.properties中配置的,distributionUrl=http\://services.gradle.org/distributions/gradle-1.0-bin.zip。

然后就是漫长的等待下载jar包编译项目,如果第一步没有下载gradle包(约50M)等待时间更加漫长,因为每一个spring子项目都需要依赖很多的jar包,而且连接的是spring的http://repo.springsource.org/ 仓库下载,其速度可想而知,编译完成后可以发现,springFramework本来只有50多M的变成了近500M(包括生产的说明文档和class之类),其中的jar包大概有100-200M左右大家可以据此算出时间

本人的家庭网络是2M电信宽带,折腾了近1个小时

第一次编译40分钟后果断窗口一直处于等待状态。。。果断kill之,

第二次编译,第一次编译好的会自动跳过,然后继续没有完成的工作。第二次build了5分钟,结果failed......referenceHtmlMulti编译失败。。。重复编译2次均发现无用,发现当前存放springFramework路径有中文,将项目拷贝到纯英文的路径中。

第五次重新编译有效,发现编译

:referenceHtmlMulti
:referenceHtmlSingle
:referencePdf
:reference

时候一直是等待状态,然后每个都过了5分钟左右才成功,差点忍不住kill了重来,看来有点耐心还是好事。。。

这几个其实是springFramework的官方说明文档,编译成功后在 \build\reference可以看到,英文好的还是很具有参考价值

过了这关然后继续是10多分钟的下载编译过程........

直到下午5点20分,折腾了一个小时多,第五次编译总算build successful

③想将代码导入到eclipse中

错误:参考网上的教程运行gradlew eclipse,然后果然编成功了,导入工程的时候就囧了,的确生成了.classpath和.project

但是导入就发现把整个springFramework工程导入了,崩溃的是随便进入一个类DefaultListableBeanFactory,按F4想查看类继承关系,结果失败

ctrl方法也不能跳转到源码,跳到了jar包,想了想应该是eclipse不支持继承导入问题。

正确:果断度娘求步骤,然后发现了原来都有官方导入eclipse说明,在工程的根目录下有文件import-into-eclipse.sh,用editplus之类工具打开,可以看到,

官方说明的导入eclipse分了5步,本人就翻译给4级不过的童鞋算了

1.cmd窗口执行命令 gradlew cleanEclipse :spring-oxm:compileTestJava eclipse -x :eclipse

2.按照eclipse File > Import... > Existing Projects into Workspace导入所有的springFramework项目

3.在cmd窗口执行 gradlew :eclipse

4.按照eclipse File > Import... > Existing Projects into Workspace导入springFramework 父项目

5.如果你想获得git支持(反正我是不用了,呵呵),全选spring*项目,然后右键Team > Share Project... 弹出窗口选择Git然后下一步,

选择"Use or create repository in parent folder of project",点击完成。

上面的流程之所以那么长,其实无非就是如果gradlew eclipse那么会直接把父目录和所有子项目都生成.classpath和.project,但是

eclipse导入的时候是不支持继承的,所以你以为把所有的项目导入到eclipse中,其实所有的子项目都在eclipse中找不到对方,那肯定

找不到它们相互引用的类,F4果断无效,所以才有了先生成所有子项目的第一步和第二步导入,然后生成父项目的第三步和第四步导入

好了,现在重新DefaultListableBeanFactory 按下F4,总算继承的结构图出来了,代码没有任何问题,能和正常项目一样了

springFramework 源码学习之源码下载与编译的更多相关文章

  1. Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码

    目录 Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码 前言 工欲善其事必先利其器.学习和深读Spring源码一个重要的前提:编译源码到我们的本地环境.这 ...

  2. 【 js 基础 】【 源码学习 】源码设计 (持续更新)

    学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析第二部分:undersc ...

  3. 【 js 基础 】【 源码学习 】源码设计 (更新了backbone分析)

    学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析 第二部分:unders ...

  4. macOS(Sierra 10.12)上Android源码(AOSP)的下载、编译与导入到Android Studio

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  5. Vue2.x源码学习笔记-源码目录结构整理

    先从github上下载或者clone一个vue分支项目 https://github.com/vuejs/vue 查看下目录结果 先列出一些目录 Vue |— build 打包相关的配置文件,其中最重 ...

  6. VUE 源码学习01 源码入口

    VUE[version:2.4.1] Vue项目做了不少,最近在学习设计模式与Vue源码,记录一下自己的脚印!共勉!注:此处源码学习方式为先了解其大模块,从宏观再去到微观学习,以免一开始就研究细节然后 ...

  7. async源码学习 - 全部源码

    因为工作需要,可能我离前端走远了,偏node方向了.所以异步编程的需求很多,于是乎,不得不带着学习async了. 我有个习惯,用别人的东西之前,喜欢稍微搞明白点,so就带着看看其源码. github: ...

  8. nginx源码学习_源码结构

    nginx的优秀除了体现在程序结构以及代码风格上,nginx的源码组织也同样简洁明了,目录结构层次结构清晰,值得我们去学习.nginx的源码目录与nginx的模块化以及功能的划分是紧密结合,这也使得我 ...

  9. Thrift 源码学习一——源码结构

    Thrift 客户端与服务端的交互图 源码结构 传输层 TTransport: TTransport:客户端传输层抽象基础类,read.write.flush.close 等方法 TSocket 与 ...

随机推荐

  1. Zepto.js touch模块深入分析 解决手机点击事件

    源码: // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT li ...

  2. matlab中norm与svd函数用法

    格式:n=norm(A,p) 功能:norm函数可计算几种不同类型的矩阵范数,根据p的不同可得到不同的范数 以下是Matlab中help norm 的解释: NORM Matrix or vector ...

  3. 使用ADO.net中的链接字符串

    需要引用:System.Configuration命名空间 ConfigurationManager.ConnectionStrings["sqlConnStr"].Connect ...

  4. C语言静态函数静态变量

    C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数.而内部对象是指定义在函数内部的函数参数及变量. 外部变量定义在函数之外,因此可以在许多函数中使用.由于C语言不允许在一个函数中定义 ...

  5. java中关于窗体居中显示问题

    最近在学着用java写qq聊天程序,首先是登录和聊天界面,书上没有给出居中显示,通过上网查找知道有两种方案 先说第一种方法,也是以前用的方法 /获得屏幕大小Dimension screenSize = ...

  6. matplotlib中使用imshow绘制二维图

    #coding:utf-8 from matplotlib import mpl import matplotlib.pyplot as plt#载入matplotlib快速绘图的函数库 import ...

  7. 安装solaris_11.2与windows双系统(VM10模拟实现)(二)

    下面我们在虚拟机下安装双系统 1.首先我们新建一个虚拟机 新建的时候一定要注意客户机操作系统应选择solaris,不然不行: 新建完成后我们先分两个分区,这里我先从U盘启动进去(也可以用xp/win7 ...

  8. MFC使用Windows media player播放声音文件

    一.在需要播放声音的资源上添加控件 资源视图  . 选择添加控件的资源(如对话框).右键单击.插入ActiveX控件.调整你需要的控件属性并记录ID 二.在项目中添加播放声音的类 点击菜单中的项目.添 ...

  9. CATALINA_BASE与CATALINA_HOME的区别(转)

    到底CATALINA_HOME和CATALINA_BASE有什么区别呢,之前因为都是小打小闹的在服务器上安装一个tomcat就得了,然后根据前人的配置,将CATALINA_HOME和CATALINA_ ...

  10. 每天一道题:LeetCode

    本人是研二程旭猿一枚,还有半年多就要找工作了,想想上一年度面试阿里的算法工程师挂了,心有不甘啊,主要还是准备不足,对一些常见的算法问题没有去组织准备,为了明年找一份好的实习,就从现在开始,好好准备吧, ...