Spring源码编译-for mac
超详细的spring源码编译
记:编译成功时间:2023.08.19
环境准备:
1.idea 2023.1.1 Community Edition
2.jdk1.8
3.gradlegradle-5.6.4
4.spring源码(版本:spring-framework-v5.2.25.RELEASE)
一.spring源码下载
github 加速网站,速度快,有条件的可以去github下载。
https://gitcode.net/mirrors/spring-projects/spring-framework?utm_source=csdn_github_accelerator


二、gradle的安装
(说明:将源码包解压以后,gradleWraper中的gradle可以远程下载gradle,也就是在spring-framework-5.2.12.RELEASE\gradle\wrapper\gradle-wrapper.properties有相应的体现。但是我没有使用远程下载,因为自己尝试了好几次,都会失败,所以自己在本地安装了一个gradle。上教程。)
gradle的下载
选择版本很重要,千万不要随意去选择一个版本,要不然后面可能会出很多的问题。版本参考spring-framework-v5.2.25.RELEASE\gradle\wrapper\gradle-wrapper.properties文件中的相应版本,如下图:

gradle下载链接:
https://gradle.org/releases/
(选择对应的binary-only版本就行)

gradle配置参考:
https://www.cnblogs.com/vitoboy/p/12487648.html
三.修改spring源码中的一些地方
1.因为我们自己配置了gradle,所以需要修改gradle\wrapper\gradle-wrapper.properties文件内容,让它使用我们自己配置的gradle,要不然它还是会去远程下载。
原文件是这样:

将distributionUrl修改成我们自己的gradle压缩包路径,如下图:
distributionUrl=file\:///Users/eistert/Documents/do_not_delete/gradle-5.6.4-bin.zip
2.同样在build.gradle文件中找到repositories部分,添加阿里云镜像,这样编译会更快,如下图:

maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/'}
maven{ url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
maven { url "http://repo.springsource.org/plugins-release" }
3.找到settings.gradle文件并打开,同样找到找到repositories部分,添加下面代码
maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/'}

五.将源码导入idea
1.直接使用idea打开源码那个文件夹就行
2.如果导入进去后就开始编译了,就需要暂停编译,需要修改一些配置,要不然他还是会去远程下载gradle,我们自己本地的就无效。

对这个配置有个比较重要的地方说明一下:Build and run using 和 Run tests using这两个选项不要使用默认的,选择idea来进行编译会快很多(我测试过了,快了不是一点点,是很多)
3.然后就可以点击下方的build开始编译了,如下图

最后如果全是绿勾勾说明编译成功。
六.测试
创建测试gradle module.


package com.eistert.spring.test;import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@Configuration
@ComponentScan("com.eistert.spring.test")
public class EistertSpringTestApplication {public static void main(String[] args) {ApplicationContext context = new AnnotationConfigApplicationContext(EistertSpringTestApplication.class);UserServiceImpl bean = context.getBean(UserServiceImpl.class);bean.sayHello();}
}
package com.eistert.spring.test;import org.springframework.stereotype.Service;@Service
public class UserServiceImpl {public void sayHello() {System.out.println("你好呀spring!");}
}
理论上应该出现

但实际出现的是


百度了一下是 Kotlin 版本过低的问题,于是升了一下Kotlin版本

还是老样子,先这样吧。将就着看吧,问题真多。。。。。
参考文章
spring源码编译(spring,gradle,idea)
https://blog.csdn.net/qq_45750556/article/details/113244361
Spring 源码阅读环境的搭建
https://zhuanlan.zhihu.com/p/315023187
mac环境安装Gradle及配置
https://www.cnblogs.com/vitoboy/p/12487648.html
相关文章:
Spring源码编译-for mac
超详细的spring源码编译 记:编译成功时间:2023.08.19 环境准备: 1.idea 2023.1.1 Community Edition 2.jdk1.8 3.gradlegradle-5.6.4 4.spring源码(版本:spring-framework-v5.2.25.RELEASE) 一.spring源码下载 github 加速网站&…...
视频汇聚平台EasyCVR安防监控视频汇聚平台的FLV视频流在VLC中无法播放的问题解决方案
众所周知,TSINGSEE青犀视频汇聚平台EasyCVR可支持多协议方式接入,包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。在视频流的处理与分发上,视频监控…...
中间件:RocketMQ安装部署
单机部署 下载 cd /opt/soft/archive wget https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip unzip -d ../ rocketmq-all-4.9.4-bin-release.zip配置 broker.conf 的brokerIP1 为公网ip 启动命令: nohup sh bin/mqnamesrv &a…...
leetcode-动态规划-42-接雨水
题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1…...
[静态时序分析简明教程(十一)]浅议tcl语言
静态时序分析简明教程-浅议tcl语言 一、写在前面1.1 快速导航链接 二、Tcl基础知识三、Tcl的语言结构3.1 Tcl变量3.2 Tcl表达式与运算符3.3 Tcl的控制流语句3.3.1 列表遍历3.3.2 决策3.3.3 Tcl循环3.3.4 Tcl过程 3.4 其他Tcl命令3.4.1 open/close3.4.2 gets/puts3.4.3 catch3.4…...
大数据-玩转数据-Flink 网站UV统计
一、说明 在实际应用中,我们往往会关注,到底有多少不同的用户访问了网站,所以另外一个统计流量的重要指标是网站的独立访客数(Unique Visitor,UV)。 二、数据准备 package com.lyh.flink06;import lombo…...
3分钟了解下cwnd和TCP拥塞控制算法
文章首发地址 cwnd是什么? cwnd是TCP拥塞控制中的一个重要概念,全称为“congestion window”,也被称为拥塞窗口。它用于限制发送方向网络发送数据的速度,以避免网络拥塞。cwnd是一个动态的值,可以根据网络状况动态调…...
设计模式之状态模式(State)的C++实现
1、状态模式的提出 在组件功能开发过程中,某些对象的状态经常面临变化,不同的状态,其对象的操作行为不同。比如根据状态写的if else条件情况,且这种条件变化是经常变化的,这样的代码不易维护。可以使用状态模式解决这…...
无涯教程-TensorFlow - Keras
Keras易于学习的高级Python库,可在TensorFlow框架上运行,它的重点是理解深度学习技术,如为神经网络创建层,以维护形状和数学细节的概念。框架的创建可以分为以下两种类型- 顺序API功能API 无涯教程将使用Jupyter Notebook执行和…...
使用SSH隧道将Ubuntu云服务器Jupyter Notebook端口映射到本地
本文主要实现了在Ubuntu云服务器后台运行Jupyter Notebook,并使用SSH隧道将服务器端口映射到本地 1. 生成配置文件 运行以下命令生成Jupyter Notebook的配置文件: jupyter notebook --generate-config这将在用户主目录下生成一个名为.jupyter的文件夹&…...
Keepalived+LVS部署高可用集群
文章目录 KeepalivedLVS(DR)部署高可用Web集群集群环境MASTER配置BACKUP配置检查Virtual IP是否漂移IPVS检查MASTERBACKUP Real Server配置附上个人写的小脚本 测试停用Real Server某一台的Apache服务停用Master上的keepalived检测Backup是否接管资源 KeepalivedLVS(DR)部署高可…...
2023河南萌新联赛第(五)场:郑州轻工业大学
A.买爱心气球 原题链接 : 登录—专业IT笔试面试备考平台_牛客网 博弈论 : #include <iostream> using namespace std; int t,n,m; string s1 "Alice",s2 "Bob"; int main() {cin>>t;while(t--){cin>>n>>m;if (n % 3 0) {cou…...
在Orangepi5开发板3588s使用opencv获取摄像头画面
先感谢香橙派群的管理员耐心指导,经过不断的调试修改最后成功通过opencv调用mipi摄像头获取画面 就记录分享一下大概步骤希望大家少踩点坑!!!!!! 我用的固件系统是ubuntu2022.0.4 固件是&#x…...
音视频 ffmpeg命令分类查询
命令参数内容-version显示版本 -bsfs 显示可用比特流filter-buildconf显示编译配置-formats显示可用格式(muxersdemuxers)-muxers显示可用复用器-demuxers显示可用解复用器-codecs显示可用编解码器(decodersencoders)-decoders显示可用解码器-encoders显示可用编码器-bsfs显示可…...
VSCode无法从Extensions下载工具时,把工具下载到本地并添加到VSCode编辑器
从VSCode 的 Extensions 下载 下载报错:Error while installing ...... extension. Please check the log for more details. 由于内网限制(或者其他网络限制)无法正常下载扩展工具到VSCode编辑器,可以把工具下载到本地再添加到V…...
WebStrom 前端项目Debug
1. 正常启动前端项目 2. 配置webStrom的JavaScript Debugger 点击Edit Configurations添加avaScript Debug填写URL 为项目启动路径配置要Debug的浏览器-remote-allow-origins* (最重要,否则唤起的是一个about:blank空白页面) 3. 启动Debug模…...
【ARM Linux 系统稳定性分析入门及渐进12 -- GDB内存查看命令 “x“(examine)】
文章目录 gdb 内存查看命令 examine 上篇文章:ARM Linux 系统稳定性分析入门及渐进11 – GDB( print 和 p 的使用| 和 ::的使用|ptype|{<type>} <addr> ) gdb 内存查看命令 examine examine是…...
kube-prometheus 系列1 项目介绍
Prometheus 已经成为云原生监控的事实标准。整个生态包含诸多组件,为了简化安装部署和配置高可用等,社区开发了kube-prometheus项目。接下来用一系列文章介绍一下相关配置。 项目简介: kube-prometheus 是一个基于 Kubernetes 部署的 Prometh…...
深度学习在组织病理学图像分析中的应用: Python实现和代码解析
引言 组织病理学是医学的一个重要分支,它主要研究组织和细胞的形态学改变,以确定疾病的性质和发展。随着深度学习技术的进步,其在组织病理学图像分析中的应用也变得日益重要。本文旨在介绍如何使用Python和深度学习技术来处理和分析组织病理…...
kotlin的列表
在 kotlin中,列表是一种常见的数据结构,用于存储有序的元素集合。 kotlin的标准库提供了 List 接口及其实现类 ArrayList、LinkedList 等,以及一些扩展函数来操作和处理列表。 1.创建列表 // 创建一个可变列表 val mutableList mutableLis…...
LWIP内存管理踩坑实录:从pbuf泄漏到pcb耗尽,我的嵌入式网络调试日记
LWIP内存管理踩坑实录:从pbuf泄漏到pcb耗尽,我的嵌入式网络调试日记 凌晨三点,调试器上的红色LED还在闪烁。这是我连续第三个通宵追踪LWIP的内存问题——设备在运行48小时后必然崩溃,日志里满是"pbuf_alloc failed"和&q…...
【24年最新算法】首发CPO-XGBoost回归+交叉验证 基于冠豪猪优化算法-XGBoost多变量回归预测
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...
嵌入式系统SOC验证与Linux实时补丁技术解析
嵌入式系统软件工程师面试技术要点解析 1. SOC原型验证技术体系 1.1 SOC验证工作内容与方法论 SOC原型验证是芯片设计流程中的关键环节,主要工作内容包括: 功能验证:确保设计符合规范要求 性能验证:评估系统吞吐量、延迟等指标…...
Logisim音乐盒背后的数字电路:计数器、ROM与蜂鸣器如何奏出《终生误》
Logisim音乐盒背后的数字电路:计数器、ROM与蜂鸣器如何奏出《终生误》 当一段熟悉的旋律从蜂鸣器中流淌而出,很少有人会思考这背后隐藏的数字魔法。本文将带您拆解一个基于Logisim的音乐盒设计,揭示计数器如何像指挥家一样协调时序、ROM怎样扮…...
AI驱动关键词优化的SEO未来趋势与实际应用解析
本文旨在探讨AI在搜索引擎优化(SEO),特别是关键词优化领域的重要角色。文章分析了AI技术如何通过数据分析和用户行为洞察,帮助企业制定更加有效的关键词策略。AI能够实时监测市场趋势,识别用户意图,并根据这…...
OpCore-Simplify:零基础黑苹果配置终极指南,5分钟搞定复杂EFI
OpCore-Simplify:零基础黑苹果配置终极指南,5分钟搞定复杂EFI 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑苹果配置…...
高通平台USB充电背后的秘密:从SBL1阶段到Kernel的电池ID识别全解析
高通平台USB充电与电池ID识别的深度技术解析 在Android设备开发中,电源管理系统的稳定性直接影响用户体验。作为底层驱动工程师,理解高通平台从硬件到软件的完整充电流程至关重要。本文将深入剖析从XBL阶段到Kernel层的电池识别机制,揭示BATT…...
基于春联生成模型的Python爬虫数据采集与内容生成系统
基于春联生成模型的Python爬虫数据采集与内容生成系统 用技术传承文化,让AI助力创作 1. 项目背景与价值 春节是中国人最重要的传统节日,而春联则是春节文化中不可或缺的一部分。每年春节,家家户户都会贴上新的春联,表达对新年的美…...
零基础养龙虾:OpenClaw部署从入门到上手,一篇讲透!
2026年,OpenClaw(昵称 “龙虾”)凭借 “能真正动手干活” 的核心能力,成为开源AI Agent领域的顶流。它不仅能像ChatGPT一样聊天,更能自主操作电脑——整理文件、控制浏览器、发送邮件、甚至调用硬件设备。因其图标酷似…...
modelsim crack过程中显示dll文件找不到解决方法
把这几个文件放到modelsim/win64目录下,按照教程点击patch64生成license时会报错,如下找不到文件 - mgls.dll找不到文件 - mgls64.dll这个时候关闭杀毒软件进入你的 D:\modeltech64_10.5\win64 文件夹。在文件夹上方的地址栏(显示路径的地方&…...
