参考博客
Spring 5.2.x 源码环境搭建(Windows 系统环境下)
使用Git,从码云上clone项目到本地,修改完之后提交项目到码云
git 如何创建一个分支
编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?
1. 下载源码
码云镜像仓库:点此
选择5.3.x的分支,下载zip压缩文件,解压,.github文件夹直接删了
2. 配置文件修改
build.gradle约292行改为(allowInsecureProtocol = true这个配置,配置init.gradle时最好也加上)
repositories {
// 本地仓库路径,应该是不用配置,根据环境变量处理的
maven { url 'file:///E:/java/development/gradle/gradle_repository'}
mavenLocal()
// 私服
maven { url "http://192.168.31.100:8081/repository/maven-public/"
// gradle7以后,使用http协议的会报错,需要允许不安全协议
allowInsecureProtocol = true }
// 阿里云公共仓库
maven { url "https://maven.aliyun.com/repository/public"
allowInsecureProtocol = true }
maven { url "https://repo.spring.io/libs-spring-framework-build"
allowInsecureProtocol = true }
mavenCentral()
}
【gradlewrappergradle-wrapper.properties】文件打开
distributionUrl=https://services.gradle.org/distributions/gradle-7.2-bin.zip
这个路径是gradlew会下载配置的gradle(可搜索gradle和gradlew区别),复制路径到浏览器直接下载,将压缩包放到自定义路径,然后配置gradlewrappergradle-wrapper.properties文件
# 下面组合为下载后解压位置 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists # 下载地址,现配置为文件位置 distributionUrl=file:///E:/java/development/gradle/gradle-7.2-bin.zip # 下面组合为下载后存放位置 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists
实际使用idea直接导入不一定会使用gradlw命令,也即上面的配置不一定有用,那么则需要自己配置gradle(搜索gradle的安装和配置),高版本的IDEA不支持gradle的全局配置了,只能单独对项目进行配置
还有.gitignore文件,默认配置的文件中忽略所有target文件夹,但是aop源码里有一个包就是名为target,需要在这里修改和IDEA配置不忽略,否则可能编译报错/提交码云时没有提交上去
target/
# 上面忽略所有target目录,下面则指定某个target目录不可忽略
!/spring-aop/src/main/java/org/springframework/aop/target/
注意:当直接复制上述配置时,注意将空白字符处理一下,避免复制出无法识别的空白字符从而报错
3. 码云上传(可略)
首先码云创建仓库,创建后也有指示如何配置(git的安装和配置自行搜索)
# 切换到解压后项目根目录 cd /E/java/OpenSource/Spring/Spring-Framework-5.3.x # 初始化 git init # 查询文件状态 git status -s # 全部提交到暂存区(所需时间较长) git add . # 提交到本地仓库 git commit -m '初始化' # 与远程仓库相关联, origin是远程分支名称, 取决于仓库配置, 码云仓库创建完毕时有指示 git remote add origin https://gitee.com/cxy-ali-gitee/spring-5.3.x.git # 提交到远程仓库(-u指定默认远程仓库, 后续可不指定远程仓库, 且会创建远程master分支) # 需要账号密码 git push -u origin master # 新建本地分支 git branch dev # 会在远程仓库建立dev分支 git push origin dev # 切换到dev分支 git checkout dev
3. 源码编译
IDEA:file -> project -> new project from existing source -> import project from extenal model(gradle)
导入后右下角和立即停止gradle的build,然后配置此项目的gradle
然后apply,可以看一下上面配置的zipStorePath路径是否产生,产生则先关闭IDEA,删除,然后重新打开IDEA
导入后在右边Gradle导航栏 spring-core --> Tasks --> other --> compileTestJava双击执行
OK,没问题
但是下面编译时会出错,在于org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator引入import org.springframework.aop.target.SingletonTargetSource失败看看;;
4. 测试
新建一个 gradle的模块,父module为spring,build.gradle内配置
1 dependencies { 3 api(project(":spring-context")) 4 }
主要是第二行引入模块
然后就可以编写案例测试了,只要新建一个Configuration类扫描 + 一个Bean ==> getBean 能拿出来即可
如
package com.chen.app; import com.chen.app.domain.UserService; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan("com.chen.app") public class Application { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Application.class); UserService bean = context.getBean(UserService.class); System.out.println("----------------------------------------------"); System.out.println(bean); System.out.println("----------------------------------------------"); } }
package com.chen.app.domain; import org.springframework.stereotype.Component; @Component public class UserService { }