到了这个年纪,就应该阅读Spring源码了,源码阅读指南-编译加运行

news2024/12/24 8:37:24

文章目录

  • 到了那个年纪,就应该阅读Spring源码了
    • 😄第一步,clone
    • 😆第二步,使用idea打开项目
      • 😊gradle介绍(插叙手法)
    • 😃第三步,修改gradle的远程仓库地址
      • 😏这里遇到了很多的坑(插叙手法)
    • 😍第四步,安装依赖
      • 😘脚本介绍(插叙手法)
    • 😚第五步,编译spring项目
    • 😳附赠内容(买一送一)
      • 😌在spring源码项目中新建项目验证我们的spring源码

到了那个年纪,就应该阅读Spring源码了

Spring的源码地址

https://github.com/spring-projects/spring-framework

😄第一步,clone

我们先把他clone下来

在这里插入图片描述
在这里插入图片描述

没梯子的话多clone几遍就好了

😆第二步,使用idea打开项目

在这里插入图片描述

我们这里使用5.x的版本

在这里插入图片描述

设置里面gradle设置按照如下图设置即可

在这里插入图片描述

😊gradle介绍(插叙手法)

由于Spring源码都是使用Gradle来管理项目

按理来说我们gradle和maven类似,需要在本级载好并且安装好

但是不建议这么做,因为很多项目的源代码都自带了wrapper包

在这里插入图片描述

这里面有我们的gradle的包,这样有利于我们统一得管理版本冲突问题

Gradle Wrapper 实际上就是对 Gradle 的一层包装,用于解决实际开发中可能会遇到的不同的项目需要不同版本的 Gradle 问题。
例如:把自己的代码共享给其他人使用,
可能出现如下情况:
1.对方电脑没有安装 gradle
2.对方电脑安装过 gradle,但是版本太旧了
这时候,我们就可以考虑使用 Gradle Wrapper 了。这也是官方建议使用 Gradle Wrapper 的原因。

😃第三步,修改gradle的远程仓库地址

spring的gradle的远程仓库是spring自己的远程仓库,但是我们是拉不下来jar包的,原因是最新的spring仓库添加了认证

我们拉包的时候会出现

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'spring'.
> Could not resolve all files for configuration ':classpath'.
   > Could not resolve org.apache.xerces:xercesImpl:2.9.1.
     Required by:
         project : > io.spring.gradle:docbook-reference-plugin:0.3.1
      > Could not resolve org.apache.xerces:xercesImpl:2.9.1.
         > Could not get resource 'https://repo.spring.io/plugins-release/org/apache/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.pom'.
            > Could not GET 'https://repo.spring.io/plugins-release/org/apache/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.pom'. Received status code 401 from server: Unauthorized
   > Could not resolve org.apache.xerces:resolver:2.9.1.
     Required by:
         project : > io.spring.gradle:docbook-reference-plugin:0.3.1
      > Could not resolve org.apache.xerces:resolver:2.9.1.
         > Could not get resource 'https://repo.spring.io/plugins-release/org/apache/xerces/resolver/2.9.1/resolver-2.9.1.pom'.
            > Could not GET 'https://repo.spring.io/plugins-release/org/apache/xerces/resolver/2.9.1/resolver-2.9.1.pom'. Received status code 401 from server: Unauthorized

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.


Received status code 401 from server: Unauthorized 无权限

在这里插入图片描述

所以我们需要改成阿里云的仓库地址

😏这里遇到了很多的坑(插叙手法)

在网上有很多的解决方法,解决方法无非就是

在这里插入图片描述

添加

https://maven.aliyun.com/repository/public

但是,其实我们上面的错误,并不是添加这个仓库就解决了

我们去看官网地址
https://developer.aliyun.com/mvn/guide

在这里插入图片描述

添加的仓库就是箭头所指的仓库,但是我们搜索一下这个jar包

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

public仓库其实是没有这个jar包的,所以找个寂寞。。。

我们要去spring-plugin仓库中去拉

在这里插入图片描述

打开build.gradle文件

在这里插入图片描述

找到configure(allprojects)

在这里插入图片描述

方法里面的repositories

在这里插入图片描述

添加阿里云的地址

		maven {
			url 'https://maven.aliyun.com/repository/spring-plugin'
		}
		maven {
			url 'https://maven.aliyun.com/repository/public/'
		}

😍第四步,安装依赖

😘脚本介绍(插叙手法)

在这里插入图片描述

gradlew与gradlew.bat执行的指定wrapper版本中的gradle指令,不是本地安装的gradle指令
gradlew:linux下的脚本
gradlew.bat: Windows下的脚本

 ./gradlew.bat dependencies

在这里插入图片描述

第一次可能较慢,出现build successful就说明安装完成

在这里插入图片描述

这个时候我们重新加载gradle项目即可

在这里插入图片描述

😚第五步,编译spring项目

我们clean一下

在这里插入图片描述

然后

 ./gradlew.bat :spring-oxm:compileTestJava

在这里插入图片描述

编译成功后在各个模块有编译好的build文件夹

在这里插入图片描述

lib文件夹里面就是我们打好的jar包

在这里插入图片描述

这样就说明我们的源码环境已经完全配置好了

😳附赠内容(买一送一)

😌在spring源码项目中新建项目验证我们的spring源码

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

把src文件夹复制到spring-demo项目中(新建的项目如果为空的话,复制项目文件夹结构)

在这里插入图片描述

删掉多余的,自己新建文件包

在这里插入图片描述

添加 compile(project(":spring-context"))
意思是添加依赖spring-context

在这里插入图片描述

package com.masiyi;

import org.springframework.stereotype.Service;

/**
 * @Description TODO
 * @Author masiyi
 * @Date 2023/1/5
 **/
@Service
public class DemoService {
	public void hello() {
		System.out.println("hello spring");
	}
}


package com.masiyi;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Configuration;

/**
 * @Description TODO
 * @Author masiyi
 * @Date 2023/1/5
 **/
public class DemoStart {
	public static void main(String[] args) {
		ApplicationContext ac = new AnnotationConfigApplicationContext("com.masiyi");
		DemoService bean = ac.getBean(DemoService.class);
		bean.hello();
	}
}

运行即可

在这里插入图片描述

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

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

相关文章

Day932.5个步骤,高效推动组件化架构重构 -系统重构实战

5个步骤,高效推动组件化架构重构 Hi,我是阿昌,今天学习记录都是关于5个步骤,高效推动组件化架构重构的内容。 项目的架构设计是一回事,代码落地又是另外一回事,很多架构设计最终都只是落在了 PPT 上。 一…

QT Graphics View坐标系转换

背景 在做绘图处理时,Scence作为场景,大小是无限的,而View作为一个观察镜头,观察范围是有限的。 那么有限的View观察无限的Scence区域,必然要选定一个观测锚点。 所以View具有一个centerOn(QPointF pos)函数&#xff…

Linux-初学者系列——篇幅1_文件管理命令(持续更新中)

Linux-初学者系列_篇幅1 文件管理命令-目录Linux-初学者系列_篇幅11.创建文件语法:示例:2.创建目录语法:示例:注意:常见错误:3.复制语法:示例:补充:4.移动语法&#xff1…

Vue|数据渲染

Vue 是如何将编译器中的代码转换为页面真实元素的?在Vue 中,自带了模板渲染,而模板的语法也非常简洁易懂。 精彩专栏持续更新↓↓↓ 微信小程序实战开发专栏 一. 数据渲染1.1 条件渲染v-ifv-show1.2 列表渲染v-for1.3 小结一. 数据渲染 1.1 条件渲染 vue条件渲染指…

3. 500 服务器异常 html

目录 1.效果图 2.code 1.效果图 2.code <!DOCTYPE html> <html><head><meta charset="utf-8"><title>500</title><style type="text/css">html,body {margin: 0;padding: 0;height: 100%;min-height: 450px;…

Git --- 常用命令、分支操作、团队协作机制

一、Git 概述 Git 是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目 Git 易于学习&#xff0c;占地面积小&#xff0c;性能极快。它具有廉价的本地库&#xff0c;方便的暂存区域和多个工作流分支等特性 其性能优于 Subversion、…

多通道振弦传感器无线采集仪与参数配置工具连接

多通道振弦传感器无线采集仪与参数配置工具连接 VS101~VS432 设备配备了专门的参数配置工具 SETP 来完成设备工作参数的查看和修改工作。 连接前的准备工作 &#xff08; 1&#xff09;数据接口与计算机连接 使用标配的通讯线与计算机 RS232 接口连接。 若需基于手机网络发送数…

Java-异常机制

异常机制 正常情况下&#xff0c;程序按照我们希望的样子和步骤去执行&#xff0c;但是&#xff0c;代码就像人生&#xff0c;要是一帆风顺了&#xff0c;就要想想是不是哪里出事了。程序若是有报错还好&#xff0c;就怕没有报错。 实例 public class Test {public static vo…

如何用 YonBuilder 构建线索管理应用

加速企业数智营销&#xff1a;如何用 YonBuilder 构建线索管理应用 如何用 YonBuilder 低代码开发线索管理应用&#xff1f; 线索管理是指通过各种渠道收集、筛选、打分、分配、跟进和培育潜在客户的信息&#xff0c;以便将其转化为成交客户的过程。 通过数智化手段实现良好…

ArcGIS地质图矢量化技巧

01 概述 今天以ArcGIS为例&#xff0c;结合多年的工作经验&#xff0c;来介绍一下地质图矢量化的技巧。 02 底图的配准 不同比例尺的图件&#xff0c;有着不同的配准精度要求&#xff1a; 1&#xff1a;20万的地质图&#xff0c;配准误差不能高于20米&#xff1b; 1:50万…

DFIG控制9: 搭建定子αβ坐标系下的电机模型

DFIG控制9&#xff1a; 搭建定子αβ坐标系下的电机模型。本文基于教程的第9部分&#xff08;终于做完了&#xff09;。主要目的是自己搭建一个DFIG的电机模型&#xff0c;与Simulink库中的模型做个对比。 本文基于教程的第9部分&#xff1a; DFIM Tutorial 9 - Analytical Mod…

Focal Loss论文解读和调参教程

论文&#xff1a;Focal Loss for Dense Object Detection 论文papar地址&#xff1a;ICCV 2017 Open Access Repository 在各个主流深度学习框架里基本都有实现&#xff0c;本文会以mmcv里的focal loss实现为例&#xff08;基于pytorch&#xff09; 简介&#xff1a; 本文是…

1.mybatis-plus入门及使用

1.什么是MybatisPlus MyBatis-Plus 官网 为什么要学MybatisPlus&#xff1f; MybatisPlus可以节省大量时间&#xff0c;所有的CRUD代码都可以自动化完成MyBatis-Plus是一个MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效…

Java——数组中出现次数超过一半的数字

题目链接 牛客在线oj题——数组中出现次数超过一半的数字 题目描述 给一个长度为 n 的数组&#xff0c;数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次&#xff0c;…

FastDFS与Nginx结合搭建文件服务器,并内网穿透实现公网访问

文章目录前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.1 …

低代码开发重要工具:jvs-flow (流程引擎)2.1.7版本更新内容

流程引擎主要包含了流程定义和编辑、任务分配和处理、流程监控和跟踪、数据模型和存储、条件和规则设置、安全性和权限管理、性能优化以及持续集成和部署等功能&#xff0c;以满足不同业务场景下的需求。 JVS流程引擎从V2版本开始&#xff0c;由flowable切换为 jvs-flow&#…

2023 年 五 大数据恢复软件帮助您找回数据

您是否刚刚丢失了一份需要数天工作才能更换的重要文件&#xff1f;不要恐慌&#xff01;此列表中排名前 10 位的最佳数据恢复软件应用程序可以帮助您找回数据&#xff0c;您甚至可能不必在它们上花任何钱。 五大最佳数据恢复软件工具 以下是我们最喜欢的 10 大数据恢复软件应用…

记录-vue项目中使用PWA

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言&#xff1a; 梳理了一下项目中的PWA的相关用法&#xff0c;下面我会正对vue2和vue3的用法进行一些教程示例&#xff0c;引入离线缓存机制&#xff0c;即使你断网&#xff0c;也能访问页面。一旦用…

动力节点王鹤SpringBoot3笔记——第八章 文章管理模块

目录 第八章 文章管理模块 8.1 配置文件 8.2 视图文件 8.3 Java代码 第八章 文章管理模块 创建新的Spring Boot项目&#xff0c;综合运用视频中的知识点&#xff0c;做一个文章管理的后台应用。 新的Spring Boot项目Lession20-BlogAdmin。Maven构建工具&#xff0c;包…

VxLAN数据中心L2互连(hand-off方式)

用Arista的veos做了个DCI&#xff08;hand-off&#xff09;实验。模拟了VxLAN数据中心hand-off方式做L2互通。 在此分享。 实现思路 分别在DC1、DC2内配置BGP EVPN协议创建VXLAN隧道&#xff0c;实现各数据中心内部VM之间的通信&#xff0c;DC1-BL和DC2-BL通过二层接口方式接…