Spring Framework 5.3.29 源码编译 环境搭建

文章目录

  • 准备工作
  • 下载代码
  • 导入向导
  • 预编译
  • 导入 Idea
  • 新建模块
  • 问题解决


准备工作

  • git
    • git.exe 所在目录添加到 Path 中
  • gradle
    • 添加环境变量 GRADLE_USER_HOME, 指定到一个自定义目录, 用于存放 Gradle 的本地仓库和 Gradle Wrapper 的缓存文件
      • Specifies the Gradle user home directory (which defaults to $USER_HOME/.gradle if not set).

    • 添加环境变量 M2_HOME 指向 Maven 安装目录
      • Gradle 寻找 Maven 本地仓库的策略优先级如下, 确认寻找路径, 确保仓库 mavenLocal() 有效
      • USER_HOME/.m2/settings.xml >> M2_HOME/conf/settings.xml >> USER_HOME/.m2/repository
  • JDK 8 Update 60 以上即可构建 Spring, 但编译自己添加的模块, 需要 JDK 11 及以上
  • Idea, File | Settings | Build, Execution, Deployment | Build Tools | Gradle, 修改 Gradle user home 的值与环境变量 GRADLE_USER_HOME 的值相同

下载代码

GtiHub Spring Framework

截至到 20230821, Spring 5 的最新正式版是 5.3.29

通过 Git ([email protected]:spring-projects/spring-framework.git) 的方式把代码拉下来, 文件夹名称叫 spring, 然后切换分支到标签 5.3.29, 可以使用命令 git checkout -b mybranch v5.3.29

Spring Framework 5.3.29 源码编译 环境搭建_第1张图片

修改根目录下 build.gradle 的内容, 在 repositories 节点中添加 Maven 本地仓库和阿里云仓库, 构建速度可能会快一点

		repositories {
			mavenLocal()
			maven {url 'https://maven.aliyun.com/repository/public'}
			mavenCentral()
			maven { url "https://repo.spring.io/libs-spring-framework-build" }
		}

导入向导

源码中自带导入 Idea 的说明文件 import-into-idea.md, 大致意思如下

  • 进入到源码根目录
  • 执行 gradlew :spring-oxm:compileTestJava 命令来预编译 spring-oxm 模块
  • 源码导入 Idea, File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle
  • 排除 spring-aspects 模块, File-> Project Structure -> Modules
  • 没了

预编译

在源码文件夹打开终端, 执行 gradlew :spring-oxm:compileTestJava, 会先自动从 https://services.gradle.org/distributions/gradle-7.5.1-bin.zip 下载 gradle-7.5.1-bin.zip, 和一些依赖, 如果网络不行的话, 可能会报错. 一切顺利的话, 构建成功后大概显示如下内容

Spring Framework 5.3.29 源码编译 环境搭建_第2张图片

导入 Idea

先打开一个项目, 然后点击 File -> New -> Project from Existing Sources -> 找到 build.gradle, 点击 OK, Idea 会自动开始 Gradle Build, 会下载很多依赖, 等待其完成. 一切顺利的话, 构建成功后大概显示如下内容

Spring Framework 5.3.29 源码编译 环境搭建_第3张图片

构建完成之后, 点击 File - Project Structure - Modules, 移除子模块 spring-aspects

新建模块

点击 File - Settings - Build, Execution, Deployment - Build Tools - Gradle, Build and run using 和 Run tests using 两个选项都选择 IntelliJ IDEA, 这样不必每次都跑一堆任务, 即可直接运行测试代码

点击项目, 新建一个名为 main 的模块, 用于测试和 debug

在其 build.gradle 的 dependencies 中添加 spring-context 的引用 implementation(project(":spring-context")), 然后刷新配置

添加如下配置类, 然后编译运行, 作为解决各种问题的开始, 啥时候该类能运行了, 问题就解决完了

@Configuration
public class Application {

	@Bean
	public String string() {
		return "demo";
	}

	public static void main(String[] args) {
		AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(Application.class);
		Object bean = ac.getBean("string");
		System.out.println(bean);
	}

}

问题解决

C:\mrathena\develop\workspace\idea\mrathena\spring\spring-core\src\main\java\org\springframework\core\metrics\jfr\FlightRecorderStartupEvent.java:19:15
java: 程序包jdk.jfr不存在

File | Settings | Build, Execution, Deployment | Compiler | Java Compiler, Project bytecode version 改为对应 SDK 的版本

C:\mrathena\develop\workspace\idea\mrathena\spring\spring-context\src\main\java\org\springframework\context\weaving\DefaultContextLoadTimeWeaver.java:26:38
java: 找不到符号
  符号:InstrumentationSavingAgent
  位置: 程序包 org.springframework.instrument

你可能感兴趣的:(java,spring,framework,源码)