(最新)Spring5.1.x源码编译 + IDEA + GRADLE

最新Spring5.1.x源码编译 + IDEA + GRADLE版

    • 环境准备
    • 部分相关链接地址
    • 开启building模式
    • 将spring5.1.x源码导入IDEA
    • 当项目构建完成之后,便可开始编译,直接在moudle中Run All Tests即可
    • 测试我们编译好的spring源码构建spring项目是否可用

记java小白的一次源码编译

环境准备

  1. spring源码版本:spring-framework-5.1.x
  2. gradle版本:gradle-5.4
  3. jdk版本:1.8.0_112
  4. IntelliJ IDEA版本:2018-03
  5. groovy版本:2.5.8
  6. kotlin版本:1.2.71
  7. os 版本 : windows 10

部分相关链接地址

  1. 阿里云仓库:https://maven.aliyun.com/repository/spring-plugin
  2. gradle下载地址:https://services.gradle.org/distributions/
  3. spring5.1.x源码下载:https://github.com/search?q=spring-framework&type=

开启building模式

  1. 下载gradle去官网下载,要求gradle版本最好在4.2版本以上,小编这里选择的是gradle5.4版本。这里我们选择安装 gradle-5.4-all.zip包(注: 如果不关注源码,推荐使用gradle-5.4-bin.zip,因为这个包会少占用你点磁盘空间,咯咯咯。。。)(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第1张图片
    配置gradle环境变量,过程类似jdk环境变量配置,小白可自行百度,最终出现如下效果,即OK。
    (最新)Spring5.1.x源码编译 + IDEA + GRADLE_第2张图片

  2. GitHub下载spring源码去官网下载,搜索栏上搜索spring旗下的子项目spring-framework,找到我们需要工程源码,并下载当前最新版本源码,具体操作如下:
    (最新)Spring5.1.x源码编译 + IDEA + GRADLE_第3张图片

进入到工程内部,选择当前最新版本,然后进行下载。
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第4张图片
点击下载这里我们可以通过 方式一:Git直接clone方式二:下载zip包; 然后解压使用,这里由于网络原因,小编选择的是下载zip包。(小编拼不起网速和硬件)咯咯咯。。。
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第5张图片
解压缩源码文件把上面下载好的zip包解压缩到我们的目录中,目录结构如下:

注意:这里要着重关注下面图片中的几个标红文件。最好都阅读一下
build.gradle:文件包含项目构建所使用的脚本;
settings.gradle:文件将包含必要的一些设置,例如,任务或项目之间的依懒关系等;

(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第6张图片
查看import-into-idea.md文件需要我们认真阅读一下红色标框内的内容。主要阅读内容如下:

1.因为其他项目需要依赖spring-core和spring-oxm,所以我们导入后需要先编译这两个包;
2.spring-aspects需要依赖三方jar,精通aop的同学应该知道spring-aop和aspectj的关系,在使用注解方式实现spring-aop的时候,需要导入aspectj的jar,这里编译可能会报错,不影响编译使用,先不处理;
3.使用工具编译时,可能会出现内存溢出情况,这里我们编译时需要增加相关参数;
          -XX:MaxPermSize=2048m -Xmx2048m -XX:MaxHeapSize=2048m
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第7张图片
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第8张图片
在IDEA的setting中设置gradle相关配置信息具体操作如下:
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第9张图片

将spring5.1.x源码导入IDEA

源码导入IDEA中基于gradle方式
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第10张图片
修改build.gradle文件

修改原下载jar包路径:https://repo.spring.io/plugins-release
修改为aliyun地址:https://maven.aliyun.com/repository/spring-plugin
(可以提高我们下载jar包的效率,节省编译时间)

(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第11张图片
在映射地址改到aliyun仓库后需要注意的问题

在build.gradle文件中,原先人家spring源文件中定义好的一些默认jar包版本,可能在我们的aliyun仓库并不能找到,这就需要我们后面手动替换出问题的jar包版本了,这里需要先留个印象。如下位置:
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第12张图片

在settings.gradle文件中注释掉aspects先将其注释掉,不编译它,避免一些第三方依赖影响我们的进度。
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第13张图片
等待IDEA build完成

这里因为我们偷偷的换了aliyun仓库地址,我们等待个十几分钟应该就OK了,就不需要再回到过去那个拼网速拼机器的时代了,咯咯咯。。。。
build过程中可能出现以下问题:

jdk版本问题其它小编的博客中有提到,但是小编可能还算幸运没有遇到这个问题,咯咯咯。。。。这个引用其它博主的图片介绍一下。如果有下图情况,那么你可能需要更换一下jdk版本了。
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第14张图片
No such property问题出现如下错误,点击open file,将框中内容注释即可(这个问题小编也没有遇到,所以小编这个文件的这个配置并没有被注释掉,然后最终编译成功也是没有问题的,咯咯咯。。。)
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第15张图片
找不到jar包问题这就是我们上面说过的需要关注的那些jar包的初始值版本可能在aliyun仓库找不到对应版本(毕竟仓库更新没有这个及时,最新版本可能没有)

从如下图片我们可以确定两点信息:
1.先出现问题的模块
2.找不的jar包的版本及路径
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第16张图片
这里我们也可以通过cmd窗口的方式编译构建,也是同样的报错信息
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第17张图片
那么问题的根源,出现在哪里?这里找到一个版本号变量,那么变量在哪里初始化的呢?
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第18张图片
继续找,找到初始化位置。
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第19张图片
这里只列举了一个jar包的问题,实际build过程中,这些初始化版本里有好些jar包,在目前的aliyun仓库里都找不到对应的版本,所以我们只能对出现问题的jar包,在aliyun仓库里进行核对版本号,替换成aliyun有的最新版本号的jar包版本。那么问题就OK了吗?

曙光就在眼前问题又来了,咯咯咯。。。

打开我们build视图窗口,发现一切都像想象中的完美,这时候高兴就有点太早了。
然后打开我们的Gradle视图窗口,这个时候的你是不又郁闷了呢?来往下看…
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第20张图片
继续往下看

(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第21张图片

那么发现了问题,我们就要解决问题,where?
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第22张图片
找问题的根源点 what?
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第23张图片
解决问题:把我们暂时用不到,不关心的一些jar包都注释掉就OK了
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第24张图片
走到这里,只到我们把所有的小波浪线处理完之后,那么就已经OK了。

当项目构建完成之后,便可开始编译,直接在moudle中Run All Tests即可

这里借张图片来说明,咯咯咯。。。
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第25张图片
如果出现依赖报错,如下执行命令,即可下载相应jar包
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第26张图片
完成之后,如此依次编译spring-oxm,spring-context,spring-bean即可。

测试我们编译好的spring源码构建spring项目是否可用

  1. 在工程目录下,新建moudle模块。注意:我们父工程是基于gradle编译构建的,所以我们这里新建的moudle也应该是基于gradle方式创建出来的模块,而不要选择maven方式。
    2.在我们新建的moudle下的build.gradle文件中引入对应的依赖即可
    (最新)Spring5.1.x源码编译 + IDEA + GRADLE_第27张图片

相关java代码如下:

1.Test.java文件
/**
 * 测试spring源码编译结果是否可用
 */
public class Test {
	public static void main(String[] args) {
		AnnotationConfigApplicationContext ac
				= new AnnotationConfigApplicationContext(AppConfig.class);
		UserDao userDao = ac.getBean(UserDao.class);
		userDao.printInfo();
	}
}

2.UserDao.java文件
@Repository
public class UserDao {
	public void printInfo(){
		System.out.println("final success");
	}

}


3.AppConfig.java

@Configuration
@ComponentScan("com.dao")
public class AppConfig {
}

我们运行Test测试类中的main方法,正确输出,至此,spring5.0.x项目构建编译完成。
(最新)Spring5.1.x源码编译 + IDEA + GRADLE_第28张图片

你可能感兴趣的:(sping相关,Java)