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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...