您的位置:首页 > 编程语言 > Java开发

springFramework 源码学习日记(一)源码下载与编译

2012-09-02 19:48 309 查看
前言:
抽空学习springFramework源码,后续每天有时间都将学习心得发表,配合教程《spring 技术内幕》作者: 计文柯
出版社: 机械工业出版社

源码下载时间2012-9-2 下午4点,svn下载https://github.com/SpringSource/spring-framework/branches/3.2.0.M1

环境:jdk1.6.0.33

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,总算继承的结构图出来了,代码没有任何问题,能和正常项目一样了

总结:折腾了2个多小时,碰到各种问题,也度娘过,自己也思考过,反正的话第一次弄springFramework源码,2个小时导入工程,真是汗,

作为高级程序猿果然鸭梨很大.......反正的话多思考多动手才是王道,忘学习者共勉,吃饭去~~

参考blog:/article/5183971.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: