2.1 Spring5源码--源码编译
一. 准备工作
1. . 编译环境
- maven
- jdk8
- idea
2. 编译版本:
SpringV5.2.7RELEASE+GradleWapper+jdk1.8.0_131编译
二. 源码下载
git地址: 进入https://github.com/spring-projects/spring-framework
Spring的源码是发布在github上面的
版本号介绍
M:
M1,M2,…中的M是milestone的简写,意思是里程碑,代表着有重大改进的版本。
三. 构建工作准备
安装源码有两种方式:
第一种: 下载spring使用的对应的Gradle版本,安装
第二种: 使用自带的gradleWrapper.
备注: 我在导入项目到idea的时候, 不能够选择使用的gradle编译类型(使用系统的gradle还是gradleWrapper), 所以, 我是自己安装了Gradle, 然后编译的.
查看spring源码中gradle的版本. 下载对应版本的gradle.
在gradle-wrapper.properties中查看版本号
我们看看到spring5.2.7.RELEASE对应的gradle版本是5.6.4-bin.zip. 我们下载这个文件.
网盘链接: https://pan.baidu.com/s/1NduYeCVYJxDbd4YX1XcIEw 密码: dqcq
如果使用方法二, gradleWrapper会自动下载, 这是官方推荐的方式. window平台的idea可以选择使用gradleWrapper的方式.
四. 编译Spring源码项目
1. 修改build.gradle
这个文件就相当于我们Maven的pom.xml 管理项目的依赖等配置
设置镜像
repositories {
maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/'}
maven{ url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
mavenCentral()
maven { url "https://repo.spring.io/libs-spring-framework-build" }
}
2. 编译compileTestJava模块
进入到源码所在文件夹, 执行一下命令. 我的是mac本, 所以需要加./, 如果是windows本就不需要加
./gradlew :spring-oxm:compileTestJava
配置了镜像很快(一两分钟)就能编译完成, 如果要很久说明你的镜像没起作用
3. 导入项目到idea中, 进行编译
我这里导入代码, 自动就会进行编译了. 不需要额外的操作. 这个和idea的版本有关,我的idea是2020.1的
最后提示finished就ok了.
五. 测试源码编译是否成功
1. 添加测试模块代码
new->model->gradle-->输入模块名称
设置项目名, 设置好以后点击finish
2. 添加测试文件, 测试IoC功能
- 为项目添加依赖
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile(project(":spring-context"))
}
compile(project(":spring-context")) 代表本项目的
- 随意添加一个bean
package com.lxl.www;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl {
public void sayHi(){
System.out.println("Hello Spring!");
}
}
- 添加启动类
import cn.tulingxueyuan.beans.UserServiceImpl;
import javafx.application.Application;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.lxl.www")
public class MainStat {
public static void main(String[] args) {
ApplicationContext context=new AnnotationConfigApplicationContext(MainStat.class);
UserServiceImpl bean = context.getBean(UserServiceImpl.class);
bean.sayHi();
}
}
- 启动MainStat并运行. 如果看到如下输出, 表示成功了
代码依然会报错, 是一个git的异常, 这个可以忽略. 看到上面编译成功,并且有打印结果, 就说明成功了.
- 深入seajs源码系列三
- 并行爬虫和数据清洗工具(开源)
- 响应式web布局中iframe的自适应
- 简单易学的机器学习算法——协同过滤推荐算法(2)
- 详解ROC/AUC计算过程
- 汉字数组排序及如何检测汉字
- 简单易学的机器学习算法——主成分分析(PCA)
- 基于Xgboost + LR + Keras 建模评估用户信用状态
- canvas实现拖动页面时显示窗口视频
- 鼠标滚轮事件介绍
- Understanding delete
- objC与js通信实现--WebViewJavascriptBridge
- 简单易学的机器学习算法——岭回归(Ridge Regression)
- QQ空间(日志、说说、个人信息)python爬虫源码(一天可抓取 400 万条数据)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Spring与Mybatis的整合
- Python中的计数 - Counter类
- vue 记账本
- c/c++补完计划(三): 素数统计
- Python正则表达式(上)
- 附001.Nginx location语法规则
- 016.Nginx HTTPS
- 架构师写的BUG,非比寻常
- Python爬虫获取豆瓣TOP250电影详情
- docker容器常用命令
- MapReduce之自定义分区器Partitioner
- MySQL ORDER BY,GROUPBY 与各种JOIN
- (三) Mybatis动态SQL语句 - Titan的Mybatis系列学习笔记
- (二) 使用Mybatis完成CRUD操作 - Titan的Mybatis系列学习笔记
- 轻松使用纯css3打造有点意思的故障艺术(附React加强组件版)