Spring 6 源码编译教程分享~

前言:Spring Boot 3 RELEASE版本于 2022年11月24日 正式发布,此次Spring Boot里程碑的升级也要求了最低JDK 17 和 Spring Framework 6 ,其核心框架的 Spring 也在 2022年11月16日 迎来了从 5.3.x 到 6.0.x 重大版本升级,借着这个机会,写一篇关于 Spring 6 源码编译的教程分享。

一、环境声明

Spring源码编译官方文档:https://github.com/spring-projects/spring-framework/wiki/Build-from-Source

根据官方描述,Spring 6需要JDK 17
![在这里插入图片描述](https://img-blog.csdnimg.cn/08f8d33b8ca64556a6603b2c7c538f3f.png

基础环境 版本 本地路径
操作系统 win 10 -
spring源码 6.0.2 D:\Source Code
Java环境 JDK 17 C:\Program Files\Java\jdk-17
编译工具 Gradle 7.6 D:\Develop Software\gradle-7.6
开发工具 2021.3.2 -

二、安装JDK 17

1. 下载JDK17

下载链接: https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe

下载后静默安装即可,按需修改 JDK 路径(我是放在C:\Program Files\Java\jdk-17下)

2.配置环境变量

根据自己情况配置,如果本地的JDK版本不是17则需要配置,是JDK 17的忽略!

考虑到可能会涉及到原来是JDK 8的用户,则需要多配置个JDK 17即可

  • 新加一个17的系统变量

在这里插入图片描述

  • 将原来JAVA_HOME的变量名的值更改如下,进行Java版本切换

在这里插入图片描述

  • 然后编辑系统变量Path,配置好下图的A处,同时需要保证B处的这两个变量下移在A的下方(环境变量读取默认由上而下,下移避免系统读取到默认Java版本),配置完毕后,一直确认即可。

在这里插入图片描述

check下配置好没有:java-version

在这里插入图片描述

三、安装Gradle

1. 下载Gradle

在这里插入图片描述

2.配置环境变量

添加系统变量:GRADLE_HOME=D:\Develop Software\gradle-7.6

在这里插入图片描述

添加至Path路径(%GRADLE_HOME%\bin),然后一直确认即可。

在这里插入图片描述

查看版本 gradle -v

在这里插入图片描述

3.配置镜像仓库

在gradle安装位置(D:\Develop Software\gradle-7.6\init.d) 目录下新建 init.gradle 文件

在这里插入图片描述
参考阿里云官方gradle配置指南:https://developer.aliyun.com/mvn/guide ,init.gradle 完整内容如下:

allprojects {
    
    
    repositories {
    
    
        maven {
    
     url 'file:///D:/Develop Software/maven/repository'} // 本地仓库地址,如果没有依次向下寻找
        maven {
    
     url "https://maven.aliyun.com/repository/public" }
        mavenLocal()
        mavenCentral()
    }
    buildscript {
    
    
        repositories {
    
    
            maven {
    
     url 'https://maven.aliyun.com/repository/public' }
            mavenLocal()
	    mavenCentral()
        }
    }
}

四、源码编译

1.获取Spring源码

# 将远程项目镜像拉到本地
git remote add spring [email protected]:mirrors/spring-projects/spring-framework.git
# 切换分支
git checkout -b v6.0.2
# 拉取分支到本地
git pull origin v6.0.2

在这里插入图片描述

2.IDEA环境设置

  • File → Settings → Build,Execution,Deployment → Build Tools → Gradle

在这里插入图片描述

  • build.gradle

找到 repositories 配置节点,新增阿里云镜像仓库地址

maven {
    
     url "https://maven.aliyun.com/repository/public" } // 阿里云镜像仓库

在这里插入图片描述

  • settings.gradle
    找到 repositories 配置节点,新增阿里云镜像仓库地址
maven {
    
     url "https://maven.aliyun.com/repository/public" } // 阿里云镜像仓库

在这里插入图片描述

  • gradle.properties
    项目内 gradle.properties 配置文件添加java路径
    org.gradle.java.home=C:\\Program Files\\Java\\jdk-17在这里插入图片描述
  • 慢慢等待gradle拉取相关依赖在这里插入图片描述
  • 注意拉取依赖过程中可能出现类似这样的报错:说没有找到相关的jar,这时需要我们去maven官网搜索相关版本的jar包,下载下来扔进提示中的目录中即可
    在这里插入图片描述
  • 同时还可能发生类似这样的报错:没找到对应的方法
    这可能是由于没有切换Spring分支导致的,使用的还是Spring 5.x分支版本的代码,而Gradle 7更改了相应的方法名,导致找不到方法报错!
    在这里插入图片描述
    解决方案:
    方案1:Spring版本切换成 6.x;
    方案2:可以用Gradle官网给的方法更新对应表,进行对应替换即可
    在这里插入图片描述
    在这里插入图片描述
  • 拉取完毕后这样就表示OK了在这里插入图片描述

3.编译步骤

在完成上述的源码导入和相关设置之后,就可以进行源码编译了。
参考IDEA导入说明文档 import-into-idea.md ,仅需三步:

在这里插入图片描述

1. Precompile spring-oxm with ./gradlew :spring-oxm:compileTestJava

在IDEA的Terminal终端中输入 ./gradlew :spring-oxm:compileTestJava 先执行 spring-oxm 的预编译:
在这里插入图片描述

done:

在这里插入图片描述

2.Import into IntelliJ (File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle)
  • File → New → Project from Existing Sources → Select File or Directory to import 选择 build.gradle 点击 OK 完成编译
    在这里插入图片描述
3.When prompted exclude the spring-aspects module (or after the import via File-> Project Structure -> Modules)

在这里插入图片描述

五、测试案例

在完成上文 Spring 源码编译之后,接下来我们可以新增一个示例模块来依赖工程中的其它 spring 模块做个简单的测试。

1.新建模块

File → Module 新增 spring-mytest-sample 示例模块

在这里插入图片描述

在这里插入图片描述

2.添加依赖

spring-mytest-sample 模块下的 build.gradle 新增 spring-context 依赖,它是包含了 spring-corespring-bean 和 IoC容器等Spring 运行时上下文的依赖。
在这里插入图片描述

3.测试代码

代码结构如下:

在这里插入图片描述

/**
 * 车接口
 */
public interface CarService {
    
    

	// 获取车的颜色
	String getColor();

	// 获取车的品牌
	String getBrand();
}
/**
 * 奔驰
 */
@Service
@Primary // 当一个接口存在多个实现类时,通过@Primary注解来指明哪个实现类作为首选进行自动装配注入
public class BenzCarServiceImpl implements CarService {
    
    
	@Override
	public String getColor() {
    
    
		return "Color: black";
	}

	@Override
	public String getBrand() {
    
    
		return "Brand: Benz";
	}
}
/**
 * 保时捷
 */
@Service
public class PorscheCarServiceImpl implements CarService {
    
    
	@Override
	public String getColor() {
    
    
		return "Color: pink";
	}

	@Override
	public String getBrand() {
    
    
		return "Brand: Porsche";
	}
}
/**
 * 启动测试类
 */
@ComponentScan("com.spring.mytest.sample.**")
public class SpringMyTestSampleApplication {
    
    

	public static void main(String[] args) {
    
    
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
				SpringMyTestSampleApplication.class
		);

		CarService carService = context.getBean(CarService.class);

		System.out.println(carService.getColor());
		System.out.println(carService.getBrand());
	}
}

4.测试结果

在这里插入图片描述

完美收官! end…

猜你喜欢

转载自blog.csdn.net/qq_40436854/article/details/129889129