欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

记一次spring源码构建(idea)全过程 --亲测可用

程序员文章站 2022-05-29 13:36:53
...

前期环境搭建:

  • JDK版本:1.8.0_161
    • 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  • GRADLE版本:4.9
    • 下载地址:https://gradle.org/releases/
    • 配置教程:https://www.cnblogs.com/linkstar/p/7899191.html
  • Spring源码版本:v5.0.8.RELEASE
    • 下载地址:https://github.com/spring-projects/spring-framework/releases
  • IntelliJ IDEA版本:IntelliJ IDEA 2018.2.1 (Ultimate Edition)
    • 下载地址:https://www.jetbrains.com/idea/download/
  • 系统:WINDOWS 10

源码下载到本地后解压如下:

记一次spring源码构建(idea)全过程 --亲测可用

然后打开idea,导入下载好的项目

记一次spring源码构建(idea)全过程 --亲测可用

记一次spring源码构建(idea)全过程 --亲测可用

配置idea中的gradle环境

记一次spring源码构建(idea)全过程 --亲测可用

配置gradle运行环境参数

-XX:MaxPermSize=2048m -Xmx2048m -XX:MaxHeapSize=2048m

记一次spring源码构建(idea)全过程 --亲测可用

记一次spring源码构建(idea)全过程 --亲测可用

3.注释掉dokka和asciidoctor两个配置项

记一次spring源码构建(idea)全过程 --亲测可用

替换docs.gradle文件中的task schemaZip配置

因为spring源码是用linux环境构建的,文件路径和window不同,所以要换成windows环境的路径

记一次spring源码构建(idea)全过程 --亲测可用

task schemaZip(type: Zip) {
	group = "Distribution"
	baseName = "spring-framework"
	classifier = "schema"
	description = "Builds -${classifier} archive containing all " +
			"XSDs for deployment at http://springframework.org/schema."
	duplicatesStrategy 'exclude'
	moduleProjects.each { subproject ->
		def Properties schemas = new Properties();

		subproject.sourceSets.main.resources.find {
			it.path.endsWith("META-INF\\spring.schemas")
		}?.withInputStream { schemas.load(it) }

		for (def key : schemas.keySet()) {
			def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1')
			assert shortName != key
			File xsdFile = subproject.sourceSets.main.resources.find {
				it.path.endsWith(schemas.get(key).replaceAll('\\/','\\\\'))
			}
			assert xsdFile != null
			into (shortName) {
				from xsdFile.path
			}
		}
	}
}

 

根据import-into-idea.md文档步骤去构建

根据import-into-idea.md文档里面介绍,我们需要对spring-core和spring-oxm做预编译,可以通过以下命令./gradlew :spring-oxm:compileTestJava,在IDEA比较简单,对这两个包分别按下图操作即可:

 

记一次spring源码构建(idea)全过程 --亲测可用

 

终极构建Spring项目

最后一步,对整个Spring项目构建,这个时候它会自动下载依赖包,如果有异常,会在控制台抛出并停止操作。

记一次spring源码构建(idea)全过程 --亲测可用

记一次spring源码构建(idea)全过程 --亲测可用

构建过程比较长,需要半小时左右;构建完成后,新创建一个maven项目并编写测试

在spring源码中,新建一个自己的module

记一次spring源码构建(idea)全过程 --亲测可用

选择maven

记一次spring源码构建(idea)全过程 --亲测可用

记一次spring源码构建(idea)全过程 --亲测可用

记一次spring源码构建(idea)全过程 --亲测可用

记一次spring源码构建(idea)全过程 --亲测可用

记一次spring源码构建(idea)全过程 --亲测可用

 

此时可以编写测试demo

package com.hauto;


public class HelloSpring {
    public void say(){
	System.out.println("hello ==================");
    }
}
package com.hauto;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class TestClient {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.refresh();
        context.register(HelloSpring.class);
        HelloSpring helloSpring = (HelloSpring)context.getBean("helloSpring");
        helloSpring.say();
    }
}

运行此demo

注意=====================此时会报错=======

报错的内容是aspect相关的错误

记一次spring源码构建(idea)全过程 --亲测可用

解决办法

下载AspectJ
Spring实现了AOP(面向切面编程),它依赖AspectJ,因此需要下载AspectJ并安装,同时配置好环境变量。

记一次spring源码构建(idea)全过程 --亲测可用

打开命令行,cd到AspectJ的jar包所在的文件夹,运行java -jar aspectj-1.9.4.jar命令,打开AspectJ的安装界面,直接点击Next,如下图:

记一次spring源码构建(idea)全过程 --亲测可用

根据提示完成安装 

然后回到项目按下图完成aspectj的配置

记一次spring源码构建(idea)全过程 --亲测可用

记一次spring源码构建(idea)全过程 --亲测可用

记一次spring源码构建(idea)全过程 --亲测可用

记一次spring源码构建(idea)全过程 --亲测可用

 

 

现在可以启动demo中的测试了

记一次spring源码构建(idea)全过程 --亲测可用

相关标签: spring详解