欢迎阅读关于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
(2)配置环境变量
a.新建GRADLE_HOME变量
b.将其%GRADLE_HOME%\bin加入Path中
c.验证是否配置成功
4.修改源码配置
(1)gradle-wrapper.properties
将gradle路径修改为本地下载路径,可以在编译时直接加载,避免再从网络上进行下载
(2)kotlin版本号统一
idea的kotlin插件版本要与源码中build.gradle的kotlin版本统一,否则会出现很多莫名的报错。我这里是1.8.0
(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'}
(5)修改settings.gradle
插件仓库设置阿里云镜像地址
maven { url "https://maven.aliyun.com/repository/public" }
(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文件完成源码导入
(1)idea配置gradle
File->Setting->Build,Execution,Deployment->Build Tools->Gradle
(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`
(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;
}
}
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());
}
}
启动后正常打印宠物名称与种类信息
大家如果过程遇到什么问题,欢迎下方留言或私信,感谢您的阅读,一起学习进步!