Spring源码编译过程

欢迎阅读关于Spring源码编译及踩坑的文章。本文将为您介绍编译Spring源码的详细过程。Spring Framework是一个非常受欢迎的Java开发框架,提供了丰富的功能和组件,用于构建企业级应用程序。通过深入学习和理解Spring的源代码,您可以更好地理解框架的内部工作原理,并在需要时进行自定义和扩展。

1.在编译Spring源码之前,您需要配置适当的开发环境。确保你已经具备如下条件:

idea开发工具

gradle

jdk1.8及以上版本

windows系统

2.源码下载

我这里以spring-framework5.3.x为例

git clone --branch 5.3.x https://github.com/spring-projects/spring-framework.git

下载完后,找到/gradle/wrapper/gradle-wrapper.properties查看gradle版本

在这里插入图片描述

3.gradle下载与配置

(1)下载地址:Gradle Distributions

Spring源码编译过程_第1张图片

(2)配置环境变量

a.新建GRADLE_HOME变量

Spring源码编译过程_第2张图片

b.将其%GRADLE_HOME%\bin加入Path中

Spring源码编译过程_第3张图片

c.验证是否配置成功

Spring源码编译过程_第4张图片

4.修改源码配置

(1)gradle-wrapper.properties

将gradle路径修改为本地下载路径,可以在编译时直接加载,避免再从网络上进行下载

在这里插入图片描述

(2)kotlin版本号统一

idea的kotlin插件版本要与源码中build.gradle的kotlin版本统一,否则会出现很多莫名的报错。我这里是1.8.0

Spring源码编译过程_第5张图片
Spring源码编译过程_第6张图片

(3)注释企业约束

在build.gradle中搜索io.spring.gradle-enterprise-conventions找到后注释。

在这里插入图片描述

(4)添加阿里镜像

maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}

Spring源码编译过程_第7张图片

(5)修改settings.gradle

插件仓库设置阿里云镜像地址

maven { url "https://maven.aliyun.com/repository/public" }

Spring源码编译过程_第8张图片

(6)动态设置gradle.properties文件

1.增加内存分配 -- 这个按本机的内存去分配,我的是16G
org.gradle.jvmargs=-Xmx2048M

2.按需配置
org.gradle.configureondemand=true

3.开启守护进程
org.gradle.daemon=true

5.idea导入源码

File->New->Project from Existing Sources,选择源码包路径下的build.gradle文件完成源码导入

Spring源码编译过程_第9张图片

(1)idea配置gradle

File->Setting->Build,Execution,Deployment->Build Tools->Gradle

Spring源码编译过程_第10张图片

(2)导入后等待配置成功

`Starting Gradle Daemon…
Gradle Daemon started in 4 s 477 ms

Task :buildSrc:compileJava
Task :buildSrc:compileGroovy NO-SOURCE
Task :buildSrc:pluginDescriptors
Task :buildSrc:processResources
Task :buildSrc:classes
Task :buildSrc:jar
Task :buildSrc:assemble
Task :buildSrc:pluginUnderTestMetadata
Task :buildSrc:compileTestJava NO-SOURCE
Task :buildSrc:compileTestGroovy NO-SOURCE
Task :buildSrc:processTestResources NO-SOURCE
Task :buildSrc:testClasses UP-TO-DATE
Task :buildSrc:test NO-SOURCE
Task :buildSrc:validateTaskProperties
Task :buildSrc:check
Task :buildSrc:build

CONFIGURE SUCCESSFUL in 11m 57s`

Spring源码编译过程_第11张图片

(3)预编译

在idea底部菜单栏,切到Terminal菜单,输入spring-oxm的预编译命令:

gradlew :spring-oxm:compileTestJava

或者

.\gradlew :spring-oxm:compileTestJava

6 测试

在spring-context中添加测试类

package com.hikvision.bean;

/**
 * @Author: suming9
 * @Date: 2023/9/21 11:11
 */
import org.springframework.stereotype.Service;

@Service
public class Animal {

	private String name = "doudou";

	private String breed = "Border Collie";

	public String getName() {
		return name;
	}

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

	public void setBreed(String breed) {
		this.breed = breed;
	}


}

Spring源码编译过程_第12张图片

package com.company.test;

/**
 * @Author: franksu
 * @Date: 2023/9/21 11:16
 */
import com.company.bean.Animal;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {

	@Test
	public void test1() {
		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-test.xml");
		Animal animal = (Animal) applicationContext.getBean("animal");

		System.out.println("宠物名为:" + animal.getName() + "宠物品种为:" + animal.getBreed());
	}
}

Spring源码编译过程_第13张图片

启动后正常打印宠物名称与种类信息

在这里插入图片描述

大家如果过程遇到什么问题,欢迎下方留言或私信,感谢您的阅读,一起学习进步!

你可能感兴趣的:(java,spring,java,后端)