栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring5.0源码基于gradle构建(里面遇到了很多坑,写出来避免小伙伴受坑)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring5.0源码基于gradle构建(里面遇到了很多坑,写出来避免小伙伴受坑)

Spring5.0源码基于gradle构建

环境准备工作

1.JDK8

2.idea 2019.1版本

3.gradle-4.9-all的版本,这里我就不写其下载和配置环境变量的过程了,我贴出官网下载地址吧
gradle官网下载地址

4.Spring5.0源码,这里我是从github官网下载的,我是直接下载的压缩包,当然你也可以fork到你自己的本地仓库,然后再克隆,我是直接下载了下来,后面找时间整理一下这块的知识方便.同样我也贴出其相关的下载地址
Spring5.0源码

构建过程

1.导入从github官网下载的spring源码,注意要选择其gradle的一些配置,如2中的一些配置可以提前设置

2.配置idea的默认的gradle的环境

2.设置完毕之后,打开工程下的gradle目录->wrapper目录下的,gradle-wrapper.properties文件。因为gradle每次编译都会从官网下载指定版本,所以我们在它第一次下载完之后,将distributionUrl设置成本地文件,这样就不会每次编译都从官网下载了,如下图


3.打开build.gradle文件(这个就相当于是maven的pom文件)添加插件库以及添加阿里云镜像信息,这里的镜像和我们配置
maven的镜像是一样的,目的就是加快依赖包的下载速度,如果不配置镜像的话,可能会编译几个小时
repositories { //新增以下2个阿里云镜像 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" } maven { url "https://repo.spring.io/milestone" } // Reactor //新增spring插件库 maven { url "https://repo.spring.io/plugins-release" } }

修改保存后会自动开始构建。
等待一定时间后,构建完毕!(注意:这里只是把依赖包下载下来,其实还没有真正开始编译)
如果构建失败重新refresh几次就行了,一般就是包下载超时之类的错误

4.构建成功之后,找到 ApplicationContext 类,此时就可以开始编辑对应的文件了

5.打开后,按下Ctrl+Alt+U键,如果出现下图所示类图界面说明构建成功了!(构建过程就是找依赖对象的过程),此时可以查看Spring的源码了,但是我们需要在源码的基础上面进行修改,开发,调试,添加注释等等操作,所以需要将源码进行编译打包,下面就是将源码编译的过程

编译源码

首先要编译出spring-core,spring-oxm这个按照import-into-idea.md文档上所说也应该编译,但是我一直报错,但是不影响后续过程哦

源码测试

新建模块使用gradle构建,用来检查我们的构建的流程是否正确,如下图所示可以看出我这已经实现了其功能,即完成了我们的Spring源码的构建,即可以开始进行其相关的功能的开发了,也可以进行对代码的愉快了研究了哦

问题及解决方案

1、CoroutinesUtils找不到该类

错误信息:
Error:(354, 51) java: 找不到符号
符号: 变量 CoroutinesUtils
位置: 类 org.springframework.core.ReactiveAdapterRegistry.CoroutinesRegistrar
解决方案:
点击【File】 ->【 Project Structure】 -> 【Libraries】 -> 【+】 -> 【Java】,然后选择springframework/spring-core/kotlin-coroutines/build/libs/kotlin-coroutines-5.3.0-SNAPSHOT.jar,在弹出
的对话框中选择spring-core.main,再重新build项目即可。

2、InstrumentationSavingAgent找不到该类
错误信息:
Error:(26, 38) java: 找不到符号
符号: 类 InstrumentationSavingAgent
位置: 程序包 org.springframework.instrument
解决方案:
修改spring-context模块下的spring-context.gradle文件,找到optional(project(":springinstrument")),将optional改为compile

//optional改为compile,否则报错:找不到InstrumentationSavingAgent 
//optional(project(":spring-instrument")) 
compile(project(":spring-instrument"))

3、H2DatabasePopulatorTests > executesHugescriptInReasonableTime() FAILED
错误信息:
H2DatabasePopulatorTests > executesHugescriptInReasonableTime() FAILED
解决方案:
修改spring-jdbc模块下的spring-jdbc.gradle文件,找到optional(“com.h2database:h2”),将optional
改成compile

//报错:H2DatabasePopulatorTests > executesHugescriptInReasonableTime() FAILED 
//解决方案:将optional换成compile 
//optional("com.h2database:h2") compile("com.h2database:h2")

4、header.mismatch [SpringHeader]
该错误是修改完以上3个问题后重新对整个工程进行重新编译时报的错,这个错是我们新建的springmytest模块报的错。
这个错误其实无关紧要,是格式错误,所以可以忽略,不要管它,也用不着重新编译,我们可以直接执
Test.java中的main方法。
如果某些小伙伴有强迫症,非要全部编译成功才肯罢休,那么可以尝试修改全局配置文件,在编译的时
候把新建模块剔除在外。我没有尝试,感兴趣的可以试下

附:spring源代码各个模块作用

主要模块:
spring-core:核心模块 依赖注入IOC和DI的最基本实现
spring-beans:Bean工厂与装配
spring-context:上下文,即IOC容器
spring-context-support:对IOC的扩展,以及IOC子容器
spring-context-indexer:类管理组件和Classpath扫描
spring-expression:表达式语句

切面编程:
spring-aop:面向切面编程,CGLIB,JDKProxy
spring-aspects:集成AspectJ,Aop应用框架
spring-instrument:动态Class Loading模块

数据访问与集成:
spring-jdbc:提供JDBC主要实现模块,用于简化JDBC操作
spring-tx:spring-jdbc事务管理
spring-orm:主要集成Hibernate,jpa,jdo等
spring-oxm:将java对象映射成xml数据或将xml映射为java对象
spring-jms:发送和接受消息

web组件:
spring-web:提供了最基础的web支持,主要建立在核心容器上
spring-webmvc:实现了spring mvc的web应用
spring-websocket:主要与前端页的全双工通讯协议
spring-webflux:一个新的非阻塞函数式Reactive Web框架

报文:
spring-messaging:4.0加入的模块,主要集成基础报文传送应用

测试:
spring-test:测试组件

集成兼容:
spring-framework-bom:解决不同模块依赖版本不同问题

在整个过程中遇到了一些其他的小的问题,这个时候百度一搜就可以搜到,这里没有集中讲解,这个过程大家可以留言一块讨论,你懂得越多,你不懂的就更多,继续努力吧,少年,开始可以分析源码了哦
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/602893.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号