原文转自:http://blog.csdn.net/u012763117/article/details/16810031
为读spring源码做准备
其实自从maven接管依赖之后,各种库用起来得心应手很多,再也不用到处找来找去然后调整以来关系了,只需要在pom.xml中写好相关库的坐标,基本上就ok了。
好比spring,只要加上 spring-context 坐标,相关的spring-bean,spring-core等等基本springframework需要的库都会直接搞定,无非就是再根据需要增减所需或调整版本。
但是,有时候项目中并未让maven托管依赖处理,还是需要像当初那样需要spring-framework-xxx-dist-deps.zip,但是现在spring的官网已经不提供这种打包的下载了,怎么办?只好手动来搞了。
1. 首先是git clone springframework 的项目,不用非要去github,只要在国内的托管仓库里找一个springframework的mirror就行了。
我发现osc-git里有spring的mirror,所以就采用了它。
2. 查看一下spring的分支
3. 将当前工作环境变为3.2.5.Release,当然可以手动输入git checkout origin/3.2.5.RELEASE,但是拼起来费劲,直接上管道。。。走你。。。
4. 确定了版本,然后就可以构建打包了。
spring现在用的是gradle来构建,gradle兼容maven和ant,而且它更灵活,只是咱们国内貌似使用的很少很少。它的配置文件已经开始用脚本性质了,比起xml更加简练干净和直观。因为我机子上有maven,而且配置了.m2,所以gradle会识别我的.m2里的设置。运行之后它会自动在我的家目录下生成gradle程序所需要的相关程序或文件在~/.gradle里,这个不用在意。构建项目时的依赖会兼容.m2相关设置到我设置的指定的本地依赖仓库中。
在spring的github上的文档中,写着只要在spring项目目录直接运行 ./gradlew build 就可以构建spring项目了,它会编译,自动生成api-doc、使用手册(html/html-single/pdf)以及每个spring模块的jar包和src/doc的jar文件,然后将这所有的一切打包成 spring-framework-3.2.5.RELEASE-dist.zip。所以spring官网才没有提供这个zip的下载链接,因为可以在使用者的机子上自己构建。
但是仅仅有这个 dist.zip 往往很让人搓火很隔应人,因为如果maven还是得去寻找spring的依赖库。
稍等,以前spring还会提供一个 dis-witht-deps.zip,这个更好,直接把spring依赖库或整合的开源库都给打包进来了,方便多了。
spring在它github上的文档上提供了这个构建方法:./gradlew depsZip
所以,不用build目标了,改成depsZip目标更爽。
我这个是以前运行过 gradlew,已经在家目录生成过.gradle 目录了,如果是第一次运行,它会先下载它的运行时库,然后再解析spring项目的依赖下载依赖然后再进行构建。
5. 大概二十几分钟,就构建打包完成了。
可能测试会用去不少时间,还有可能在测试的时候没有通过,但是我没有遇到。。。有个建议,gradle有个参数 是 “ -x 目标名”,意思是排除某个目标任务
所以,应该可以用 ./gradlew depsZip -x test 免去构建各个projects时的test目标吧,我没试过。
6. 现在 spring-framework-3.2.5.RELEASE-dist-with-deps.zip 生成了, 在spring-framework/build/distributions目录中。
7. 文档上还说 用gradle 可以生成 eclipse或 idea 的部署配置文件,我没试,不感兴趣,没有maven的话还是以前的copy jar文件到libs或者手动选择性的添加到eclipse的用户库中来的实在。
所以,我找个地方把 dist-with-deps.zip 解压了,里面什么都有了,文档/手册/库/依赖库等等。。。
看一眼解压后的 deps依赖目录里,所有被spring整合或spring需要的依赖都有了
但是在spring的库里,有个让人不爽的事情,就是它把库的jar文件和src的jar文件以及doc的jar文件都特么放一个目录地下,这让我copy的时候眼花缭乱的,eclipse导入某个库的源码什么的也要眼花。
所以,我想了个办法,就是把它们分们别类,doc放到doc目录,src放到src目录。进入解压目录的libs中直接用合并命令。。。
这下清爽很多了 。。。。。