编译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 文件…

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

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

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

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

【VSTO开发-WPS】下调试

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

Java锁到底是个什么东西

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

【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.…

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

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

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

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

element ui表格手写拖动排序

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

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

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

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

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

CTF-show WEB入门--web21

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

【RPA】2分钟带你搞懂,这么火的RPA到底是什么?

2分钟带你搞懂,这么火的RPA到底是什么? 在当今数字化时代,机器人流程自动化(RPA)成为了企业数字化转型的重要组成部分。RPA是一种基于规则的软件技术,可以自动执行重复性、高度规范化的业务流程任务。 与传…

jsp教材管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 教材管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

Android应用程序的编译和打包

Android系统的APK应用程序可以有以下几种编译方式 借助系统编译:利用Android.mk 文件将众多小项目组织起来 借助IDE编译:AndroidStudio 命令行编译 : 比如利用gradle脚本编译APK应用。 一、 通过命令行编译和打包APK 编译命令(Window系…

没有联合和枚举 , C语言怎么能在江湖混 ?

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 我会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能…

探索C语言结构体:编程中的利器与艺术

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog 1. 常量与变量 1. 什么是结构体 在C语言中本身就自带了一些数据类型&#x…

LLMs之miqu-1-70b:miqu-1-70b的简介、安装和使用方法、案例应用之详细攻略

LLMs之miqu-1-70b:miqu-1-70b的简介、安装和使用方法、案例应用之详细攻略 目录 miqu-1-70b的简介 miqu-1-70b的安装和使用方法 1、安装 2、使用方法 miqu-1-70b的案例应用 miqu-1-70b的简介 2024年1月28日,发布了miqu 70b,潜在系列中的…