通过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版本,下载完成解压后待用。

1.3 gradle下载

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

2.导入

2.1 直接导入项目

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

2.2 添加时的配置

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

 

3.编译

3.1 预编译spring-core和spring-oxm

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

 

预编译spring-oxm,点击compileTestJava

 

3.1.1 找不到plugins-release文件

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

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

修改后如下图:

 

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

解决方案:

将 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) 

修改后如下图:

至此编译成功!

 

3.2 运行Demo

右击项目,添加一个Modules

选择Gradle -> Java

项目结构:

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的类:

解决方案:

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

修改后如下图:

 

3.2.2 运行成功

 

4.后记

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

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值