使用 IntelliJ IDEA 构建 Spring Framework 5.3.21 源码问题解决
源码版本
1、下载地址:https://github.com/spring-projects/spring-framework/tags
2、选择要构建的源码版本并下载,例如:5.3.21
相关环境
1、操作系统:Windows10
2、JDK 版本:Jdk17
3、IDE 工具:IntelliJ IDEA 2021.3.3
4、项目构建工具:Gradle 7.3.3
使用 IntelliJ IDEA 构建 Spring 源码步骤
1、打开 cmd 命令行工具,进入当前项目根目录,然后使用命令 gradlew.bat :spring-oxm:compileTestJava 预编译 spring-oxm 模块
2、将项目导入 IntelliJ IDEA,步骤为 File -> New -> Project from Existing Sources -> 选择项目根路径下的 build.gradle 导入
修改 jdk 版本(好像不改也行,但需要保证 java -version 命令的结果是 java 17.xxx)
1、修改 spring-oxm 模块下的 spring-oxm.gradle 配置文件:
将 JavaVersion.VERSION_1_8 改为 JavaVersion.VERSION_17
2、修改 gradle 模块下的 toolchains.gradle 配置文件:
将 JavaLanguageVersion.of(8) 改为 JavaLanguageVersion.of(17)。
将 sourceCompatibility = JavaVersion.VERSION_1_8 改为 sourceCompatibility = JavaVersion.VERSION_17。
将 jvmTarget = '1.8' 改为 jvmTarget = '17'。
遇到的问题及解决方法
预编译 spring-oxm (Windows 环境下在项目根路径执行命令 gradlew.bat :spring-oxm:compileTestJava)模块报错:org.gradle.process.internal.ExecException: Process 'command 'git'' finished with non-zero exit value 128
多半是因为你的项目源码是通过下载的方式获得,而非通过 git clone 命令克隆而来,可以不解决。
如果有强迫症,非要解决,建议通过 git clone 命令去克隆项目源码,然后重新编译。
缺少 spring-cglib-repack-xxx.jar 和 spring-objenesis-repack-xxx.jar 依赖
解决方案:
【方法一】在源码项目根路径下执行:gradle objenesisRepackJar、gradle cglibRepackJar。
【方法二】在 IntelliJ IDEA 的侧边工具打开 gradle,分别双击 spring-core -> Tasks -> other 下的 objenesisRepackJar 和 cglibRepackJar。
以上两种方法均会在项目的 spring-core\build\libs 目录下生成所需 jar 包。
在运行某些测试类时,IntelliJ IDEA 报错:Command line is too long …… 的解决办法
解决方案:
找到当前项目 .idea\workspace.xml 文件中的 <component name="PropertiesComponent">,并在其中加一行 <property name="dynamic.classpath" value="true"/>,然后重新运行。
运行时报错:No tests found for given includes: [**/Tests.class, **/Test.class]......
报错详情:
Execution failed for task ':模块名称:test'.
> No tests found for given includes: [**/*Tests.class, **/*Test.class](include rules) [......](--tests filter)
解决方案:
配置测试运行器为 IntelliJ IDEA 即可。IDEA 中的具体步骤:
1、进入 Gradle 设置页面:File -> Settings -> Build,Execution,Deployment -> Build Tools -> Gradle
2、修改:将 Gradle Projects 面板中的 Run tests using 选项值改为 IntelliJ IDEA
【说明】在 Run tests using 选项列表中,为 Gradle 项目指定测试运行器,区别如下:
1、Gradle:选择此选项将使用 Gradle 作为测试运行器。结果是在持续集成(CI)服务器上获得相同的测试结果,在命令行中运行的测试将始终在 IDE 中运行。
2、IntelliJ IDEA:选择此选项可将测试过程委派给 IntelliJ IDEA。在这种情况下,IntelliJ IDEA 使用 JUnit 测试运行器,并且由于增量编译,测试运行得更快。
3、Choose pre test:选择此选项可配置每个测试专门使用哪个测试运行器(Gradle 或 IntelliJ IDEA)。
出现 AutowiredAnnotationBeanPostProcessor.java:542: 错误: 对 determineRequiredStatus 的引用不明确
报错详情:
spring-beans\src\main\java\org\springframework\beans\factory\annotation\AutowiredAnnotationBeanPostProcessor.java:542: 错误: 对determineRequiredStatus的引用不明确
return determineRequiredStatus(
AutowiredAnnotationBeanPostProcessor 中的方法 determineRequiredStatus(MergedAnnotation<?>) 和 AutowiredAnnotationBeanPostProcessor 中的方法 determineRequiredStatus(AnnotationAttributes) 都匹配
解决方案:
将 return determineRequiredStatus(ann.asMap(mergedAnnotation -> new AnnotationAttributes(mergedAnnotation.getType())));
更改为 return determineRequiredStatus(ann.<AnnotationAttributes> asMap(mergedAnnotation -> new AnnotationAttributes(mergedAnnotation.getType())));
出现 CoroutinesUtils.java:74: 警告: [deprecation] AccessibleObject中的isAccessible()已过时
报错详情:
spring-core\src\main\java\org\springframework\core\CoroutinesUtils.java:74: 警告: [deprecation] AccessibleObject中的isAccessible()已过时
if (method.isAccessible() && !KCallablesJvm.isAccessible(function)) {
解决方案:
在 org.springframework.core.CoroutinesUtils.invokeSuspendingFunction(Method method, Object target, Object... args) 方法上加 @SuppressWarnings("deprecation") 注解即可。
编译过程中出现与 '-Werror' 有关的错误及其解决方案
原因:-Werror 的作用是将全部的 warning 当成 error。
解决方案:全局搜索 -Werror 关键字,并注释该选项。
使用高版本 jdk 时,出现:module java.base does not "opens java.lang" to unnamed module...... 错误
参考 https://blog.csdn.net/qq_27525611/article/details/108685030
原因:由 jdk9 及以上版本中引入的 Java Platform Module System 导致。
解决方案1【降级 jdk 版本】:降级至 jdk8 即可。
解决方案2【添加 VM 参数】:--add-opens java.base/java.lang=ALL-UNNAMED。
出现工程某些类找不到的错误
原因:大部分情况都是在 xxx.gradle 文件中使用了 optional 选项引入的依赖。
解决方案:参考其他依赖引入方式,比如将 optional 改为 api。
使用 IntelliJ IDEA 构建 Spring Framework 5.3.21 源码问题解决的更多相关文章
- Mybatis一级缓存和结合Spring Framework后失效的源码探究
1.在下面的案例中,执行两次查询控制台只会输出一次 SQL 查询: mybatis-config.xml <?xml version="1.0" encoding=" ...
- Mybatis的初始化和结合Spring Framework后初始化的源码探究
带着下面的问题进行学习: (1)Mybatis 框架或 Spring Framework 框架对数据层 Mapper 接口做了代理,那是做了 JDK 动态代理还是 CGLIB 代理? (2)Mappe ...
- 如何在Idea中编译构建Spring Framework 5.x
如何在Idea中编译构建Spring Framework 5.x 安装配置Gradle(略) 下载源码:git clone https://github.com/spring-projects/spr ...
- 调试 .NET Framework 源代码、.DotNetCore源码
调试 .NET Framework 源代码..DotNetCore源码 如何调试 .NET Framework 源代码 在 Visual Studio 调试器中指定符号 (.pdb) 和源文件 .NE ...
- 七、Spring之深入理解AOP源码
Spring之深入理解AOP源码 在上一篇博文中,我们对AOP有了初步的了解,那么接下来我们就对AOP的实现原理进行深入的分析. 在之前写的那个AOP示例代码当中有这样一个注解:@Enable ...
- 阿里P7终于讲完了JDK+Spring+mybatis+Dubbo+SpringMvc+Netty源码
前言 这里普及一下,每个公司都有职别定级系统,阿里也是,技术岗以 P 定级,一般校招 P5, 社招 P6 起.其实阅读源码也是有很多诀窍的,这里分享几点心得: 首先要会用.你要知道这个库是干什么的,掌 ...
- Spring框架之spring-web http源码完全解析
Spring框架之spring-web http源码完全解析 Spring-web是Spring webMVC的基础,由http.remoting.web三部分组成. http:封装了http协议中的 ...
- Spring框架之spring-web web源码完全解析
Spring框架之spring-web web源码完全解析 spring-web是Spring webMVC的基础,由http.remoting.web三部分组成,核心为web模块.http模块封装了 ...
- 各个版本spring的jar包以及源码下载地址
各个版本spring的jar包以及源码下载地址,目前最高版本到spring4.1.2,留存备用: http://maven.springframework.org/release/org/spring ...
- Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览
关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/15/springboot2_code/ 项目结构 结构分析: Spring-boot-pr ...
随机推荐
- AMBA总线架构简介
于是乎,我们想到了总线,用一个统一的接口协议,设计出一个符合要求的总线,然后将ARM核和各种外设模块挂载在总线上,这样,命令和数据似乎便可以在CPU和外设之间自由穿梭. 1 AMBA总线 AMBA,英 ...
- Java日期时间API系列36-----Jdk8中java.time包中的新的日期时间API类应用,使用LocalTime计算十二时辰。
十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰.二十四小时和十二时辰对照表: 时辰 时间 24时制 子时 深夜 11:00 - 凌晨 01:00 23:00 - 01 : ...
- 墨天轮国产数据库沙龙 | 张玮绚:TDengine,高性能、分布式、支持SQL的时序数据库
分享嘉宾:张玮绚(Wade Zhang)北京涛思数据科技有限公司(TDengine)研发VP 整理:墨天轮 导读 TDengine 是一款高性能.分布式.支持 SQL 的时序数据库,让大量设备.数据采 ...
- 怎么封装一个vue的自定义指令
自定义指令分为 全局和局部的指令 : 1. 自定义全局指令: 在 mian.js 中 ,使用 Vue.directive('指令名' , 配置对象 ) 2. 局部自定义指令 在组件中使用 direc ...
- ConsulManager应用场景2:如何优雅的使用Consul管理Blackbox站点监控
[ConsulManager介绍] Consul字段设计说明 所有数据存在一个名为blackbox_exporter的Services项中,每个监控目标为一个子Service. 每个Service使用 ...
- c++11新增内容
记录一下c++11新特性方便以后回忆 1.nullptr (对标NULL) 2.auto ,decltype(根据表达式推断类型,表达式不执行) decltype(func()) sum = 5; / ...
- delphi Image32 动画演示2
Image 32 自带的Demo,添加一些注解. unit uFrmAnimation2; interface uses Winapi.Windows, Winapi.Messages, System ...
- computed methods watch filters
computed(计算属性) 计算属性该属性里面的方法必须要有return返回值,这个返回值就是(value值). 有几个关键点 1) 计算后属性不需要在data中重复定义 2) 计算后属性必须渲染后 ...
- 解读Graph+AI白皮书:LLM浪潮下,Graph尚有何为?
历时半年,由蚂蚁集团和之江实验室牵头,联合北京邮电大学.浙江大学.西湖大学.东北大学.杭州悦数科技.浙江创邻科技.北京大学.北京交通大学.复旦大学.北京海致星图科技.腾讯.信雅达科技.北京枫清科技等单 ...
- 面向 Java 开发人员的 Scala 指南: 构建计算器,第 1 部分
Scala 的 case 类和模式匹配 Ted Neward, 主管, Neward & Associates 简介: 特定于领域的语言已经成为一个热门话题:很多函数性语言之所以受欢迎,主要是 ...