当前位置: 首页 > article >正文

【spring专题】编译spring5.3源码

文章目录1. 环境配置2. 拉取代码2.1克隆到gitee2.2 下载到本地2.3 切换分支2.4 重新导入3. 环境配置3.1 安装gradle-方法13.2 安装gradle-方法2(推荐)3.3 jdk安装aspectj3.4 idea安装AspectJ插件4. 项目配置4.1 修改build.gradle4.2 修改buildSrcuild.gradle4.3 修改gradlejvm参数可选5 配置和构建5.1 配置jdk5.2 配置gradle5.3 配置aspectj5.4 构建6 编译6.1 设置modules6.2 编译子项目6.3 编译整个项目6.4 可能的编译异常6.4.1 内存不足6.4.2 https校验异常7 简单测试7.1 新建模块7.2 引入依赖7.3 编写代码7.4 运行8 mvc例子8.1 新建模块8.2 配置8.2.1 修改build.gradle8.2.2 spring配置文件8.3 配置tomcat8.4 启动tomcat测试1. 环境配置jdk版本1.8.0_301idea版本2021.2.2系统版本win10_64位2. 拉取代码2.1克隆到giteespring的github地址https://github.com/spring-projects/spring-frameworkgit: https://github.com/spring-projects/spring-framework.git下载比较慢可以先克隆到gitee再从gitee获取下载地址导入成功后复制我们自己的下载地址如果不使用ssh下载到本地后续运行会有git的错误信息但是不影响运行2.2 下载到本地使用idea克隆到本地我下载到的目录是H盘的spring目录2.3 切换分支完成后选择5.3.x分支checkout到本地完成后是这样的,关闭当前项目并移除2.4 重新导入选择源码根目录的build.gradle重新导入导入后停止构建!!!导入后停止构建!!!导入后停止构建!!!还需要做后续的操作才能构建3. 环境配置3.1 安装gradle-方法1找到本地的文件 H:springgradlewrappergradle-wrapper.properties打开可以看到5.3.x使用的gradle版本是 gradle-7.5.1-bin.zip到官网 https://gradle.org/releases/ 找到我们需要的版本我只需下载binary-only:https://gradle.org/next-steps/version7.5.1formatbin解压后配合环境变量 GRADLE_HOME D:gradle-7.5.1然后在环境变量path添加 %GRADLE_HOME%in配置仓库 GRADLE_USER_HOME H:gradle_repository检查cmd输入 gradle -v配置文件在gradle的init.d目录下新建文件 init.gradle填入下面的内容// project allprojects{ repositories { mavenLocal() maven { url https://maven.aliyun.com/repository/central/ } maven { url https://maven.aliyun.com/repository/public/ } maven { url https://maven.aliyun.com/repository/google/ } maven { url https://maven.aliyun.com/repository/gradle-plugin/ } maven { url https://maven.aliyun.com/repository/spring/ } maven { url https://maven.aliyun.com/repository/spring-plugin/ } maven { url https://maven.aliyun.com/repository/grails-core/ } maven { url https://maven.aliyun.com/repository/apache-snapshots/ } maven { url https://jitpack.io/ } mavenLocal() mavenCentral() } } // plugin settingsEvaluated { settings - settings.pluginManagement { // Clear repositories collection repositories.clear() // Add my Artifactory mirror repositories { mavenLocal() maven { url https://maven.aliyun.com/repository/gradle-plugin/ } } } }3.2 安装gradle-方法2(推荐)将下载后的文件放在目录例如我的是 G:in_repogradlegradle-7.5.1-bin.zip打开工程的文件 gradlewrappergradle-wrapper.properties原来的配置distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists distributionUrlhttps://services.gradle.org/distributions/gradle-7.5.1-bin.zip zipStoreBaseGRADLE_USER_HOME zipStorePathwrapper/dists将distributionUrl修改为distributionUrlfile:///G:/bin_repo/gradle/gradle-7.5.1-bin.zip然后找到右侧的gradle刷新按钮点击刷新同时idea的gradle配置成gradle-wrapper.properties3.3 jdk安装aspectj下载地址https://www.eclipse.org/aspectj/downloads.php下载后使用java -jar运行安装点击next选择安装目录然后next选择aspectj要安装的目录我就安装在我的jdk目录下后面配置idea需要用到该目录然后点击install执行安装安装成功去到安装目录可以看到已经安装成功lib下的aspectjtools.jar文件后面idea需要配置到可以先记下3.4 idea安装AspectJ插件打开idea - plusins安装AspectJ插件4. 项目配置4.1 修改build.gradle项目跟目录下的build.gradle文件找到大概是290行左右repositories { mavenCentral() maven { url https://repo.spring.io/libs-spring-framework-build } }修改成repositories { mavenLocal() maven { url https://maven.aliyun.com/repository/public/ } maven { url https://maven.aliyun.com/repository/central } maven { url https://maven.aliyun.com/repository/google/ } maven { url https://maven.aliyun.com/repository/gradle-plugin/ } maven { url https://maven.aliyun.com/repository/spring } maven { url https://maven.aliyun.com/repository/spring-plugin } maven { url https://jitpack.io/ } mavenCentral() maven { url https://repo.spring.io/libs-spring-framework-build } }4.2 修改buildSrcuild.gradle打开项目的 buildSrcuild.gradle找到repositories { mavenCentral() gradlePluginPortal() }修改成repositories { mavenLocal() maven { url https://maven.aliyun.com/repository/public/ } maven { url https://maven.aliyun.com/repository/central } maven { url https://maven.aliyun.com/repository/google/ } maven { url https://maven.aliyun.com/repository/gradle-plugin/ } maven { url https://maven.aliyun.com/repository/spring } maven { url https://maven.aliyun.com/repository/spring-plugin } maven { url https://jitpack.io/ } mavenCentral() gradlePluginPortal() }4.3 修改gradlejvm参数可选项目根目录下的 gradle.properties 文件version5.3.26-SNAPSHOT org.gradle.jvmargs-Xms2048m -Xmx2048m -XX:MaxPermSize2048m org.gradle.cachingtrue org.gradle.paralleltrue kotlin.stdlib.default.dependencyfalse5 配置和构建5.1 配置jdk打开file - Project Structure选择jdk8,然后点击右下角apply应用5.2 配置gradle打开File - settings按照下面的配置好自己的gradle(前面安装gradle方法2的操作)5.3 配置aspectjsettings - Build,Execution,Deplotment - Compile - Java CompilerUse compile选择Ajc下面的Project bytecode version 选择1.8Path to aspectjtools.jar就是前面安装插件时提到的lib目录文件aspectjtools.jar记得后面红框内的必须勾选Generate debug indo和Delegate to javac配置好后勾选apply应用5.4 构建点击刷新按钮 reload all gradle projects如果构建过程有超时异常重复上述操作就好了成功后6 编译6.1 设置modulesfile - Project Structure 找到modules设置前是结构是这样的选择项目spring-aop右击右击添加AspectJspring-aspects也一样操作做完后目录是这样的6.2 编译子项目gradle - spring-oxm - Tasks - other - compileTestJava编译成功后6.3 编译整个项目gradle - spring - Tasks - build - build编译结束后6.4 可能的编译异常6.4.1 内存不足关闭其他程序释放出内存再重新执行build构建6.4.2 https校验异常异常信息可以发现异常是由于spring-web模块使用了http引起的解决方法打开根目录下 srccheckstylecheckstyle.xml文件添加内容!-- 过滤spring-web https校验 -- module nameBeforeExecutionExclusionFileFilter property namefileNamePattern value^.*\spring-web\.*$/ /module7 简单测试7.1 新建模块项目 - NEW - Module选择gradle然后下一步填写项目名称等待idea构建结束,项目根目录下的settings.gradle已经有刚刚创建的myDemo模块了7.2 引入依赖打开myDemo目录下的build.gradle文件添加依赖完整的内容description Spring Demo apply plugin: kotlin group org.springframework version 5.3.26-SNAPSHOT repositories { mavenCentral() } dependencies { api(project(:spring-context)) testImplementation org.junit.jupiter:junit-jupiter-api:5.7.0 testRuntimeOnly org.junit.jupiter:junit-jupiter-engine:5.7.0 } test { useJUnitPlatform() }修改了该文件后idea 右上角有构建按钮点击构建如果是引用了plugins { id java }则不能使用api应该使用dependencies { # 用implementation代替上面的api implementation(project(:spring-context)) testImplementation org.junit.jupiter:junit-jupiter-api:5.7.0 testRuntimeOnly org.junit.jupiter:junit-jupiter-engine:5.7.0 }7.3 编写代码User.javapackage com.demo; import org.springframework.stereotype.Component; Component public class User { public void printName() { System.out.println(Spring Demo); } }MyConfig.javapackage com.demo; import org.springframework.context.annotation.ComponentScan; ComponentScan(value com.demo) public class MyConfig { }Test.javapackage com.demo; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Test { public static void main(String[] args) { AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(MyConfig.class); User user (User) applicationContext.getBean(user); user.printName(); } }完整的目录结构7.4 运行运行Test的main方法可以看到控制台已经打印出User返回的内容8 mvc例子8.1 新建模块项目右击 -- new -- Modulegradle -- 勾选java和web填写项目名称和路径然后点击finish等待构建完成构建完成后的目录8.2 配置8.2.1 修改build.gradle添加mvc的依赖api(project(:spring-webmvc))完整的内容,修改后点击构建按钮plugins { id war id java } apply plugin: kotlin group org.springframework version 5.3.26-SNAPSHOT repositories { mavenCentral() } dependencies { api(project(:spring-webmvc)) testImplementation junit:junit:4.11 testImplementation org.junit.jupiter:junit-jupiter-api:5.7.0 testRuntimeOnly org.junit.jupiter:junit-jupiter-engine:5.7.0 } test { useJUnitPlatform() }8.2.2 spring配置文件在webapp下创建创建WEB-INF目录然后在WEB-INF目录下创建web.xmlweb.xml的内容?xml version1.0 encodingUTF-8?display-nameArchetype Created Web Application/display-name servlet servlet-namedispatcher/servlet-name servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class init-param param-namecontextConfigLocation/param-name param-value/WEB-INF/spring.xml/param-value /init-param /servlet servlet-mapping servlet-namedispatcher/servlet-name url-pattern//url-pattern /servlet-mapping在WEB-INF目录下创建spring.xmlspring.xml的内容?xml version1.0 encodingUTF-8?mvc:annotation-driven /context:component-scan base-package“com.demo”/创建controller在java下创建包名 com.demo创建 TestController.javapackage com.demo;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;RestControllerpublic class TestController {RequestMapping(value “test”)public String test() {return “hello mvc”;}}完成的目录8.3 配置tomcat添加本地的tomcat选择部署的war包选择 Deployment -- Artifact选择我们的war这里随便哪个都行下面的那个支持debug时热部署修改下面的项目名称我修改成mvc8.4 启动tomcat测试启动成功测试访问浏览输入访问地址 http://localhost:8080/mvc/test 能正常出来我们返回的内容

相关文章:

【spring专题】编译spring5.3源码

文章目录 1. 环境配置2. 拉取代码 2.1克隆到gitee2.2 下载到本地2.3 切换分支2.4 重新导入 3. 环境配置 3.1 安装gradle-方法13.2 安装gradle-方法2(推荐)3.3 jdk安装aspectj3.4 idea安装AspectJ插件 4. 项目配置 4.1 修改build.gradle4.2 修改buildSrcuild.gradle4.3 修改gra…...

创建虚拟机步骤

由于我的电脑自带vmware 所以下载vm教程可自行搜索相关内容 下面直接展示创建内容1.双击图标进入将呈现这样的界面单击“创建新的虚拟机”进入后,默认是典型,我选择自定义下一步,再选择 稍后安装系统选择Linux设置虚拟机名称为server01下面可…...

Red Hat Linux 8的安装

1.新建一个虚拟机2.选自定义安装,点击下一步3.这里默认,点击下一步4.选择稍后安装操作系统,然后点击下一步5.先选客户机操作系统Linux,再选版本Red Hat Enterprise 8 64位6.给虚拟机命名,位置我们点击浏览把它安装到D盘…...

号称解放双手的 OpenClaw 为何成不了合格生产力工具?

🍃 予枫:个人主页📚 个人专栏: 《Java 从入门到起飞》《读研码农的干货日常》《Java 面试刷题指南》💻 Debug 这个世界,Return 更好的自己! 引言 近期AI圈爆火的OpenClaw被捧为“AI打工人”,号称…...

学习率调度的艺术:从Warmup到余弦退火,掌握深度学习的训练节奏

引言在深度学习的训练过程中,优化器的选择决定了“如何更新”参数,而学习率(Learning Rate) 则决定了“更新多大步”。作为整个训练过程中最重要的超参数之一,学习率直接决定了模型能否收敛以及收敛的质量。然而&#…...

Java大厂面试实录:谢飞机的搞笑面试之旅

Java大厂面试实录:谢飞机的搞笑面试之旅 前言 今天给大家带来一篇别开生面的面试实录,主角是我们熟悉的"水货程序员"谢飞机,他将面对一位严肃的技术面试官,展开一场充满笑料的技术较量。第一轮:基础篇 面试官…...

TestPilot - 智能测试用例生成工具

一、前言 软件测试活动中,测试用例设计始终是质量保障体系的核心环节之一。然而,在实际项目中,测试用例编写的主要成本往往并不体现在「撰写」动作本身,而体现在需求理解、业务规则提炼、边界条件补全、异常路径覆盖以及历史测试经…...

XMind 2025 免费版安装及使用教程(附安装包)

XMind 2025 免费版安装及使用教程 摘要 本文详细记录了XMind 2025版本的安装、激活及基础使用教程。内容涵盖环境准备、自定义安装路径、激活步骤解析以及核心功能速览,旨在帮助用户构建一个稳定、高效的思维导图工作环境。 目录 XMind 是什么 ✨安装步骤 &…...

Flutter 三方库 regexed_validator 的鸿蒙适配指南 - 实现结构化正则表达式校验、在 OpenHarmony 上打造极致严谨的表单输入实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 regexed_validator 的鸿蒙适配指南 - 实现结构化正则表达式校验、在 OpenHarmony 上打造极致严谨的表单输入实战 前言 在鸿蒙(OpenHarmony)应用开发…...

2026见证历史:腾讯、阿里、字节“百虾大战”爆发!哪只“AI小龙虾”才是你的命定打工人?

导语:从“聊天”到“执行”,AI的操作系统时刻来了如果说2023年是Chatbot(聊天机器人)的元年,那么2026年就是Agent(智能体)的爆发年。开源框架OpenClaw(小龙虾)凭借“系统…...

Flutter 三方库 getx_translator 鸿蒙适配指南 - 实现极速响应式翻译、在 OpenHarmony 上打造毫秒级语言切换工作流实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 getx_translator 鸿蒙适配指南 - 实现极速响应式翻译、在 OpenHarmony 上打造毫秒级语言切换工作流实战 前言 在参与构建鸿蒙(OpenHarmony)生态、处…...

UG NX 移除参数

在UG NX中,“移除参数”(也称为“消参”)是一个用于断开模型与其特征历史关联的关键操作。执行后,模型的建模步骤将被清除,变成一个没有参数的“体”。 简单来说,参数化模型像一个记录了所有“施工步骤”的…...

智能厨房置物架:AI Agent的食材新鲜度监测

智能厨房置物架:AI Agent的食材新鲜度监测 关键词:智能厨房置物架、AI Agent、食材新鲜度监测、传感器技术、机器学习 摘要:本文围绕智能厨房置物架利用AI Agent进行食材新鲜度监测展开深入探讨。首先介绍了该技术的背景,包括目的、预期读者、文档结构和相关术语。接着阐述…...

贾子哲学体系:思想主权与贾子猜想引领的东方原创跨学科理论创新与实证研究

贾子哲学体系:思想主权与贾子猜想引领的东方原创跨学科理论创新与实证研究摘要: 本文首度系统性构建贾子哲学体系(Kucius Philosophy),以“思想主权”为核心公理,确立AI时代人类主体性。核心创新“贾子猜想…...

Flutter 三方库 lyrics_parser 的鸿蒙适配指南 - 实现毫秒级精度的 LRC 歌词解析、在 OpenHarmony 上打造极致的音乐视听同步体验

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 lyrics_parser 的鸿蒙适配指南 - 实现毫秒级精度的 LRC 歌词解析、在 OpenHarmony 上打造极致的音乐视听同步体验 前言 在鸿蒙(OpenHarmony)生态的…...

3分钟搞懂深度学习AI:实操篇:ResNet

github仓库及代码(额外补充,持续更新): yiyu0716/3mins-dl: 专为零基础小白打造的深度学习极简指南。这里没有令人头疼的公式,只有通俗易懂的知识拆解。每天只需 3 分钟,带你利用碎片时间轻松看懂 AI 核心概…...

Flutter 三方库 laravel_exception 鸿蒙适配指南 - 实现工业级跨端错误对账与异常监控防线

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 laravel_exception 鸿蒙适配指南 - 实现工业级跨端错误对账与异常监控防线 前言 在参与构建鸿蒙(OpenHarmony)生态下的中大型企业级应用时&#xf…...

AI 辅助编程阶段化开发 SOP

AI 辅助编程阶段化开发 SOP1. 提出需求(明确需求)2. 整理需求文档3. 检查需求文档4. 架构设计5. 核实全局架构文档6. 拆分需求7. 阶段性方案8. 输出阶段性开发文档9. 分阶段独立开发以及任务拆分10. 阶段性评审11. 系统集成与联调📌 附录&…...

攻防世界 misc题心仪的公司

1.工具:Wireshark2.解题:我们打开附件,看到了一个webshell.pcapng文件,我们知道这是流量分析题,我们可以用Wireshark打开,我们先尝试搜索一下flag,方法:①按CTRLF,出现如…...

VMware安装RedHat Linux9全攻略

一、安装VMware Workstation Pro 17 1、从网盘下载VMware Workstation Pro 17: https://pan.baidu.com/s/1yKzk3c7k_EfRe0EabRFd1g?pwdRHCE 2、进入安装引导程序: 单击图中安装引导程序的下一步 同意用户许可协议,再单机下一步 更改安装位…...

必看!AI拓客软件源头厂家哪家强?

在当前数字化营销的时代,AI拓客软件成为了企业获取客户的重要工具。本文将对市场上几款主流的AI拓客软件进行深度测评,帮助您选择最适合的产品。一、测评背景与目的随着市场竞争的加剧,企业对于高效、低成本的获客方式的需求日益增加。AI拓客…...

Flutter 三方库 hotp 的鸿蒙适配指南 - 实现 RFC 4226 标准双因素认证、在 OpenHarmony 上打造极致安全的动态令牌实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 hotp 的鸿蒙适配指南 - 实现 RFC 4226 标准双因素认证、在 OpenHarmony 上打造极致安全的动态令牌实战 前言 在鸿蒙(OpenHarmony)生态的金融管理、…...

常用开源免费的串口录波 / 串口虚拟示波器软件

FX5U RS2串口发送接收指令使用注意事项 https://rxxw-control.blog.csdn.net/article/details/121553172?spm=1011.2415.3001.5331https://rxxw-control.blog.csdn.net/article/details/121553172?spm=1011.2415.3001.5331虚拟串口软件使用介绍...

MCP:AI 世界的“USB-C”接口——深度解析模型上下文协议

MCP:AI 世界的“USB-C”接口——深度解析模型上下文协议 导读:在 2024 年之前,让 AI 连接你的本地文件、数据库或企业内部系统,就像给每台设备定制专用充电器一样繁琐。Anthropic 推出的 MCP (Model Context Protocol) 彻底改变了…...

Flutter 三方库 shelf_router_discovery 鸿蒙适配指南 - 实现服务端路由自动注册、在 OpenHarmony 上打造极致解耦的云端治理实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 shelf_router_discovery 鸿蒙适配指南 - 实现服务端路由自动注册、在 OpenHarmony 上打造极致解耦的云端治理实战 前言 在鸿蒙(OpenHarmony)生态的…...

江苏哪里有三防布厂家?跑断腿摸出的实体大厂

开春这阵子,各大工程供应链的交流群里简直炸开了锅。做重工机械设备改造的、接了大型造船厂外包单子的、还有搞煤矿设备换新升级的,全都在满世界地到处寻价备料。我在好几个几百人的大群里潜水,每天至少能看到几十个人在重复问同一句话&#…...

太猛了!用 OpenClaw-RL,AI 边聊天边自我进化,「白嫖」用户交互数据训出更强模型?

研究背景 每一个已经上线的 AI Agent,其实每天都在"丢弃金矿"。每次 Agent 执行完一个动作 ,环境就会给它一个下一状态信号 ——可能是用户的回复、工具的执行结果、GUI 界面的变化,或者是测试的通过与否。现有的系统把这些信号仅…...

Flutter 三方库 sample_downloader 鸿蒙适配指南 - 实现海量样本数据自动化并行采集、在 OpenHarmony 上打造高效下载调度防御线实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 sample_downloader 鸿蒙适配指南 - 实现海量样本数据自动化并行采集、在 OpenHarmony 上打造高效下载调度防御线实战 前言 在参与构建鸿蒙(OpenHarmony&#x…...

从PDF到RAG知识库

打造可配置、可扩展的自动化预处理流水线:从PDF到RAG知识库在构建RAG(检索增强生成)系统的过程中,文档预处理是决定检索质量的基础环节。然而,面对多源异构文档(如PDF、图片、扫描件)&#xff0…...

Go 微服务架构下的 API 网关实践——Kong 深度解析与实战

Go 微服务架构下,Kong 作为高性能 API 网关,凭借其插件化架构和多协议支持,能够帮助团队解决微服务治理中的复杂问题。本文将从架构原理、核心实践到生产优化,结合 Go 语言生态,深入解析 Kong 的落地应用。 01. Kong网关:Go微服务架构的统一入口 1.1 微服务架构下的网关…...