spring3.1.x源码编译并导入eclipse
最近在学习spring的时候想将源码编译下,然后呢就去网上找找方法。参考了以下内容:
http://blog.springsource.com/2009/03/03/building-spring-3/
http://zachary-guo.iteye.com/blog/661839
http://blog.sina.com.cn/s/blog_49fd52cf0100r2rn.html
知道spring编译方法从原来的ant变成了Gradle。但是我下载的版本是3.1.4,所以以下的是spring3.1.4源码编译,虽然很多都和参考资料中相同,但确实是自己验证过的。
1、 通过SVN从spring服务器上下载源码
spring的源码从SVN搬到github上。
地址:https://github.com/SpringSource/spring-framework
2、 通过ant编译源码
1)对于JDK的要求
spring的编译要求是至少java 6。我机子上安装的是jdk1.6.0_13。
设置jdk环境变量:
JAVA_HOME = C:\ProgramFiles (x86)\Java\jdk1.6.0_13 JAVA_OPTS = -Xms512m -Xmx1024m -XX:MaxNewSize=512m -XX:MaxPermSize=1024m2)对于ANT的要求
ant版本要求至少要1.7。这里用的是1.8.4
设置ant的环境变量:
ANT_HOME = C:\MyApplication\apache-ant-1.8.4 ANT_OPTS = -Xms256m -Xmx768m -XX:MaxNewSize=256m-XX:MaxPermSize=512m3)build源码
通过ant来build源码,通过ivy下载spring所需的第3方jar包。
用命令提示符方式进入到源码的build-spring-framework目录下,然后ant。如下
-->cd {SRC_HOME}/build-spring-framework -->ant ….在这边我无力吐槽网速什么的,反正build的时间非常长。而且中间还断断续续的出现连接超时情况。终于,到了test的时候,挂了…..
找了些资料,都说test可以不需要。好吧,为了能build success,咱也就去掉test吧!
方法:在{SRC_HOME}\build-spring-framework\build.xml 中找到
<targetname="precommit" depends="clean, clean-integration,test"/>然后去掉test后改成了
<target name="precommit" depends="clean,clean-integration"/>继续ant,没过多久出现了盼望已久的BUILD SUCCESS。
3、 把编译好的源码导入eclipse
1) 在eclipse中新建一个workspace
参考Spring Team Blog 上的这篇文章,我发现新建一个workspace还是很有必要的。因为spring源码的工程比较多,个人不习惯所有项目混合在一起,既然要看源码,那就干干净净地看呗。
2) 设置IVY_CACHE环境变量
因为spring整个工程都依赖与IVY_CACHE。所以必须设置该环境变量。其实呢,它就是ant在build时创建的ivy-cache,里面是spring工程依赖的jar包。
设置方法如下:
Window -> Preferences -> Java -> Build Path ->Classpath Variables -> New
然后填写:
NAME:IVY_CACHE
PATH: ${SRC_HOME}/ivy-cache/repository
3) 设置workspace的jre
这里至少需要jre 6以上。
设置方法如下:
Window -> Preferences -> Java -> Installed JREs 添加相关6以上版本的JDK。
在Window -> Preferences -> Java -> Complier的Compilercompliance level选择相关选择。
4) 将源码导入到eclipse
File -> Import -> Existing Projects into workspace,rootdirectory 选择 ${SRC_HOME}。
5) 补充jar包
在eclipse中导入源码后,你会发现项目上还有红叉叉或红色感叹号。通过查看eclipse的Makers,我们知道了缺少了相关的Jar包。为了消除这些错误,我根据Makers中的提示,到http://ebr.springsource.com/repository/app/bundle中下载缺失的Jar包,并将它们放到对应的位置。
6) 继续消除错误
按理说,在引入jar包后工程应该不会报错了吧,可是呢,我发现几乎所有的项目都是好的,除了org.springframework.oxm项目。查看了下,原来是test的目录中少了Flight等类。想想,还是上网找吧,可是我却没有找到相关的类,真的不知道是spring的疏忽呢还是我的原因。后来,干脆在.classpath中屏蔽了对test目录的引入,一切OK。
4、 总结
虽然编译成功了,但还是发现了很多奇怪的问题。比如,在引入缺失的jar时发现有一些没有被下载到,还有一些版本号不对。没有被下载到,可以被理解,毕竟被限制的网络什么都有可能发生;但是,第三方jar包版本号不对让我很奇怪呀!不知道是不是因为我checkout的版本问题呢?我下载的是branches 中的3.1.x版本,会不会在下载Relsease会好些呢?等下次有时间再试下。
还有,过段时间去学习编译下3.2.x版本的源码,那又是一种新的方式啊!