Spring 5.3.x源码构建

Posted chenxingyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 5.3.x源码构建相关的知识,希望对你有一定的参考价值。

参考博客

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()
}
 

 

gradle\\wrapper\\gradle-wrapper.properties】文件打开

distributionUrl=https\\://services.gradle.org/distributions/gradle-7.2-bin.zip

这个路径是gradlew会下载配置的gradle(可搜索gradle和gradlew区别),复制路径到浏览器直接下载,将压缩包放到自定义路径,然后配置gradle\\wrapper\\gradle-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 {

}

 

 

 

以上是关于Spring 5.3.x源码构建的主要内容,如果未能解决你的问题,请参考以下文章

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

Spring一小部分源码解析(持续)

Spring 6 源码编译教程分享~

Spring Boot部署JAR文件瘦身优化经验分享

如何查看spring源码

spring——AOP原理及源码