spring6.0.x源碼調試環境搭建

来源:https://www.cnblogs.com/xiaosiyuan88888888/archive/2023/04/09/17299692.html
-Advertisement-
Play Games

效果 搭建一個spring源碼調試環境,創建一個spring-demo模塊,寫一些測試代碼。 給源碼添加註釋。 給源碼打包 ubantu環境下搭建spring6.0.x源碼環境 步驟 源碼網址 Spring Framework 下載代碼 fork到自己的GitHub倉庫,然後拉代碼 git clon ...


效果

搭建一個spring源碼調試環境,創建一個spring-demo模塊,寫一些測試代碼。

gh

給源碼添加註釋。

gh

給源碼打包

gh

ubantu環境下搭建spring6.0.x源碼環境

步驟

源碼網址

Spring Framework

gh

下載代碼

fork到自己的GitHub倉庫,然後拉代碼

git clone https://github.com/GitHubXiaoSiyuan/spring-framework-6.0.7.git

代碼拉到 ~/files/projects/kernel_projects/fr
amework 目錄下

gh

gradle下載與配置

下載

https://gradle.org/releases/

gradle/wrapper/gradle-wrapper.properties

找到版本為7.6的 gradle

distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip

gh

找到 7.6 的版本,點擊下載(註:點擊之後,用迅雷下載很快)

下載鏈接如下(複製即可觸發迅雷下載)

https://downloads.gradle-dn.com/distributions/gradle-7.6-all.zip

gh

解壓

sudo unzip gradle-7.6-all.zip

gh

gh

配置環境變數

# 設置環境變數
sudo vi /etc/profile

# 在底部加入這一段
# gradle
export GRADLE_HOME=/home/xiaosy/files/development/gradle-7.6 
export PATH=$NODE_HOME/bin:$PATH

# 變數生效
source /etc/profile

# 設置讀寫許可權
sudo chmod -R 777 /home/xiaosy/files/development/gradle-7.6/bin

# 查看版本
# 不知道為什麼直接 gradle -v 沒用
/home/xiaosy/files/development/gradle-7.6/bin/gradle -v

gh

gh

idea配置

配置gradle編譯

Tools -> gradle

# 路徑
壓縮包放在 /gradle/wrapper/ 目錄下

路徑配置
/home/xiaosy/files/development/gradle-7.6


gh

gh

下載二進位版本

https://services.gradle.org/distributions/gradle-7.6-bin.zip

gh

jdk

設置為 jdk17

# 設置環境變數
sudo vi /etc/profile


# 修改jdk路徑
# jdk
export JAVA_HOME=/home/xiaosy/files/development/jdk17/jdk-17.0.6


# 變數生效
source /etc/profile

gh

gradle-wrapper.properties修改

打開 gradle/wrapper/gradle-wrapper.properties

將distributionUrld地址替換為本地gradle下載

# 修改後
distributionUrl=/home/xiaosy/files/development/gradle-7.6-all.zip

gh

build.gradle文件修改

替換國內鏡像

	repositories {
		maven { url "https://maven.aliyun.com/repository/central" }
		mavenCentral()
		maven {
			url "https://repo.spring.io/milestone"
			content {
				// Netty 5 optional support
				includeGroup 'io.projectreactor.netty'
			}
		}
		maven { url "https://repo.spring.io/libs-spring-framework-build" }
		if (version.contains('-')) {
			maven { url "https://repo.spring.io/milestone" }
		}
		if (version.endsWith('-SNAPSHOT')) {
			maven { url "https://repo.spring.io/snapshot" }
		}
	}

gh

setting.gradle文件修改

替換國內鏡像

	repositories {
		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/" }

		gradlePluginPortal()
		google()
		mavenCentral()
	}

gh

註釋

//註釋掉不然會A build scan was not published as you have not authenticated with server 'ge.spring.io'.

gh

用idea集成的gradlereload

gh

編譯成功

gh

新建module

gh

在新項目的build.gradle下添加對spring模塊的依賴,這裡我先添加了spring-beans 和spring-core的依賴。

dependencies {
    compile(project(":spring-beans"))
    compile(project(":spring-core"))
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

gh

在新項目的src/main/resource下添加spring-config.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	<!--把對象的創建交給spring來管理-->
	<bean id="person" class="com.wts.Person">
		<property name="id" value="1"></property>
		<property name="name" value="zhangsan"></property>
	</bean>
</beans>


創建測試bean和啟動類

public class Person {

	private int id;

	private String name;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}


public class Test {

	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		Person person = (Person) ac.getBean("person");
		System.out.println(person);
	}
}

debug

1. 更改壓縮包位置

The specified Gradle distribution 'file:/home/xiaosy/files/projects/kernel_projects/framework/spring-framework-6.0.7/gradle/wrapper/home/xiaosy/files/development/gradle-7.6-all.zip' does not exist.

gh

2

設置文件讀寫許可權

Could not create parent directory for lock file /gradle-7.6/wrapper/dists/gradle-7.6-all/cmg34oui1skho6ogkheeq1oxe/gradle-7.6-all.zip.lck

sudo chmod -R 777 ~/files/projects/kernel_projects/framework/spring-framework-6.0.7

gh

3

Cause: zip file is empty

gh

4

gh

解決:

gradle.properties

org.gradle.java.home=/home/xiaosy/files/development/jdk17/jdk-17.0.6

倆 gradle.properties 都設置了

gh

註釋掉這段代碼,然後重寫就不報錯了,純粹的編譯問題

gh

參考

  1. Spring 6 源碼編譯和高效閱讀源碼技巧分享備份

參考

  1. Spring6.0.0源碼閱讀環境搭建-gradle構建編譯備份
  2. Spring源碼深度解析:一、Spring整體架構和源碼環境搭建備份

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 這幾天在學習如何使用自定義註解實現Excel格式數據導入導出,參考的還是若依框架裡面的代碼,由於是初學,所以照貓畫虎唄,但是難受的是需要複製並根據自己項目修改作者自定義的工具類以及導入這些工具類的依賴包。由於吃了這個苦,我決定把這個艱辛的CV操作通過一張邏輯圖來表達,方便我以後復用。下麵證實開 ...
  • 摘要:StampedLock是一種在讀取共用變數的過程中,允許後面的一個線程獲取寫鎖對共用變數進行寫操作,使用樂觀讀避免數據不一致的問題,並且在讀多寫少的高併發環境下,比ReadWriteLock更快的一種鎖。 本文分享自華為雲社區《一文徹底理解併發編程中非常重要的票據鎖——StampedLock》 ...
  • 隨著技術的發展,ASP.NET Core MVC也推出了好長時間,經過不斷的版本更新迭代,已經越來越完善,本系列文章主要講解ASP.NET Core MVC開發B/S系統過程中所涉及到的相關內容,適用於初學者,在校畢業生,或其他想從事ASP.NET Core MVC 系統開發的人員,僅供學習分享使用 ...
  • 救急 臨時文件 WIN+R 打開啟動命令輸入 %TEMP% 其實就是打開系統用戶下的臨時文件夾 文件夾下的文件都是應用的臨時文件,刪掉也會重覆創建。選中所有文件直接shift+Delete直接刪除不走回收站。 臨時文件其實也不是很大 虛擬記憶體 Windows的虛擬記憶體技術會拿出一部分硬碟空間充當記憶體 ...
  • 實驗證明,巨集定義 LV_MEM_CUSTOM 從 0 改為 1,對 LVGL+TFT_eSPI 編譯時不再提示 “section `.rodata' will not fit in region `dram0_0_seg'” 或“section `.bss' is not within region... ...
  • 鎖屏面試題百日百刷,每個工作日堅持更新面試題。請看到最後就能獲取你想要的,接下來的是今日的面試題: 1.HBase內部機制是什麼? Hbase是一個能適應聯機業務的資料庫系統 物理存儲:hbase的持久化數據是將數據存儲在HDFS上。 存儲管理:一個表是劃分為很多region的,這些region分佈 ...
  • 1. 精靈圖 1.1 為什麼需要精靈圖 一個網頁中往往會應用很多小的背景圖像作為修飾,當網頁中的圖像過多時,伺服器就會頻繁地接收和發送請求圖片,造成伺服器請求壓力過大,這將大大降低頁面的載入速度。 因此,為了有效地減少伺服器接受和發送請求的次數,提高頁面的載入速度,出現了CSS精靈技術。 核心原理: ...
  • 今年是23年,互聯網大裁員,電腦行業的小伙伴也深有體會,那麼還沒有入行的我們要怎麼去選擇編程語言?一文簡單帶你分析你應該值得去學什麼 原文地址,未來會持續更新Python面試題、前後端分離項目,點擊鏈接前往 結論 值得去學Python,不管是作為第一編程語言還是第二編程語言,你都應該要學習Pyth ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...