springFramework 源码学习之源码下载与编译
1.源码下载
Spring已经将源码从svn迁移到了git。对于习惯了svn的人来说依然可以svn checkout,最好checkout到英文路径下,本人中文路径编译不过,具体原因不明
,路径: https://github.com/SpringSource/spring-framework
,反正不想多装git,有兴趣的自己可以装git,然后用git下载 官方说明: The Spring Framework repository has moved to http://github.com/SpringSource/spring-framework. See the readme there for details on working with Git, building the framework, etc. Note that svn-based access is still available via GitHub's support for Subversion clients, e.g.: $ svn checkout https://github.com/SpringSource/spring-framework See https://github.com/blog/966-improved-subversion-client-support for more details. 2.环境与工具
1)jdk不用提,必需品。最新的springFramework已经采用gradle编译,故需要下载gradle包,如果人懒的话不想下载直接跳到第二步
下载地址:
http://services.gradle.org/distributions/gradle-1.1-all.zip
解压后将gradle-1.1\bin目录路径添加到环境变量Path中,类似jdk的环境变量设置,cmd下输入gradle -version 查看当前版本是否路径配置成功
2)
①修改下gradlew.bat中关于jvm内存设置的参数后,在cmd中进入\spring-framework目录中,运行 gradlew build -x test。跳过所有的测试,
因为测试总会有失败,原因在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 源码学习之源码下载与编译的更多相关文章
- Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码
目录 Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码 前言 工欲善其事必先利其器.学习和深读Spring源码一个重要的前提:编译源码到我们的本地环境.这 ...
- 【 js 基础 】【 源码学习 】源码设计 (持续更新)
学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析第二部分:undersc ...
- 【 js 基础 】【 源码学习 】源码设计 (更新了backbone分析)
学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析 第二部分:unders ...
- macOS(Sierra 10.12)上Android源码(AOSP)的下载、编译与导入到Android Studio
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- Vue2.x源码学习笔记-源码目录结构整理
先从github上下载或者clone一个vue分支项目 https://github.com/vuejs/vue 查看下目录结果 先列出一些目录 Vue |— build 打包相关的配置文件,其中最重 ...
- VUE 源码学习01 源码入口
VUE[version:2.4.1] Vue项目做了不少,最近在学习设计模式与Vue源码,记录一下自己的脚印!共勉!注:此处源码学习方式为先了解其大模块,从宏观再去到微观学习,以免一开始就研究细节然后 ...
- async源码学习 - 全部源码
因为工作需要,可能我离前端走远了,偏node方向了.所以异步编程的需求很多,于是乎,不得不带着学习async了. 我有个习惯,用别人的东西之前,喜欢稍微搞明白点,so就带着看看其源码. github: ...
- nginx源码学习_源码结构
nginx的优秀除了体现在程序结构以及代码风格上,nginx的源码组织也同样简洁明了,目录结构层次结构清晰,值得我们去学习.nginx的源码目录与nginx的模块化以及功能的划分是紧密结合,这也使得我 ...
- Thrift 源码学习一——源码结构
Thrift 客户端与服务端的交互图 源码结构 传输层 TTransport: TTransport:客户端传输层抽象基础类,read.write.flush.close 等方法 TSocket 与 ...
随机推荐
- html5 乒乓球(碰撞检测)
演示地址 http://koking.8u.hanmandarin.com/html5/1.html 简单介绍 小球可以在方框内部自由运动 可以通过方向键控制黑色砖块上下左右移动去与小球发生碰撞 代码 ...
- -bash: ulimit: max user processes: cannot modify limit: Operation not permitted
安装oracle时候在创建oracle用户后,切换oracle用户时,报如下错 [root@localhost ~]# su - oracle-bash: ulimit: max user proce ...
- C# MySQL数据库的备份 还原 初始化
// 执行创建数据库操作 this.GetExecute(G_Con, "create database if not exists NEWDB"); this.sqlAddres ...
- rem和em和px vh vw和% 移动端长度单位
1.rem和em.px 首先来说说em和px的关系 em是指字体高度 浏览器默认1em=16px,所以0.75em=12px;我们经常会在页面上看到根元素写的font-size:65%; 这样em就成 ...
- PHP自学4——通过函数将数组数据输出到html的Table标签中(使用函数的例子)
这一节其实说实话并没有什么干货,不过为了防止PO主的懒癌的复发,还是坚持放一点东西,即使是内容和长度都令人发指.这一节通过一个函数来实现将数组中的内容输出html的Table标签当中显示. 函数文件— ...
- aspx后台生成json对象
json对象应用很广,有时,我们要把一些数据转化为json对象,就需要用到以下方法了. 1.使用Newtonsoft.Json.DLL (推荐使用) 下载地址:http://files.cnblogs ...
- juce Justification 分析
很简单的一个类,一个rect放置在另一个rect中如何放置.只是没有考虑边距等,估且认为是在外层作考虑吧.然后认为是外框比内框大,所以外层怕是要进行检查才行 #ifndef JUCE_JUSTIFIC ...
- java中遍历map对象的多种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有ma ...
- 第二章——Parcelable接口的使用(跨进程,Intent传输)
一.Parcelable类(Android独有的) 简介:Parcelable是一个接口. 作用:是Android提供的序列化接口,实现序列化和反序列化的操作. 二.跨进程使用 步骤一:创建Book类 ...
- 了解神奇的this
this的用法 在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了. 因为this的取值是执行上下文环境的一部分,每次调用函数,都会产生一个新的执行上下环境.举例说 ...