通过idea编译运行Spring5源码

目录

1.准备工作

1.1 各版本展示

1.2 spring-framework下载

2.导入

2.1 直接导入项目

2.2 添加时的配置

3.编译

3.1 预编译spring-core和spring-oxm

3.1.1 找不到plugins-release文件

3.1.2 编译时出现循环引用报错

3.2 运行Demo

3.2.1 找不到spring-instrument的类

3.2.2 运行成功

4.后记


1.准备工作

1.1 各版本展示

  • Idea 2018.3.6
  • jdk 1.8.0_231
  • Gradle 4.7
  • spring-framework 5.0

1.2 spring-framework下载

下载地址:https://github.com/spring-projects/spring-framework/tree/5.0.x,本次选择5.0版本,下载完成解压后待用。

通过idea编译运行Spring5源码_第1张图片

1.3 gradle下载

下载地址:https://services.gradle.org/distributions/,本次选择4.7版本,下载解压后,添加对应的环境变量即可。

通过idea编译运行Spring5源码_第2张图片

2.导入

2.1 直接导入项目

从File->Open导入解压后的spring源码

通过idea编译运行Spring5源码_第3张图片

2.2 添加时的配置

  • 勾选auto-import
  • 点击使用本地的gradle
  • 配置gradle vm options:-XX:MaxMetaspaceSize=2048m -Xmx2048m -XX:MaxHeapSize=1024m

通过idea编译运行Spring5源码_第4张图片

 

3.编译

3.1 预编译spring-core和spring-oxm

由import-into-idea.md文件知:需要先编译spring-core和spring-oxm两个项目

通过idea编译运行Spring5源码_第5张图片

 

预编译spring-oxm,点击compileTestJava

通过idea编译运行Spring5源码_第6张图片

 

3.1.1 找不到plugins-release文件

修改build.gradle文件,添加仓库地址:

maven { url "http://repo.springsource.org/plugins-release" }
maven { url "https://maven.aliyun.com/repository/spring-plugin" }

通过idea编译运行Spring5源码_第7张图片

修改后如下图:

通过idea编译运行Spring5源码_第8张图片

 

3.1.2 编译时出现循环引用报错

通过idea编译运行Spring5源码_第9张图片

解决方案:

将 spring-beans.gradle 最后三行改为如下:

// This module also builds Kotlin code and the compileKotlin task naturally depends on
// compileJava. We need to redefine dependencies to break task cycles.
//compileGroovy.dependsOn = compileGroovy.taskDependencies.values - "compileJava"
//compileKotlin.dependsOn(compileGroovy)
//compileKotlin.classpath += files(compileGroovy.destinationDir)
def deps = compileGroovy.taskDependencies.immutableValues + compileGroovy.taskDependencies.mutableValues 
compileGroovy.dependsOn = deps - "compileJava" 
compileKotlin.dependsOn(compileGroovy) 
compileKotlin.classpath += files(compileGroovy.destinationDir) 

通过idea编译运行Spring5源码_第10张图片

修改后如下图:

通过idea编译运行Spring5源码_第11张图片

至此编译成功!

 

3.2 运行Demo

右击项目,添加一个Modules

通过idea编译运行Spring5源码_第12张图片

选择Gradle -> Java

通过idea编译运行Spring5源码_第13张图片

项目结构:

通过idea编译运行Spring5源码_第14张图片

AppConfig.java:

@Configuration
@ComponentScan("com.wat")
public class AppConfig {


   public void test(String msg){
      System.out.println("msg:" + msg);
   }
}

Main.java

public class Main {
   public static void main(String[] args) {
      AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
      AppConfig appConfig = annotationConfigApplicationContext.getBean(AppConfig.class);
      appConfig.test("hello spring!");
   }
}

 

3.2.1 找不到spring-instrument的类

运行项目后,提示spring-context找不到spring-instrument的类:

通过idea编译运行Spring5源码_第15张图片

解决方案:

将 spring-context.gradle 的 optional(project(":spring-instrument")) 修改为compile(project(":spring-instrument"))

通过idea编译运行Spring5源码_第16张图片

修改后如下图:

通过idea编译运行Spring5源码_第17张图片

 

3.2.2 运行成功

通过idea编译运行Spring5源码_第18张图片

 

4.后记

在下载源码进行本地编译时,总会遇见各种各样的问题。其中,各配件版本号一定要选择好,比如jdk的选择,当选择过高时,就会出现编译失败的情况。但是,随着软件版本的提升,许多地方也正逐步完善,例如之前需要修改dosc.gradle文件中的schemaZip项,但是现在Spring5.0版本的源码中已经修复了该bug,我想这也正是开源的力量在向前推进。

通过idea编译运行Spring5源码_第19张图片

 

你可能感兴趣的:(Spring源码分析)