记录一下自己编译Spring-framework-5.0.x的过程

  • 1. 准备阶段 (环境:jdk1.8+spring5+gradle4.9+eclipse4.11)
    • 1.1 jdk1.8
    • 1.2 Gradle安装与配置
    • 1.3 AspectJ和Groovy安装与配置
    • 1.4 spring-framework-5.0.x源码下载
  • 2. 开始编译
    • 2.1 运行import-into-eclipse.bat
  • 2.2 导入spring源码到eclipse或者STS
  • 3. 生成根目录
  • 4. 导入根项目到eclipse中
  • 补充:
    • 1. AJDT插件的安装

说明一下我这里打算用eclipse查看源码,所以下面的编译操作后,只是为了往eclipse里面导入,没有尝试往idea里面导入。

1. 准备阶段 (环境:jdk1.8+spring5+gradle4.9+eclipse4.11)

1.1 jdk1.8

由于此次编译的是spring-framework-5.0.x,jdk版本最低需要1.8

1.2 Gradle安装与配置

1. gradle下载地址:https://services.gradle.org/distributions/

截止到目前,gradle最新版本为5.6.1了。gradle下载时候有三个包,gradle-src为gralde源码,gradle-bin为安装包,gradle-all为源码加安装包,我这里下载的是gradle-all我刚开始直接下载的最新版本的,结果到后面编译的时候,报错了,提示有个什么东西1.8,还是什么1.0.2.be什么鬼的版本问题,然后我就换成4.10了,就没有报那个错误了。

gradle下载后不需要安装,解压在本地磁盘后配置环境变量即可。

2. 配置环境变量:

新建GRADLE_HOME,path中增加%GRADLE_HOME%/bin;即可。

配置完成以后win+r,输入cmd进入dos界面,键入命令gradle -v,若如下图正确输出版本信息即可

这个查看版本的命令是不是跟maven很像??这俩其实功能差不多。

然后配置gradle默认的本地仓库,可做如下配置,新增GRADLE_USER_HOME,路径配置成需要的本地仓库路径即可,我这里配置为:E:\Gradle\LocalRepository

1.3 AspectJ和Groovy安装与配置

AspectJ的安装让我折腾了半天,由于我的eclipse是4.11版本的,https://www.eclipse.org/ajdt/downloads/找了一下,最新的版本只有适合eclipse4.10版本的,上面提示说插件适合的版本需要和Eclipse的版本一致才可以生效,然后就试着装了一下,好像确实没有生效。当然如果没有安装的话,在最后导入项目的时候,会提示缺少这两个工具,直接在marketPlace里面可以看到Groovy,直接点Install按钮即可,但是另外的AspectJ Development Tools,这个玩意却没有Install按钮可以点,只有一个learnMore,在折腾半天之后,那我就点learnMore看看吧,进去里面之后竟然有个Install,点了之后貌似就正常安装了。

1.4 spring-framework-5.0.x源码下载

这里我们直接从全球最大的同性交友平台github上下载就可以了,进入github官网,直接搜索spring-projects/spring-framework,第一个就是我们需要的。

进去项目里面,选择我们需要的版本,我这里下载的是5.0.x,这里我直接下载的源码的压缩包。

然后解压到E:\Spring-Resource\spring-framework-5.0.x

由于我这里已经编译过了,所以根目录下会有.setting文件夹。

2. 开始编译

2.1 运行import-into-eclipse.bat

在尝试多次编译失败之后,偶然在百度上看到,说直接双击运行spring-framework-5.0.x文件夹里面的import-into-eclipse.bat,我也只能死马当成活马医了,试一下吧,然后意外的是,没有报错!!!!!

弹出如下窗口,开始下载依赖包了,第一次运行了十几秒之后提示fail并且自动退出了,我又运行一次,就正常了。


过程是漫长的,耐心等待即可。 出现编译成功的绿条之后,不要着急按任意键!

编译结束之后 我看了一下gradle的本地仓库文件夹里面,多了将近一个G的新文件,也就是说spring编译的过程,也就是拼电脑配置和网速的时候了。编译的时间长短,取决于你的电脑的配置和网速。还有一点就是需要检查你的gradle的本地仓库的位置是不是自定义的,因为默认会在C盘比如我的是在C:\Users\linmengmeng\.gradle,到这里我才发现我之前没有配置本地仓库,写博客时就把本地仓库加在前面环境变量了。

可以看到cmd窗口里面提示到编译完成之后,下面开始第二步:

2.2 导入spring源码到eclipse或者STS

直接在eclipse的左侧项目空白处右键===>Import===>Existing Projects into Workspace,选择spring源码解压的根目录。


由于我当时没有安装groovy和ajnature,这里会有一个提醒安装的弹窗,这点还是很方便的。这里默认勾选了这两个插件,直接点Show Solutions。


eclipse卡了一下之后,弹出下面的弹窗,但是只有Groovy的Install按钮,那就点击Install安装就完事了。



然后提示是否重启eclipse,点击立即重启即可。重启之后就可以看到Project下出现了这么多新的项目

但是这个spring-beans上面有个叉,不用着急,让eclipse飞一会就好了,等右下角的progress绿条反应完就好了。

如果还有问题,可以 看一下Problem里面的具体信息,我这里是提示groovy的编译版本跟工作空间的不一致,这个错误忘了截图了,记得就是提示一个是2.4,另一个是2.5,直接右键项目名,然后选择Properties,然后将groovy的编译的版本改成后面的那个就好了,根据实际情况,你的不一定也是2.5,我晚上回去在我自己电脑上编译的时候,这个报错信息就变成需要改为3.0了。

我在我自己电脑上导入项目之后,spring-jdbc项目上面有个感叹号,然后依赖spring-jdbc的别的模块也是提示依赖的模块spring-jdbc中有错误。记得Problem里面提示spring-jdbc项目缺少一个jar包,然后我在eclipse里面倒腾了半天,也没有将那个依赖弄好,最后没办法了,就自己手动下载,然后导入到项目里面。

我这里提示的是缺少derby-10.14.2.0.jar,所以我们直接在中央仓库里面搜这个依赖即可


下载到本地之后,我们需要将其放在gradle的本地仓库里面,我这里使用的路径是D:\gradle\local_repository,我们可以看一下gradle的jar包的目录

然后我们找到缺少的那个jar包的路径

这里面有俩,我看了一下里面的目录是有固定套路的,里面是版本号文件夹,版本号文件夹里面还有两个随机命名的文件夹,一个文件夹里面放了pom文件,另一个文件夹放了jar文件,我的derby-project文件夹下面只有一个pom文件所在的随机文件夹,于是我便自己新建了一个文件夹,然后把刚才下载的jar包扔里面

接着在Eclipse里面手动指定jar的位置。

右键spring-jdbc项目---Build Path-----Config Build Path


可以看到这里这个jar包的位置就是刚才手动创建的。这是修改之后的,修改之前这个异常的jar信息应该是在jar包列表的最后一行,选中异常的jar,点击右侧的Edit即可手动指定其位置。

然后点击Apply and Close 给Eclipse一点反应的时间,直到所有的子项目都没有错误信息,就可以开始下一步了。

然后回到cmd窗口,按任意键,提示进入第三步

3. 生成根目录

cmd窗口中提示,第三步,提示的大致意思:

不幸的是,eclipse不允许导入项目层次结构,因此我们不得不在过程中跳过根项目元数据的生成

貌似是提示我们:刚才我们导入的项目,只是一些分离的子项目,我们需要一个父项目。那就按任意键,接着往下走,接着编译

不出意外的话,会顺利出现绿条,然后接着第四步。

4. 导入根项目到eclipse中

重复第二步,导入根项目,然后可以看到Eclipse里面新导入一个名为spring的项目,包含了所有第二步导入的子项目,这样我们就可以在代码中在多个模块之间来回切换了。


从第四步的提示中,看到还要最后一步呢,但是当我完成第四步之后回到cmd窗口,敲了回车之后,没反应,连敲了两次回车之后,cmd窗口一闪就消失了。。。。。。。

不知道最后一步是什么操作,但是又没有影响我后面的操作。

但是到目前为止,我们已经顺利把源码导入到eclipse里面了。

这里创建一个简单的测试,开始我们的第一个demo之旅吧。


其中红框选中的就是我们自己写的测试demo了。
首先是新建一个简单的实体类MyTestBean.java,然后使用xml文件,让Spring将我们这个类添加到容器中。

package my.test.bean;/*** * @author linmengmeng* @since 5.0*/
public class MyTestBean {private String testStr = "testStr";/*** @return the testStr*/public String getTestStr() {return testStr;}/*** @param testStr the testStr to set*/public void setTestStr(String testStr) {this.testStr = testStr;}}

然后是xml文件的内容,很简单,就是使用<bean>标签,来告诉Spring需要将这个类装载到容器里面。
beanFactoryTest.xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="myTestBean" class="my.test.bean.MyTestBean"></bean></beans>

最后是我们的测试文件:BeanFactoryTest.java

package my.test.bean;import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;import static org.junit.Assert.*;/*** * @author linmengmeng* @since 5.0*/
@SuppressWarnings("deprecation")
public class BeanFactoryTest {@Testpublic void testSimpleLoad() {BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("/my/test/bean/beanFactoryTest.xml"));MyTestBean testBean = (MyTestBean) beanFactory.getBean("myTestBean");assertEquals("testStr", testBean.getTestStr());}
}

右键testSimpleLoad方法,Run as 可以看到左侧的小绿条,证明我们这个测试通过了。

看到绿条出现的那一刻,真的是舒服,折腾了半天终于弄好了,哈哈。

看似简单的几行代码,Spring究竟做了哪些工作呢?这个就是我们需要了解的了。源码之旅从今天就开始了,小伙伴们让我们一起学习吧,后续有机会我会接着分享自己的源码学习记录。

最后贴上一份知秋大佬翻译的Spring源码的中文文档,感觉是真的良心之作了,对于我这种英语渣渣来说,中英文对照看,是真的太棒了。

Spring Framework 5.0.0.M3中文文档

Spring Framework 5.0.0.M3英文文档 提取码: xvdy

备用地址: 提取码: t6mi

Spring Framework 各个版本源码文档(英文) 可以下载PDF文档,比如我需要下载5.0.0.M3版本的文档,打开前面的链接之后,选择5.0.0.M3,然后依次打开目录5.0.0.M3/spring-framework-reference/pdf/spring-framework-reference.pdf,在预览界面上右键,然后另存为即可。


补充:

1. AJDT插件的安装


本来打算把自己写的测试用例同步到github上呢,结果把项目给弄崩了,然后试着这个博客再重新编译了一次,完美编译和上传到github上。不过这次搞好了那个AspectJ插件的安装,虽然版本和我用的Eclipse版本不一致,但还是装上了。

这里放上AJDT的页面链接:https://www.eclipse.org/ajdt/downloads/

目前最新的版本是适用于Eclipse 4.10的,我使用的是4.11,但是我还是装了这个。

使用eclipse导入spring-framework-5.0.x源码相关推荐

  1. Spring Framework 核心原理与源码解析-大纲

    读Spring Framework的源码的目的是什么? Spring源码阅读的难度在于其呢内容庞大,并不是里面有很复杂的算法,需要高智商才能理解.所以你搞懂了Spring的源码并不能说明你有多聪明,但 ...

  2. eclipse导入spring源码二(丢失的spring-asm-repack和spring-cglib-repack)

    在上一篇eclipse导入spring源码一 中已经完成一部分了,但是整个项目代码依然有报错: 很明显的错误,就是找不到jar(spring-asm-repack-5.0.1.jar和spring-c ...

  3. Jmeter-3.0的源码导入eclipse并执行

    最近在研究jmeter二次开发,所以需要先jmeter导入Eclipse,后续还需要学习jmeter源码以及二次开发的相关知识,到时候也会分享出来,下面是jmeter导入Eclipse的过程 首先去官 ...

  4. 具有Java 8支持的Spring Framework 4.0.3和Spring Data Redis 1.2.1

    Spring Framework 4.0.3 正如Spring社区宣布的那样,Spring Framework 4.0.3现在可用. 它是上周Java 8发布后框架的第一个版本,因此它是使用OpenJ ...

  5. 振作起来– Spring Framework 4.0即将来临!

    几天前,SpringSource 宣布流行的Spring框架的4.0版本正在开发中. 下一个迭代将是Spring Framework 4.0! 如SpringSource所言,即将发布的版本的重点是& ...

  6. Spring学习总结(23)——Spring Framework 5.0 新特性

    Spring Framework 5.0 是自 2013年12月版本 4 发布之后 Spring Framework 的第一个主发行版.Spring Framework 项目的领导人 Juergen ...

  7. Ubuntu16.04编译android6.0.1源码记录

    目录 目录 一.安装环境 二.下载源码 1.下载repo 2.初始化repo 3.同步源代码 关于驱动 三.编译源码 四.导入源码到AS 五.刷入真机 六.修改源码 总结: 3.同步源代码 关于驱动 ...

  8. Spring3.0.5源码扩展支持AOP 获取HttpServletResponse

    Spring3.0.5源码扩展支持AOP 获取HttpServletResponse.老项目直接升级Spring版本风险无法评估,所以直接扩展Spring包支持低版本没有的功能. 目录 Spring扩 ...

  9. Spring源码深度解析(郝佳)-Spring 常用注解使用及源码解析

      我们在看Spring Boot源码时,经常会看到一些配置类中使用了注解,本身配置类的逻辑就比较复杂了,再加上一些注解在里面,让我们阅读源码更加难解释了,因此,这篇博客主要对配置类上的一些注解的使用 ...

  10. Ubuntu20.4 Android-9.0.0_r46源码下载编译

    Ubuntu20.4 Android-9.0.0_r46源码下载编译调试 安装Ubuntu虚拟机 ubuntu镜像下载地址: https://ubuntu.com/download 官网下载地址较慢可 ...

最新文章

  1. 简述安装Tsurugi Linux发行版
  2. bzoj 1024 [ SCOI 2009 ] 生日快乐 —— 递归
  3. linux升级tls,为CentOS升级OpenSSL 让Nginx支持TLS 1.2
  4. 设计模式(一)预备知识
  5. jQuery 拖拽窗体
  6. 华为OJ平台——整形数组合并
  7. 建筑电气工程设计常用图形和文字符号_想要识图无忧?电气工程图图形符号全能图解,电工最爱识图助手...
  8. 马斯克公布柏林超级工厂航拍 白雪皑皑仍在施工
  9. 64位Win7下用VS2010编译OpenSSL
  10. 创建图片mat_OPENCV(二)——Mat类与几个函数的简介
  11. 我在试验Memcached,你的项目怎么处理缓存?
  12. java 算法基础之三合并排序法
  13. 整理了一些产品经理书籍,看看有没有适合你的
  14. 英文系统下手工安装五笔86版
  15. php fatal error: cannot redeclare,Fatal error: Cannot redeclare 常见问题_PHP教程
  16. Android Studio开启DDMS查看手机文件
  17. 醉林疯的OJ 1055: 兔子繁殖问题
  18. 【笔记】SQL查询语句的基本使用方法
  19. 菜鸟教程JVM优化,看一篇就够了!
  20. gitlab ip变更runner拉取代码失败、shell启动springboot项目启动起来。

热门文章

  1. (三)手眼标定结果的应用
  2. 带你认识Oracle索引类型(全面总结)
  3. QT 5.9.0下载安装及配置教程
  4. 计算机进入局域网共享,win10打开局域网共享的四个步骤——亲测有效
  5. 解决局域网访问共享工具
  6. 哈希表---开链法解决哈希冲突
  7. 批量 材质 调整_超实用的3dmax技巧,教你如何批量处理材质
  8. ArcGIS知乎干货教程大集合
  9. PR视频剪辑教程--视频特效和转场
  10. 2寸的照片长宽各是多少_2寸照片的尺寸,1寸和 2 寸相片具体大小尺寸是多