首页 > 编程语言 >使用 IntelliJ IDEA 构建 Spring Framework 5.3.21 源码问题解决

使用 IntelliJ IDEA 构建 Spring Framework 5.3.21 源码问题解决

时间:2023-04-01 14:36:00浏览次数:56  
标签:5.3 java IntelliJ spring IDEA gradle 源码

源码版本

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。
TEXT 复制 全屏

出现工程某些类找不到的错误

原因:大部分情况都是在 xxx.gradle 文件中使用了 optional 选项引入的依赖。

解决方案:参考其他依赖引入方式,比如将 optional 改为 api。
  分类: Spring全家桶、微服务系统环境、开发工具    

标签:5.3,java,IntelliJ,spring,IDEA,gradle,源码
From: https://www.cnblogs.com/exmyth/p/17278572.html

相关文章

  • 鸿蒙开发学习笔记-UIAbility-Router页面跳转接口源码分析
    在鸿蒙开发中,UIAbility的跳转使用router方法.在使用的时候需导入importrouterfrom'@ohos.router';该方法接口成员如下:1.interfaceRouterOptionsinterfaceRouterOptions{url:string;//跳转页面的Urlparams?:Object;//传给跳转页面的参数params......
  • java高精度定位系统源码 工厂人员定位系统源码
    这是一套java定位系统源码,工厂人员定位系统源码,UWB高精度定位系统源码,前后端分离架构,源码有演示。工厂人员定位系统,高精度的位置数据作为智能工厂数据流的重要组成部分,可实现对工厂内的人,车、物的精确定位,无缝追踪,智能调配与高效协同,可大幅提升工厂的精益生产及精细化管理水平,我们......
  • 解决IntelliJ IDEA 控制台中文乱码问题
    1、修改IntelliJIDEA全局编码、项目编码、属性文件编码上方导航栏“File→Settings…”进入配置页面,在“Editor”中下滑找到“FileEncodings”,分别将GlobalEncoding、ProjectEncoding、Defaultencodingforpropertiesfiles都设置为UTF-8。在重启之后运行程序检查控制......
  • IntelliJ IDEA技巧 格式化代码、有时候代码太乱,手动调整代码代码多的时候太浪费时间了
    系列文章目录文章目录系列文章目录第一步第二步开始使用第一步更改Java等常用代码的展示效果1、打开IDEA左上角File—>Settings。2、选择Editor—>CodeStyle—>Java(可根据实际需要更改语言)。第二步开始使用前面的工作做完之后,这里的格式化代码的快捷键才会出来试试看......
  • 开源优先队列FastPriorityQueue源码阅读
    FastPriorityQueue  源码连接:https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp  大致结构:  1节点在内存中的结构还是数组,且首节点为无意义节点,有效节点从索引1开始。(见FastPriorityQueue的T[]_nodes)  2维护的节点必须时固定的继承。(见FastPri......
  • Spark源码解析(二):Spark闭包检查
    一、理解Scala闭包:Closures1.1闭包的定义闭包就是一个函数和与其相关的引用环境组合的一个整体(实体)。进一步说,闭包是绑定了自由变量的函数实例。通常来讲,闭包的实现机制是定义一个特殊的数据结构,保存了函数地址指针与闭包创建时的函数的词法环境以及绑定自由变量。对于闭......
  • Spark源码解析(一):RDD之Transfrom算子
    一、延迟计算RDD代表的是分布式数据形态,因此,RDD到RDD之间的转换,本质上是数据形态上的转换(Transformations)在RDD的编程模型中,一共有两种算子,Transformations类算子和Actions类算子。开发者需要使用Transformations类算子,定义并描述数据形态的转换过程,然后调用Actions......
  • ETCD源码阅读(三)
    DAY2:阅读raftexample:etcd/contrib/raftexampleserveChannels()func(rc*raftNode)serveChannels(){ snap,err:=rc.raftStorage.Snapshot() iferr!=nil{ panic(err) } rc.confState=snap.Metadata.ConfState rc.snapshotIndex=snap.Metadata.Index r......
  • ETCD源码阅读(二)
    DAY1:阅读raftexample:etcd/contrib/raftexampleraftexample包括三个组件:一个基于raft的kvstore、一个RESTAPIServer、一个基于etcdraft实现的RaftNode。其中RaftNode也拥有一个Httpserver,用于与peer节点进行通信。RESTAPIServer则是这个RaftNode的client。kvs......
  • ETCD源码阅读(一)
    DAY0:ETCD架构下图中展示了etcd如何处理一个客户端请求涉及到的模块和流程。图中淡紫色的矩阵表示etcd,它包括如下几个模块:etcdserver:对外接受客户端的请求,请求etcd代码中的etcdserver目录,其中还有一个raft.go的模块与etcdraft库进行通信。etcdserver中与......