MAC版Gradle构建Spring5.X源码阅读环境

news2024/11/15 12:24:14

前言:

三年前鄙人有幸在现已几乎报废的Window的DELL中搭建过Spring源码环境,今天,Mac版的搭建,来了。

本篇文章环境搭建:Spring5.2.1 + Gradle5.6.3-all + jdk8 + IDEA2022.3版本

文章目录

    • 1、Spring源码下载
    • 2、Gradle下载
    • 3、配置Gradle环境变量
    • 4、配置Gradle镜像等
    • 5、编译Spring源码
    • 6、新建自己的模块用来学习Debug源码
    • 7、编写Demo代码运行测试

1、Spring源码下载

官方下载spring源码
https://github.com/spring-projects/spring-framework
记得下载RELEASE版本!!!
在这里插入图片描述

2、Gradle下载

gradle下载地址
https://services.gradle.org/distributions/
在这里插入图片描述

3、配置Gradle环境变量

终端运行

open -e ~/.bash_profile

内容如下

GRADLE_HOME=/Users/mr.guo/gradle-5.6.3
export GRADLE_HOME
export PATH=${PATH}:/Users/mr.guo/gradle-5.6.3/bin

刷新环境变量

source ~/.bash_profile 

执行

 gradle -version

如下则成功
在这里插入图片描述

4、配置Gradle镜像等

在这里插入图片描述

打开build.gradle文件(这个就相当于是maven的pom文件),在文件头部加上如下两个地方

在这里插入图片描述

buildscript {
	repositories {
		maven { url "https://repo.spring.io/plugins-release" }
	}
}
repositories {
			//新增以下2个阿里云镜像
			maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
			maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
			mavenCentral()
			maven { url "https://repo.spring.io/libs-spring-framework-build" }
			maven { url "https://repo.spring.io/milestone" } // Reactor
			//新增spring插件库
			maven { url "https://repo.spring.io/plugins-release" }
}

以上完成后刷新开始构建,等待一定时间后,如果构建失败重新refresh几次就行了,一般就是包下载超时之类的错误。

以上只是Gradle下载依赖,如下才是真正的编译源码

5、编译Spring源码

在这里插入图片描述
根据官方的import-into-idea.md文档可以得知,我们需要如下的操作
在这里插入图片描述
经过一段时间编译,每个人电脑的性能不一样,所需时间也不一样。

编译过程中会出现好几次失败,非常正常,多刷新几次编译,不排除有别的异常确实需要自行goole解决。

6、新建自己的模块用来学习Debug源码

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

然后,需要手工添加spring-context,spring-beans,spring-core,spring-aop这4个核心模块

在这里插入图片描述

7、编写Demo代码运行测试

在这里插入图片描述

package demo;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl {
	public void sayHiSpring(){
		System.out.println("Hello Spring!");
	}
}

package demo;

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("demo")
public class MainStat {

	public static void main(String[] args) {
		ApplicationContext context=new AnnotationConfigApplicationContext(MainStat.class);
		UserServiceImpl bean = context.getBean(UserServiceImpl.class);
		bean.sayHiSpring();
	}

}

完成如下:

在这里插入图片描述
end…

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

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

相关文章

设计模式 - 行为型模式:策略模式(概述 | 案例实现 | 优缺点 | 使用场景)

目录 一、行为型模式 1.1、策略模式 1.1.1、概论 1.1.2、案例实现 1.1.3、优缺点 1.1.4、使用场景 一、行为型模式 1.1、策略模式 1.1.1、概论 策略模式设计的每一个算法都封装了起来,使他们可以相互替换,通过一个对象委派不同的算法给相应的客户…

Dubbo 环境隔离

通过标签实现流量隔离环境(灰度、多套开发环境等) 无论是在日常开发测试环境,还是在预发生产环境,我们经常都会遇到流量隔离环境的需求。 在日常开发中,为了避免开发测试过程中互相干扰,我们有搭建多套独…

基于AlexNet深度学习网络的智能垃圾分类系统matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、基于AlexNet深度学习网络的智能垃圾分类系统概述 4.2、基于AlexNet深度学习网络的智能垃圾分类系统主要原理 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab20…

MySQ 学习笔记

1.MySQL(老版)基础 开启MySQL服务: net start mysql mysql为安装时的名称 关闭MySQL服务: net stop mysql 注: 需管理员模式下运行Dos命令 . 打开服务窗口命令 services.msc 登录MySQL服务: mysql [-h localhost -P 3306] -u root -p****** Navicat常用快捷键 键动作CTRLG设…

C语言——文件操作_学习笔记

一、引言——为什么使用文件 如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的…

仅用61行代码,你也能从零训练大模型

本文并非基于微调训练模型,而是从头开始训练出一个全新的大语言模型的硬核教程。看完本篇,你将了解训练出一个大模型的环境准备、数据准备,生成分词,模型训练、测试模型等环节分别需要做什么。AI 小白友好~文中代码可以直接实操运…

C++ 类和对象篇(三) 空类和6个默认成员函数

目录 一、空类 1. 是什么? 2. 空类中的成员 3. 空类的大小 二、6个默认成员函数 三、 构造函数 1. 构造函数是什么? 2. 为什么C要引入构造函数? 四、析构函数 1. 析构函数是什么? 2. 为什么要有析构函数? 五、拷贝构造…

硬件信号协议UART是干啥的?

UART协议是电子传输中一种常见的信号协议,通常只需要三根信号线就可以完成数据的收发,分别是TX,RX,GND。 UART(universal asynchronous receiver transmitter),是通用异步收发器,因为是异步,所以…

312.戳气球

将戳气球转换到添加气球&#xff0c;记忆搜索slove(i,j)&#xff1a;在开区间(i,j)全部填满气球得到的最多硬币数&#xff0c;两端val[i]、val[j] class Solution { public:vector<vector<int>> ans;vector<int> val;int slove(int left,int right){if(left&…

分布式存储系统如何应对SSD硬盘UNC坏块可靠性问题?

Uncorrectable Bit Errors&#xff08;UNC&#xff09;&#xff0c;也有时候叫做Media Error&#xff08;介质错误&#xff09;是指在闪存设备中出现的无法修复的位错误。Media Error的产生意味着即使硬盘自身已经用尽了所有容错手段&#xff08;如LDPC解码&#xff0c;retry等…

75.颜色分类

原地排序&#xff1a;空间复杂度为1 class Solution { public:void sortColors(vector<int>& nums) {if(0){//法一&#xff1a;单指针两个遍历int nnums.size();int ptr0;for(int i0;i<n;i){if(nums[i]0){swap(nums[i],nums[ptr]);ptr;}}for(int iptr;i<n;i){…

win11安装双系统Ubuntu的坎坷记录

之前一直装的都是在一个硬盘中&#xff0c;这是是两块盘。 我的电脑是惠普暗影精灵8Pro 一 安装前的准备工作 1.1 记得先关闭&#xff0c;Bitlocker 输入wins&#xff0c;搜索框输入&#xff1a;设备加密设置 1.2 BIOS设置 &#xff08;惠普这电脑是开机时按 F10&#xff0…

断点测试怎么做,一文教你用Charles 工具做好接口测试!

在测试工作过程中&#xff0c;我们经常会在程序的某一行或者某一环节设置断点&#xff0c;在程序请求的过程中&#xff0c;修改断点处的参数、请求或者响应&#xff0c;这就是所谓的断点测试。这类断点测试主要用于接口测试。 断点测试可以通过查看接口返回数据可以方便定位是前…

015-衍生版本开发

衍生版本开发 文章目录 衍生版本开发项目介绍衍生版本开发波形分析设置CPU 亲缘性 总结 关键字&#xff1a; Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language&#…

【Linux】基本指令-入门级文件操作(一)

目录 前言 ⭕linux的树状文件结构 ⭕绝对路径和相对路径 ⭕当前路径和上级路径 ⭕隐藏文件 基本指令&#xff08;重点&#xff09; 1 pwd 指令 2 mkdir 指令 3 touch 指令 4 ls 指令 4.1 ls只加选项不加文件/目录名&#xff0c;默认查看当前目录下的文件 4.1.1 ls -a…

360 G800行车记录仪,不使用降压线如何开机,8芯插头的定义。

G800记录仪的插头是这样的&#xff0c;图中标出了线的颜色。其中红色为常电V&#xff0c;黑色为GND负极&#xff0c;黄色为ACC受车是否启动控制。 这个记录仪原装的电源线没有降压功能&#xff0c;所以这里的V是12V。 记录仪内部有电源板&#xff0c;负责将12V降压为5V。 如果…

CSS盒子定位的扩张

定位的扩展 绝对定位&#xff08;固定定位&#xff09;会完全压住盒子 浮动元素不会压住下面标准流的文字&#xff0c;而绝对定位或固定位会压住下面标准流的所有内容 如果一个盒子既有向左又有向右&#xff0c;则执行左&#xff0c;同理执行上 显示隐藏 display: none&…

Tasmota系统之MQTT配置和使用篇

Tasmota系统之MQTT配置和使用篇 &#x1f6a9;相关篇《ESP32/ESP8266在线刷写Sonoff Tasmota固件以及配置简要》&#x1f4cc;《Tasmota系统之外设配置》&#x1f4cd;Tasmota官方对MQTT功能使用介绍&#xff1a;https://tasmota.github.io/docs/MQTT/ &#x1f6e0;MQTT本地化…

消息队列 Kafka

Kafka Kafka 是一个分布式的基于发布/订阅模式的消息队列&#xff08;MQ&#xff0c;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域 为什么使用消息队列MQ 在高并发环境下&#xff0c;同步请求来不及处理会发生堵塞&#xff0c;从而触发too many conne…

团队协作中如何处理ConflictingBeanDefinitionException异常

&#x1f47c; 前言 当使用Spring框架进行Java应用程序开发时&#xff0c;可能会遇到ConflictingBeanDefinitionException异常。 如&#xff1a; org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name ‘xxxBean’ …