编译spring原码

1.下载原码

spring原码下载地址链接: github地址
最好选择一个release版本,毕竟发布版稳定,上述连接指向的是5.2.0 release

2.配置gradle

由于spring源码是用gradle管理的。为了能顺利得下载项目所需的jar包,因此要先配置一下gradle,将阿里云的仓库配置上去。总共需要添加两处
进入源码的根目录,找到build.gradle,添加以下内容:
repositories {
maven{ url ‘https://maven.aliyun.com/nexus/content/groups/public/’ }
maven{ url ‘https://maven.aliyun.com/nexus/content/repositories/jcenter’}
}

这里是引用
在这里插入图片描述

ps:如果后期编译时报如下错误
在这里插入图片描述
可以尝试把下面的内容删掉
在这里插入图片描述

3.预编译spring-oxm模块

在根目录下打开命令行窗口,执行命令 :
gradlew.bat :spring-oxm:compileTestJava

不建议用git命令行!不建议用git命令行!不建议用git命令行!
如下图,提示编译成功即可:
在这里插入图片描述

4.导入idea中

导入的时候注意选择gradle
(其中build.gradle相当于maven的pom.xml)
导入之后,idea要下载一大堆依赖,并重新构建,花费了好几分钟。
gradle下载jar包的存放目录:
C:\Users\用户名|.gradle\caches\modules-2\files-2.1
(2)配置idea
导入完成之后需要配置一下idea.

i 配置jdk
在这里插入图片描述
在这里插入图片描述

ii 配置maven
在这里插入图片描述

iii 配置gradle
在这里插入图片描述

(3)移除spring-aspects模块
由于spring-aspects模块无法被JVM编译, 所以在idea中直接打开该模块中的一些文件时是会报错的, 因为类的关键字不是class, 而是 aspect.
该关键字只能被AJC编译器识别并编译.

为了解决这个问题, 有两种处理方式.
要么从网上下载一个AJC编译器, 并在idea中配置一下;
要么直接将spring-aspects从源码中移除.
此处,笔者选择后者.
在这里插入图片描述

在这里插入图片描述

这里注意,由于移除后spring-aspects还停留在idea左侧的项目树里,如下:
在这里插入图片描述

于是我直接选择delete,将其从硬盘上删除。但是发现,如果从硬盘删除后,重新编译spring源码,会遇到如下问题:

为了能顺利编译通过,笔者建议只把spring-aspect移除即可,不用在硬盘上删除。

附上移除spring-aspects后重新编译的效果图:

至此,spring源码成功导入idea并编译成功。5.参考文章

5.1 参考如下

https://blog.csdn.net/u011651342/article/details/119116619
https://blog.csdn.net/csdnerM/article/details/128567937

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/671203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker安装zpan

安装 1.创建数据库 docker run -di --namezpan_mysql -p 3309:3306 -e MYSQL_ROOT_PASSWORD123456 mysql 2.手动新建数据库zpan 3.创建目录 mkdir -p /opt/zpan cd /opt/zpan 4.编写配置文件 vim config.yml #详细配置文档可参考: https://zpan.space/#/zh…

机器学习之DeepSequence软件使用学习1

简介 DeepSequence 是一个生成性的、无监督的生物序列潜变量模型。给定一个多重序列比对作为输入,它可以用来预测可获得的突变,提取监督式学习的定量特征,并生成满足明显约束的新序列文库。它将序列中的高阶依赖性建模为残差子集之间约束的非…

2024/2/6学习记录

ts 因为已经学习过了 js ,下面的都是挑了一些 ts 与 js 不同的地方来记录。 安装 npm install -g typescript 安装好之后,可以看看自己的版本 ts基础语法 模块 函数 变量 语法和表达式 注释 编译 ts 文件需要用 tsc xxx.ts ,js 文件…

css鼠标悬浮动效

展示效果图 css样式 完整代码复制体验&#xff08;图片就不提供了&#xff0c;自己随便找一些&#xff09; 模板部分 里面的事件只是为了做路由的跳转&#xff0c;就不展示出来了 <div class"canvas-main"><div class"all" mouseover"hid…

《计算机网络简易速速上手小册》第8章:软件定义网络(SDN)与网络功能虚拟化(NFV)(2024 最新版)

第8章&#xff1a;软件定义网络&#xff08;SDN&#xff09;与网络功能虚拟化&#xff08;NFV&#xff09; 文章目录 8.1 SDN 架构与原理 - 智能网络的构建积木8.1.1 基础知识8.1.2 重点案例&#xff1a;使用 Python 控制 OpenFlow 交换机准备工作Python 脚本示例 8.1.3 拓展案…

C++ STL精通之旅:向量、集合与映射等容器详解

目录 常用容器 顺序容器 向量vector 构造 尾接 & 尾删 中括号运算符 获取长度 清空 判空 改变长度 提前分配好空间 代码演示 运行结果 关联容器 集合set 构造 遍历 其他 代码演示 运行结果​编辑 映射map 常用方法 构造 遍历 其他 代码演示1​编…

【VSTO开发-WPS】下调试

重点2步&#xff1a; 1、注册表添加 Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\kingsoft\Office\WPP\AddinsWL] "项目名称"""2、visual studio 运行后&#xff0c;要选中附加到调试&#xff0c;并指定启动项目。 如PPT输入WPP搜…

Java锁到底是个什么东西

一、java锁存在的必要性 要认识java锁&#xff0c;就必须对2个前置概念有一个深刻的理解&#xff1a;多线程和共享资源。 对于程序来说&#xff0c;数据就是资源。 在单个线程操作数据时&#xff0c;或快或慢不存在什么问题&#xff0c;一个人你爱干什么干什么。 多个线程操…

【Go语言成长之路】创建Go模块

文章目录 创建Go模块一、包、模块、函数的关系二、创建模块2.1 创建目录2.2 跟踪包2.3 编写模块代码 三、其它模块调用函数3.1 修改hello.go代码3.2 修改go.mod文件3.3 运行程序 四、错误处理4.1 函数添加错误处理4.2 调用者获取函数返回值4.4 执行错误处理代码 五、单元测试5.…

SIMD学习笔记2:高斯卷积计算优化

https://github.com/gredx/simd-parallel-conv https://zhuanlan.zhihu.com/p/419806079 https://www.cnblogs.com/Imageshop/p/9069650.html https://zhuanlan.zhihu.com/p/308004749 https://zhuanlan.zhihu.com/p/83694328 SSE图像算法优化系列十八&#xff1a;三次卷积插值…

LeetCode、198. 打家劫舍【中等,一维线性DP】

文章目录 前言LeetCode、198. 打家劫舍【中等&#xff0c;一维线性DP】题目及分类思路线性DP&#xff08;一维&#xff09; 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注…

假期2.6

一、填空题 1、一个类的头文件如下所示&#xff0c;num初始化值为5&#xff0c;程序产生对象T&#xff0c;且修改num为10&#xff0c;并使用show()函数输出num的值10。 #include <iostream.h> class Test { private: static int num; public: Test(int); void sho…

Python循环语句——for循环的基础语法

一、引言 在Python编程的世界中&#xff0c;for循环无疑是一个强大的工具。它为我们提供了一种简洁、高效的方式来重复执行某段代码&#xff0c;从而实现各种复杂的功能。无论你是初学者还是资深开发者&#xff0c;掌握for循环的用法都是必不可少的。在本文中&#xff0c;我们…

element ui表格手写拖动排序

效果图&#xff1a; 思路&#xff1a; 重点在于&#xff1a;拖动行到某一位置&#xff0c;拿到这一位置的标识&#xff0c;数据插入进这个位置 vueuse的拖拽hooks useDraggable 可以用&#xff1b;html5 drag能拖动行元素&#xff1b;mounsedown、mounsemove时间实现拖拽 页…

【Iceberg学习四】Evolution和Maintenance在Iceberg的实现

Evolution Iceberg 支持就底表演化。您可以像 SQL 一样演化表结构——即使是嵌套结构——或者当数据量变化时改变分区布局。Iceberg 不需要像重写表数据或迁移到新表这样耗费资源的操作。 例如&#xff0c;Hive 表的分区布局无法更改&#xff0c;因此从每日分区布局变更到每小…

2023年03月CCF-GESP编程能力等级认证C++编程二级真题解析

一、单选题(每题2分,共30分) 第1题 以下存储器中的数据不会受到附近强磁场干扰的是( )。 A.硬盘 B.U盘 C.内存 D.光盘 答案:D 第2题 下列流程图,属于计算机的哪种程序结构?( )。 A.顺序结构 B.循环结构 C.分支结构 D.数据结构 答案:C 第3题 下列关…

C++设计模式之工厂模式

介绍与作用 工厂模式的作用主要是为了封装对象的创建&#xff0c;使得调用者在使用类时不必记住太多繁杂的类名即可创建对应类的对象 为了说明工厂模式&#xff0c;我们首先准备几个汽车类&#xff0c;如下 class Car { public:Car(string name):_name(name){};virtual void s…

告别2023,你好,2024

夜幕降临&#xff0c;心中涌起一股暖流&#xff0c;那是家的方向。是的&#xff0c;岁月如梭&#xff0c;又到了一年的尾声。明天&#xff0c;当第一缕晨光照进车窗&#xff0c;我大概已置身于故乡的怀抱。 半载光阴&#xff0c;仿佛只是眨眼瞬间。在这段时光里&#xff0c;有些…

博弈论,LeetCode 1686. 石子游戏 VI

一、题目 1、题目描述 Alice 和 Bob 轮流玩一个游戏&#xff0c;Alice 先手。 一堆石子里总共有 n 个石子&#xff0c;轮到某个玩家时&#xff0c;他可以 移出 一个石子并得到这个石子的价值。Alice 和 Bob 对石子价值有 不一样的的评判标准 。双方都知道对方的评判标准。 给你…

CTF-show WEB入门--web21

上一阶段的信息泄露已经全部完结了&#xff0c;下一阶段的爆破也由此开始啦~~~ 下面让我们看看web21,这题是个经典的爆破问题 老样子我们先打开题目&#xff0c;查看题目提示&#xff1a; 我们可以看到题目提示为&#xff1a; 爆破什么的&#xff0c;都是基操 还有这题题目…