idea搭建spring5.3.x源码环境

1.写在前面的话

碰到了不少想阅读或者学习spring源码的同学,但是第一步搭建这个源码阅读环境就能难倒了一大批人。下面我就以spring5.3.x这个源码分支,来具体演示一下搭建过程。

2. 下载源码

下载源码这一步,说实话,由于某些原因,会导致我们用git做clone的时候,老是中断,clone不下来。所以我们可以先把github的源码,复制到gitee上,然后从gitee上来下载。

  1. 打开spring的在github的源码地址:https://spring.io/projects/spring-framework
  2. 复制git的clone地址:https://github.com/spring-projects/spring-framework.git
  3. 打开gitee:https://gitee.com/,登录完成后,点击右上角的从Github/GitLab导入仓库
    在这里插入图片描述
  4. 在Git 仓库URL中输入spring源码的clone地址,点击导入,稍微等一会,就完成了。
    在这里插入图片描述
    这样我们就把spring源码导入到自己的gitee仓库中,方便我们日后学习过程的中的文件提交。
  5. 在本地将spring源码从我们的gitee代码库中clone下来:
git clone -b 5.3.x https://gitee.com/xxxx/spring-framework.git
  1. 稍等一下,源码就下载成功了。

3. 安装gradle

3.1 确定gradle的版本

因为spring源码是用gradle构建的,所以我们要先安装gradle。特别注意的是,gradle的版本必须和spring源码中要求的一致,否则会报错。版本信息在源码中的位置:
D:\studyspace\spring-framework-5.3.x\spring-framework\gradle\wrapper\gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

这里我们看到使用的是7.5.1这个版本。

3.2 下载gradle

从https://gradle.org/releases/ 选择的版本7.5.1下载。
在这里插入图片描述

3.2 解压安装gradle

在本机上某个目录下解压下载的gradle,这里我放到了
D:\javaenv\gradle-7.5.1 这个目录下。
然后再这个目录下,新建.gradle,即:D:\javaenv\gradle-7.5.1.gradle
在这里插入图片描述

3.3 创建初始化文件,配置仓库地址

在init.d文件夹下创建gradle初始化配置文件:init.gradle,然后在这个文件配置仓库地址。
D:\javaenv\gradle-7.5.1\init.d
在这里插入图片描述
在这个文件下,创建init.gradle,内容如下:

allprojects{repositories {mavenLocal()maven { url 'https://maven.aliyun.com/repository/public/' }maven { url 'https://maven.aliyun.com/repository/jcenter/' }maven { url 'https://maven.aliyun.com/repository/google/' }maven { url 'https://maven.aliyun.com/repository/gradle-plugin/' }maven { url 'https://jitpack.io/' }maven { url "https://maven.aliyun.com/repository/spring/" }}
}settingsEvaluated { settings ->settings.pluginManagement {// Clear repositories collectionrepositories.clear()// Add my Artifactory mirrorrepositories {mavenLocal()maven {url 'https://maven.aliyun.com/repository/gradle-plugin/'}}}
}

这里一定要注意,必须配置https://maven.aliyun.com/repository/spring/。这里说一下原因吧。
我们在导入Spring源码时,总是无法下载com.ibm.websphere:uow:6.0.2.17包,如果我们换上https://repo.spring.io/libs-release 这个仓库地址的话,会报401错误,没有认证。如果我们使用阿里云的https://maven.aliyun.com/repository/public/这个仓库,会找不到这个包。那为什么在public下会找不到这个包呢?
因为发现public仓库并不包含spring仓库,所以需要增加https://maven.aliyun.com/repository/spring这个仓库地址。

3.4 配置gradle环境配置

这里我就以我的电脑为例,说一下需要配置的参数,具体操作自己去配就行了,很简单。
第一个参数:

参数
GRADLE_HOMED:\javaenv\gradle-7.5.1
GRADLE_USER_HOMED:\javaenv\gradle-7.5.1.gradle
path里加上gradle命令路径:%GRADLE_HOME%\bin

3.5 验证gradle

gradle --version

在这里插入图片描述
这样gradle就配置完成了。

4. 配置idea环境

1.用idea打开spring源码,这时基本上会自动下载项目所需要的包,但是我们还没有配置好我们的idea,所以暂时先将build都停止掉;
2.配置project Structure 中的jdk版本,这里我使用的是jdk8
在这里插入图片描述
在这里插入图片描述
3.安装aspectj编译插件(spring-aop和spring-aspects项目需要此插件编译)
在idea的Settings中,找到Plugins,搜索AspectJ
在这里插入图片描述
在这里插入图片描述
4.安装AspectJ
1.aspectj的下载地址如下:
https://www.eclipse.org/aspectj/downloads.php,这里我选择最新的一个包下载
在这里插入图片描述
这里我下载到了D:\javaenv 目录下
在这里插入图片描述
右键打开终端,执行

java -jar aspectj-1.9.6.jar

在这里插入图片描述
这时会弹出选择
2.选择下一步
在这里插入图片描述
选择jdk
在这里插入图片描述
在D:\javaenv新建目录aspectj1.9,然后下一步,选择
在这里插入图片描述
然后选择Install,安装完成。
5.在idea中配置aspectj编译环境,注意:这里需要重新启动idea,否则上面aspectj插件不生效。
在idea的Settings中的Java Compiler,将Use compiler 设置为Ajc;同时在Ajc Options也做响应的配置,如下图所示:
在这里插入图片描述
6.将spring-aop和spring-aspects两个module,添加aspect编译环境
在这里插入图片描述
由于我这里已经配置过了,所以看不到选项。配置完如下:
在这里插入图片描述
7.在idea中配置gradle仓库
在这里插入图片描述
8.修改项目中的中央仓库配置,共三个位置
第一个位置:D:\studyspace\spring-framework-5.3.x\spring-framework\buildSrc 下的build.gradle
配置如下:
在这里插入图片描述

repositories {mavenLocal()maven { url 'https://maven.aliyun.com/repository/public/' }maven { url 'https://maven.aliyun.com/repository/jcenter/' }maven { url 'https://maven.aliyun.com/repository/google/' }maven { url 'https://maven.aliyun.com/repository/gradle-plugin/' }maven { url 'https://jitpack.io/' }maven { url "https://maven.aliyun.com/repository/spring/" }mavenCentral()gradlePluginPortal()
}

第二个位置:D:\studyspace\spring-framework-5.3.x\spring-framework,源码目录下的settings.gradle
在这里插入图片描述

pluginManagement {repositories {mavenLocal()maven { url 'https://maven.aliyun.com/repository/public/' }maven { url 'https://maven.aliyun.com/repository/jcenter/' }maven { url 'https://maven.aliyun.com/repository/google/' }maven { url 'https://maven.aliyun.com/repository/gradle-plugin/' }maven { url 'https://jitpack.io/' }maven { url "https://maven.aliyun.com/repository/spring/" }mavenCentral()gradlePluginPortal()}
}

第三个位置:D:\studyspace\spring-framework-5.3.x\spring-framework,源码目录下的build.gradle

在这里插入图片描述

repositories {mavenLocal()maven { url 'https://maven.aliyun.com/repository/public/' }maven { url 'https://maven.aliyun.com/repository/jcenter/' }maven { url 'https://maven.aliyun.com/repository/google/' }maven { url 'https://maven.aliyun.com/repository/gradle-plugin/' }maven { url 'https://jitpack.io/' }maven { url "https://maven.aliyun.com/repository/spring/" }mavenCentral()gradlePluginPortal()}

5. 编译工程

5.1 下载依赖

点击idea右边的gradle,刷新gradle,等待所有依赖下载完毕
在这里插入图片描述

5.2 编译spring-oxm子项目

执行spring—>spring-oxm—>task-other下的compileTestJava插件
在这里插入图片描述

5.3 编译整个工程

执行spring—>Tasks—>build下的build插件
在这里插入图片描述
等待几分钟编译完毕即可。
但是在编译过程中还可能会出现各种错误,这时候我们可以多build几次,实在不行,就重启下idea,再次build就会成功。

6.测试

6.1 新建gradle的module

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

6.2 给新建的spring-study的添加依赖

在这里插入图片描述

dependencies {api(project(":spring-beans"))api(project(":spring-core"))api(project(":spring-tx"))api(project(":spring-aop"))api(project(":spring-context"))api(project(":spring-expression:"))testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}

6.3 创建测试代码

1.创建Student类,
在这里插入图片描述

package org.springframework.study.domain;/*** @author lxc* @createTime 2024-02-01 16:06* @description*/
public class Student {/*** id编号*/private Long id;/*** 姓名*/private String name;/*** 年龄*/private Integer age;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}

2.在Main中编写main方法测试
在这里插入图片描述

package org.springframework;import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.study.domain.Student;public class Main {public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");Student student = context.getBean("student", Student.class);System.out.println(student);}
}

3.查看结果
在这里插入图片描述

6.小结

这样我们整个spring的源码就搭建成功了,可以进行学习和研究。从上面的步骤来看,其实还是很复杂的,尤其的环境,会出现各种意向不到的问题。这里只是我的一个搭建过程,可能大家在自己电脑上搭建还会遇到其他的一些问题,这里就需要自行解决了。

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

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

相关文章

grafana安装DevOpsProdigy KubeGraf 1.5.2

安装DevOpsProdigy KubeGraf需要安装kube-state-metrics 官方地址:https://github.com/kubernetes/kube-state-metrics/tree/release-2.10/examples/standard 查看k8s版本和kube-state-metrics对应版本: [rootmaster1 kube-state-metrics]# ll 总用量 …

并查集(高阶数据结构)

目录 一、并查集的原理 二、并查集的实现 2.1 并查集的初始化 2.2 查找元素所在的集合 2.3 判断两个元素是否在同一个集合 2.4 合并两个元素所在的集合 2.5 获取并查集中集合的个数 2.6 并查集的路径压缩 2.7 元素的编号问题 三、并查集题目 3.1 省份的数量 3.2 等…

R-kknn包-类别插值可视化绘制

前面的推文我们介绍了使用scikit-learn结合分类散点数据,构建机器学习分类模型并将模型结果可视化展示,具体链接如下: 机器学习和可视化还能一起这样用?Python教你全搞定。今天这篇推文,我们就使用R语言的kknn包进行类…

【2023地理设计组一等奖】基于机器学习的地下水仿真与时空分析

作品介绍 1 设计思想 1.1 作品背景 华北平原是我国最重要的粮棉产地之一,然而近年来农业的低效用水以及过度压采正逐步加剧其地下水资源的紧张性,为经济可持续发展带来重大风险。而地下水动态变化与人为干预、全球气候波动呈现出高度相关性,因此,地下水的仿真模拟对保障粮…

JMeter 下载、安装、启动

JMeter安装部署依赖Java环境,所以首先得安装JDK。 JDK下载JDK环境变量配置 ① 新建系统环境变量JAVA_HOME ② 编辑系统变量Path ③ 新建系统变量CLASSPATH变量 JMeter下载安装 Apache JMeter - Apache JMeter™ JMeter安装部署依赖Java环境,所以首…

sql注入之GETSHELL

2024.2.1 GETSHELL 利用SQL注入获取MYSQL数据库权限的要求: 文件读写基本要求: 是root用户最高权限 知道网站的绝对路径 文件读写注入的原理: 利用文件的读写权限进行注入,它可以写入一句话木马,也可以读取系统文件的敏感信息 文件读写…

Qt设计师中(没有现成的控件):如何添加QToolBar工具栏

1、在QtCreator设计师界面中,在MainWindow上右键,有“添加工具栏”菜单项 2、但只有在MainWindow上右键才有,在其它控件上方点击则没有,那么怎么在对话框上添加呢? 可以添加一个QWidget,然后手动在ui文件里把class改为QToolBar就…

canvas设置全局透明度globalAlpha(图文示例)

查看专栏目录 canvas实例应用100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

睿尔曼超轻量仿人机械臂—外置按钮盒使用说明

睿尔曼RM系列机械臂的控制方式有很多种,包括:示教器、JSON、API等。在此为大家介绍外置按钮盒的使用方法。 按钮盒接线安装 按钮盒外观如下图所示,有:急停、暂停、开始、继续。四个功能按钮。用户可通过这四个按钮来实现对机械臂运…

环状热力图R语言画法

环状热力图(Circular Heatmap)是一种以环状布局展示数据的可视化方法。它结合了热力图和极坐标系统,能够有效地显示数据的关系、模式和趋势。 环状热力图通常用于可视化二维数据矩阵,其中行和列代表不同的类别或变量,…

K8S-NFS-StorageClass

工作流程 K8s中部署NFS-StorageClass K8s的StorageClass提供了为集群动态创建PV的能力。 1.部署NFS服务 2.选择NFS的Provinisoner驱动 K8S中没有内置的NFS的制备器,而定义StorageClass的时候需要指定制备器(Pervisioner),所以需要&#xf…

OpenHarmony—开发及引用静态共享包(API 9)

HAR(Harmony Archive)是静态共享包,可以包含代码、C库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。 接下来&a…

springboot146基于Spring Boot的可盈保险合同管理系统的设计与实现

可盈保险合同管理系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本可盈保险合同管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时…

富文本编辑器CKEditor4简单使用-02(常用插件安装及使用)

富文本编辑器CKEditor4简单使用-02(常用插件安装及使用) 1. CKEditor4 入门2. 下载并安装常用插件——Language插件2.1 下载插件2.2 下载并安装 Language 插件2.2.1 下载 Language 插件2.2.2 下载 Menu Button插件以及后续的各依赖插件2.2.3 安装下载的L…

YOLOv5改进 | Conv篇 | 结合Dual思想利用HetConv创新一种全新轻量化结构CSPHet(参数量下降20W,)

一、本文介绍 本文给大家带来的改进机制是我结合Dual的思想利用HetConv提出一种全新的结构CSPHet,我们将其用于替换我们的C3结构,可以将参数降低越20W,GFLOPs降低至4.1GFLOPs,同时本文的结构比我提出的另一个CSPPC精度更高,但是轻量化效果要差一点同时本文结构为我独家创…

ElasticSearch-IK分词器(elasticsearch插件)安装配置和ElasticSearch的Rest命令测试

四、IK分词器(elasticsearch插件) IK分词器:中文分词器 分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一一个匹配操作&…

ElasticSearch概述及Window和Linux环境下安装

一、ElasticSearch 1、ElasticSearch概述 ES(Elasticsearch)是一个基于开放源代码的分布式搜索引擎,用于快速和灵活地搜索和分析大量数据。它是构建在Apache Lucene之上的,通过提供一个简单而强大的RESTful API来实现全文搜索、…

麒麟系统—— openKylin 安装 Nginx

麒麟系统—— openKylin 安装 Nginx 一、准备工作1. 确保麒麟系统 openKylin 已经安装完毕。 二、下载 nginx三、解压与运行解压检查与编译安装编译运行 四、配置加入到服务中加入环境变量nginx 配置文件 五、常用命令 Nginx 是一款高性能的 HTTP 和反向代理服务器&#xff0c…

Java编程练习之类的封装2

1.封装一个股票(Stock)类,大盘名称为上证A股,前一日的收盘点是2844.70点,设置新的当前值如2910.02点,控制台既要显示以上信息,又要显示涨跌幅度以及点数变化的百分比。运行效果如下:…

【甲方安全建设】DevOps初体验

文章目录 前言传统的开发方式:Docker-解决环境问题 DevOps-CI/CD走向流水线Jenkins工作流程Git拉取代码Maven构建打包通过SSH连接后端服务器 实现效果 DevSecOps-安全赋能关于安全平台漏洞扫描漏洞预警TODO 前言 临近春节,笔者经过半年北漂,…