# Spring-Framework5.2.x
**Repository Path**: yan002/spring-framework5.2.x
## Basic Information
- **Project Name**: Spring-Framework5.2.x
- **Description**: Spring源码环境搭建仓库
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2021-04-04
- **Last Updated**: 2022-11-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 一、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 ,添加一下内容(下载加速)
```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 目录

## 2.构建
**`说明:下载源码采用git clone方式下载,避免zip包下载在构建时报错`**

- 修改build.gradle配置
```gradle
repositories {
mavenCentral()
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
}
```

- 构建源码
cmd进入spring源码目录 ,执行 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
```gradle
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
```
TestConfig.java
```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
```java
package com.mytest.service;
import org.springframework.stereotype.Component;
@Component
public class TestService {
public void testMethod(){
System.out.println("Spring源码搭建成功!!");
}
}
```
Test.java
```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源码环境搭建成功