spring源码环境5.2.x搭建(截图详细,踩坑多)

1.拉取git代码

git clone -b 5.2.x https://github.com/spring-projects/spring-framework.git

如果网络不好,可以通过gitee把github上的spring-framework导入到gitee

2.配置gradle

下载gradle到e:/gradle目录并解压到当前目录

打开https://gradle.org/releases下载对应版本Gradle(Spring 5.2.x 推荐Gradle版本5.6.3),别下二进制

使用文本编辑器查看项目目录spring-framework\gradle\wrapper\gradle-wrapper.properties文件

进行如下操作
注释掉一行,添加一行

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
#distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip
distributionUrl=file:///e:/gradle/gradle-5.6.3-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

3.配置Gradle环境变量

新增系统变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bOS181cM-1660133665801)(./4.png)]

Path变量添加一条

%GRADLE_HOME%\bin

4.使用Idea,直接open选中源码项目打开

注意打开Idea应该会自动加载,全部点取消

打开项目之后,【File】->【Settings】,设置Gradle,Gradle user home这个目录你自己设置一个空文件夹。如果不设置的话,它默认是C:\Users\用户名.gradle,这个目录你就可以认为相当于 是我们的本地的maven仓库,gradle编译项目所依赖的jar都会下载后放入这个目录中。JVM默认我这里就是jdk8,jdk至少就是jdk8。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2R55PJN3-1660133431926)(./5.png)]

5.打开build.gradle文件,在文件头部加上Spring插件库

(这个就相当于是maven的pom文件),

buildscript {
repositories {
maven { url 'https://repo.spring.io/plugins-release-local' }
}
}

在这里插入图片描述

网上的基本都是

buildscript {
repositories {
maven { url "https://repo.spring.io/plugins-release" }
}
}

网上的可能会报如下错误

org.org.gradle.internal.resource.transport.http.HttpErrorStatusCodeException: Could not HEAD 'https://repo.spring.io/xxxx/.../xxx.pom'. Received status code 401 from server: Unauthorized

就是禁止匿名访问
在这里插入图片描述

6.bulid.gradle文件添加阿里镜像

搜索repo

在这里插入图片描述


maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }

maven { url "https://repo.springsource.org/plugins-release" }

7.等待下载依赖

都修改好之后,保存一下,点击页面下图刷新图标,等待项目下载依赖构建即可,如果有报错多刷新几遍

在这里插入图片描述

8.查看是否构建成功

构建成功之后,找到 ApplicationContext 类,打开后,按下Ctrl+Alt+U键,如果出现下图所示类图界面说明构建成功了

在这里插入图片描述

此时可以查看Spring的源码了,但是我们需要在源码的基础上面进行修改,开发,调试,添加注释等等 操作,所以需要将源码进行编译打包,下面我们将进行编译源码编译

9.spring-aspects模块问题解决

一般情况下在编译spring源码时,spring-aspects模块是不能和其它模块(spring-core等)在导入IDEA时一起编译的,因为它依赖了aspectJ

因此要解决,网上的博客要么直接在项目中排除spring-aspects模块,即不编译spring-aspects,要么就是如下方式解决

9.1下载AspectJ编译器

去AspectJ官网下载AspectJ编译器,下载aspectj1.9.5的。
链接地址: https://www.eclipse.org/downloads/download.php?file=/tools/aspectj/aspectj-1.9.5.jar

选择一个国内镜像

在这里插入图片描述

下载好了后cmd切换到下载的目录下,执行java -jar aspectj-1.9.5.jar 命令安装ajc编译器。选择jdk目录

在这里插入图片描述

9.2idea安装Aspectj插件

请注意

网上的很多教程安装的插件是两个,Spring AOP/@AspectJ和AspectJ Support

但是现在这两个都搜不到了,只有AspectJ,猜测应该是把上面两个融合在一起了

在这里插入图片描述

9.3 将Idea编译器设置为ajc

将Idea编译器设置为ajc,然后设置AspectJ安装目录下的lib文件夹中的aspectjtools.jar文件,再勾选Delegate to Javac选项。

在这里插入图片描述

9.4 spring-aop_main和spring-aspectjs_main 添加aspectj

将 spring-aop_main 和 spring-aspectjs_main 两个模块添加 AspectJ Facets,打开:File–Project Structure–Modules

在这里插入图片描述

**spring-aspectjs_main同样操作。**别忘了

10.编译

先编译spring-oxm下的compileTestjava,选中双击即可,编译完成出现BUILD SUCCESSFUL代表编译完成

在这里插入图片描述

再编译下spring-core模块,因为之后的spring-context依赖于core,方法同上。

在这里插入图片描述

都编译完成且成功之后,最后开始编译整个工程(这个过程非常耗时间),打开顶层项目spring->build->build,双击开始编译

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2e3YyLLo-1660133431938)(./18.png)]

编译完后,如果有一些用不到的模块编译失败,不用管它,例如spring-webflux

11.测试基本功能

都编译成功之后,可以添加一个测试模块进来,进行测试源码构建编译是否真的完成

步骤:【File】->【New】->【Module…】 在Spring中添加自己的module模块,同样选择gradle构建。

在这里插入图片描述

在这里插入图片描述

  1. 找到我们自己的测试模块test,打开build.gradle文件(相当于是pom文件),默认 dependencies依赖(这里的dependencies和maven里的依赖是一样的)我们需要手工添 加spring-context,spring-beans,spring-core,spring-aop这4个核心模块,具体如下
dependencies {

    //添加完要构建一下,否则代码中无法引用,注意不要忘了
    compile(project(":spring-context"))
    compile(project(":spring-beans"))
    compile(project(":spring-core"))
    compile(project(":spring-aop"))


    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}

  1. 下面编写一个简单的applicationContext获取容器用的bean,主要是测试Spring源码构建编译过程是否成功!

建立实体类User.java

public class User {
	private String id;
	private String userName;

	public User() {
	}

	public User(String id, String userName) {
		this.id = id;
		this.userName = userName;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	@Override
	public String toString() {
		return "User{" +
				"id='" + id + '\'' +
				", userName='" + userName + '\'' +
				'}';
	}
}

新建JavaConfig.java

@Configuration
@ComponentScan
public class JavaConfig {
	@Bean
	public User user(){
		return new User("001","Jack");
	}
}

最后编写一个测试类Test.java

public class Test {
	public static void main(String[] args) {
		System.out.println("hello");
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
		User user = (User) context.getBean("user");
		System.out.println(user.toString());
	}

}

运行Test类

在这里插入图片描述

表明环境已经成功了

12.测试aspectj

test项目的build.gradle添加aspectj依赖

在这里插入图片描述

添加完成后记得构建一下test项目,那个刷新图标刷新一下

新建如下两个类

@Component
public class TargetObj {
	public void saySomething() {
		System.out.println("调用。。。。");
	}
}

@Component
@EnableAspectJAutoProxy
@Aspect
public class MyAspect {

	@Pointcut("execution(* com.wly.TargetObj.*(..))")
	public void basePoint() {

	}

	@Before("basePoint()")
	public void hsf(JoinPoint joinPoint) {
		String name = joinPoint.getSignature().getName();
		System.out.println("methodName="+name);
	}
}

修改Test类代码测试aspectj

public class Test {
	public static void main(String[] args) {
		/*System.out.println("hello");
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
		User user = (User) context.getBean("user");
		System.out.println(user.toString());*/

		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
		TargetObj targetObj = context.getBean("targetObj", TargetObj.class);
		targetObj.saySomething();

	}
}

运行Test

发现出现控制台乱码

13.控制台乱码问题解决

  1. 修改 IntelliJ IDEA 全局编码、项目编码、属性文件编码

在这里插入图片描述

  1. IDEA 中自定义虚拟机选项:Help→Etit Custom VM Options

在这里插入图片描述

3.在test项目中的build.gradle里加个设置,要求编码用UTF-8

tasks.withType(JavaCompile) { 
  options.encoding = "UTF-8" 
} 

在这里插入图片描述

  1. 同时也在Gradle RunConfigurations 中 添加虚拟机参数配置UTF-8

在这里插入图片描述

  1. 在IDEA 中 编辑 Help | Edit Custom VM Options ,加入下面的参数

    -Dfile.encoding=UTF-8
    

在这里插入图片描述

完成上面几步后,关闭IDEA,再打开,再运行Test类的main方法

在这里插入图片描述

至此解决。

网上 大多数都都是这几步,有的还加下面这步,如果上面的方法都没有解决可试试下面这步

setting>gradle>build and run using项 默认的是gradle,改选idea项,但是我这样弄,编译都报错

在这里插入图片描述

本文章参考并结合了下面文章,太多坑了。

参考文章 :

Spring源码环境搭建–基于Gradle构建_xuegao.的博客-CSDN博客_gradle构建spring源码

Spring5源码调试环境搭建_沐木金的博客-CSDN博客

编译Spring源码的时候AspectJ报错。(解决方案)_吴涛_1618的博客-CSDN博客

Spring5源码阅读环境搭建-gradle构建编译_ForFuture Code的博客-CSDN博客

spring源码项目使用spring-aspects_small_horizon的博客-CSDN博客

Windows下gradle编译控制台中文乱码_Amouzy的博客-CSDN博客_gradle控制台中文乱码

在IDEA中 Gradle控制台出现中文乱码问题解决 - 灰信网(软件开发博客聚合) (freesion.com)

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值