1.Spring5.0
Spring 5.0
是在2013年发布Spring 4
后的第一个大版本.该次升级也更新了不少的新特性.
基本可以归为如下几类:
- JDK版本升级
- Core框架修订,核心容器更新
- Kotlin函数式编程
- 响应式编程模型
- 测试改进
- 额外库支持
- 停止维护一些特性
升级内容的详细信息可以参考 whats-new-in-spring-framework-5 和 Spring Framework 5.0 新特性
2.编译源码的原因
如果想要深入理解Spring
的特性并学习优秀开源项目的编程范式,必然要到源码中分析实现细节.但仅通过view代码的形式是无法明晰某些复杂逻辑的.
Spring
的源码中提供了很多单元测试,我们可以通过Debug
单元测试的形式来加深对组件的理解.
3.踩坑细节
1.版本控制工具Gradle
Gradle
虽然特性优于Maven
,且有完善的task体系.但终究是个战未来的工具,对于大多数人来说Gradle
还是一个相对陌生的东西.
但我们的目的是编译Spring
源码,对于技术栈中没有Gradle
的人来说Gradle
就成了一道绕不过的坎.
我使用的Gradle
版本为5.5.1.
在运行build.gradle
的过程中,由于连接的依赖仓库为外网仓库,所以网速惨不忍睹.我build
了两个小时+都没有完成.
这时有两个解决方案.
- 修改中央仓库地址
将build.gradle
中的maven中央仓库地址更换为阿里云的私服http://maven.aliyun.com/nexus/content/groups/public/
依赖中有些内容是私服中所没有的,解决方案是先使用私服把能下载的依赖都下载了,再切回中央仓库将剩余依赖下载,可以节省很多时间.
- 使用代理
有梯子的小伙伴可以直接使用代理下载依赖,速度会快很多.
2.spring-core核心代码报错
spring-core编译时CoroutinesUtils
找不到.
运行build.gradle
后,会在spring-core-coroutines
包中生成build
文件夹,将build
中libs
的内容导入到spring-core
的依赖中即可解决该问题.
3.build顺序问题
由于spring-framework
内的组件大部分都引用了spring-oxm
和spring-core
.所以需要提前先编译这两个包
,否则直接编译其他包会显示缺依赖而直接失败.
运行这两个包内的compileTestJava
Task.
运行完成后,就可以继续编译我们常用的组件,例如:spring-beans
和spring-context
了.
4.idea中kotlin插件冲突问题
Error:Kotlin: [Internal Error] java.lang.LinkageError: loader constraint violation: loader (instance of org/jetbrains/kotlin/cli/jvm/plugins/PluginURLClassLoader$SelfThenParentURLClassLoader) previously initiated loading for a different type with name "kotlin/sequences/Sequence"
直接关闭idea的kotlin插件即可.
5.关于spring-aspects的问题
由于引用了IntelliJ IDEA未知的方面类型,因此spring-aspects不会编译.可以从项目中排除’spring-aspects’以避免编译错误.
4.reference
- import-into-idea
- IDEA-64446
- ktor/issues
- spring-framework
- gradle
- whats-new-in-spring-framework-5
- Spring Framework 5.0 新特性
5.转载
本文遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。