• 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.1in目录路径添加到环境变量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是根据gradlewrapper目录中的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的官方说明文档,编译成功后在 uild eference可以看到,英文好的还是很具有参考价值

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

    作者:JohnFung
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    ES6 新属性 Symbol
    box-shadow 属性详解
    在vue 中 使用 tinymce编辑器
    var let const 结合作用域 的探讨
    防抖和节流在vue中的应用
    分享几个按钮样式
    队列学习
    栈的学习
    Object—常用的遍历
    从零认识Java Package
  • 原文地址:https://www.cnblogs.com/johnfung/p/3536272.html
Copyright © 2020-2023  润新知