目录
一、Spring5.2.x源码环境搭建
搭建Spring5.2.x源码环境,需要安装jdk1.8以上版本,gradele4.2以上版本
工具:IntelliJ IDEA 2019.2.2
1.准备
1.1.安装gradle
-
下载
下载地址:https://services.gradle.org/distributions/
本文采用5.6.4版本:https://services.gradle.org/distributions/gradle-5.6.4-bin.zip
-
解压
-
配置环境变量
新增 GRADLE_HOME=D:\Gradle\gradle-5.6.4
PATH中增加 %GRADLE_HOME%/bin;
-
查看版本信息
gradle -v
-
配置gradle
在gradle的根目录下的init.d文件夹中新建一个 init.gradle ,添加一下内容(下载加速)
allprojects{ repositories { def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/' all { ArtifactRepository repo -> def url = repo.url.toString() if ((repo instanceof MavenArtifactRepository) && (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com'))) { project.logger.lifecycle 'Repository ${repo.url} replaced by $REPOSITORY_URL .' remove repo } } maven { url REPOSITORY_URL } } }
-
idea配置gradle
打开Idea,File--Settings--Build,Execution,Deployment--Build Tools--Gradle
配置 Gradle user home 为 gradle的环境变量 GRADLE_HOME 目录
1.2.下载Spring源码
采用git clone方式下载,直接下载zip包在构建的时候可能会出现问题
可以看到编译成功了,但是报错,git相关的错误
原因是,我们是采用zip方式下载下来进行构建的,zip主要是用来共享源代码,但是不一定用于构建它
想要避免此错误,要采用git clone方式下载
-
git clone
git clone -b 5.2.x https://gitee.com/mirrors/Spring-Framework.git
2.构建
-
修改build.gradle配置
repositories {
mavenCentral()
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
}
-
构建源码
cmd进入spring源码目录 spring-framework-5.2.x,执行 gradlew :spring-oxm:compileTestJava
此命令可能需要等一段时间,可以跳过,直接进行下一步,当然下一步也会耗时一会,因为要下载相关的包
-
导入到Idea
File--New--roject from Existing Sources
找到选择spring-framework源码, 选择build.gradle
-
修改gradle配置
spring导入到idea后进行构建时,默认会按照gradle中的配置
找到 gradle-wrapper.properties,按照配置进行下载
不想下载,可以进行修改
选择 Specified location,选择gradle的安装目录,即环境变量 GRADLE_HOME 目录
修改后,重启IDEA
重新进行构建,就没有下载gradle的步骤了
3.测试
3.1.新建工程
选中父工程 Spring-Framework,右键,new--Module
Next,填写ArtifactId,如 spring-mytest
Next,再Finish
3.2.修改build.gradle
加入依赖 spring-context
plugins {
id 'java'
}
group 'org.springframework'
version '5.0.11.BUILD-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile project(':spring-context')
testCompile group: 'junit', name: 'junit', version: '4.12'
}
3.3.编写测试代码
spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="testService" class="com.mytest.service.TestService"></bean>
</beans>
TestConfig.java
package com.mytest.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.mytest")
public class TestConfig {
}
TestService.java
package com.mytest.service;
import org.springframework.stereotype.Component;
@Component
public class TestService {
public void testMethod(){
System.out.println("Spring源码搭建成功!!");
}
}
Test.java
package com.mytest.main;
import com.mytest.config.TestConfig;
import com.mytest.service.TestService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//注解方式
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(TestConfig.class);
TestService bean = annotationConfigApplicationContext.getBean(TestService.class);.
bean.testMethod();
//配置文件方式
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("spring.xml");
TestService bean1 = classPathXmlApplicationContext.getBean(TestService.class);
bean1.testMethod();
}
}
测试运行
11:04:36: Executing task 'Test.main()'...
> Task :buildSrc:compileJava UP-TO-DATE
> Task :buildSrc:compileGroovy NO-SOURCE
> Task :buildSrc:pluginDescriptors UP-TO-DATE
> Task :buildSrc:processResources UP-TO-DATE
> Task :buildSrc:classes UP-TO-DATE
> Task :buildSrc:jar UP-TO-DATE
> Task :buildSrc:assemble UP-TO-DATE
> Task :buildSrc:pluginUnderTestMetadata UP-TO-DATE
> 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 UP-TO-DATE
> Task :buildSrc:check UP-TO-DATE
> Task :buildSrc:build UP-TO-DATE
> Task :spring-core:cglibRepackJar UP-TO-DATE
> Task :spring-core:objenesisRepackJar UP-TO-DATE
> Task :spring-expression:processResources UP-TO-DATE
> Task :spring-aop:processResources UP-TO-DATE
> Task :spring-beans:processResources UP-TO-DATE
> Task :spring-core:processResources UP-TO-DATE
> Task :spring-context:processResources UP-TO-DATE
> Task :spring-mytest:processResources
> Task :kotlin-coroutines:compileKotlin UP-TO-DATE
> Task :kotlin-coroutines:compileJava NO-SOURCE
> Task :kotlin-coroutines:processResources NO-SOURCE
> Task :kotlin-coroutines:classes UP-TO-DATE
> Task :kotlin-coroutines:inspectClassesForKotlinIC UP-TO-DATE
> Task :spring-instrument:compileJava UP-TO-DATE
> Task :kotlin-coroutines:jar UP-TO-DATE
> Task :spring-instrument:processResources NO-SOURCE
> Task :spring-instrument:classes UP-TO-DATE
> Task :spring-instrument:jar UP-TO-DATE
> Task :spring-jcl:compileJava UP-TO-DATE
> Task :spring-jcl:processResources UP-TO-DATE
> Task :spring-jcl:classes UP-TO-DATE
> Task :spring-jcl:jar UP-TO-DATE
> Task :spring-core:compileKotlin UP-TO-DATE
> Task :spring-core:compileJava UP-TO-DATE
> Task :spring-core:classes UP-TO-DATE
> Task :spring-core:inspectClassesForKotlinIC UP-TO-DATE
> Task :spring-core:jar UP-TO-DATE
> Task :spring-expression:compileKotlin UP-TO-DATE
> Task :spring-expression:compileJava UP-TO-DATE
> Task :spring-expression:classes UP-TO-DATE
> Task :spring-expression:inspectClassesForKotlinIC UP-TO-DATE
> Task :spring-expression:jar UP-TO-DATE
> Task :spring-beans:compileGroovy UP-TO-DATE
> Task :spring-beans:compileKotlin UP-TO-DATE
> Task :spring-beans:compileJava NO-SOURCE
> Task :spring-beans:classes UP-TO-DATE
> Task :spring-beans:inspectClassesForKotlinIC UP-TO-DATE
> Task :spring-beans:jar UP-TO-DATE
> Task :spring-aop:compileJava UP-TO-DATE
> Task :spring-aop:classes UP-TO-DATE
> Task :spring-aop:jar UP-TO-DATE
> Task :spring-context:compileKotlin UP-TO-DATE
> Task :spring-context:compileJava UP-TO-DATE
> Task :spring-context:compileGroovy NO-SOURCE
> Task :spring-context:classes UP-TO-DATE
> Task :spring-context:inspectClassesForKotlinIC UP-TO-DATE
> Task :spring-context:jar UP-TO-DATE
> Task :spring-mytest:compileJava
> Task :spring-mytest:classes
> Task :spring-mytest:Test.main()
Spring源码搭建成功!!
Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.6.4/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 5s
36 actionable tasks: 3 executed, 33 up-to-date
11:04:49: Task execution finished 'Test.main()'.
可以看到,正常输出了 Spring源码搭建成功!!
至此,Spring源码环境搭建成功。
最后,构建后的源码地址:https://gitee.com/yan002/spring-framework5.2.x.git