• Spring源码编译以及导入Intellij IDEA的操作步骤


    尝试编译spring源码,搞了好多次,问题也是出了一大堆,今天终于搞好了,现在记录一下操作步骤,以及其中的一些坑。

    前言

    1. 在github上尝试下了好多次,都不见成功,最后还是选择了码云, 地址: https://gitee.com/mirrors/Spring-Framework

    2. spring版本很多,我最开始下了master分支,结果需要jdk11去编译,废,所以选了一个早些的版本分支 5.1.x

    3. 码云支持打包下载和git下载,我最开始使用了打包下载,然后导入idea中进行编译,最终错误一大堆,即使将idea版本升到最新版本也不行,所以最后选择使用git clone的方式下载源码,后来发现,还是此方式好用

    准备工作

    1. spring-framework-5.1.x 分支地址: https://gitee.com/mirrors/Spring-Framework/tree/5.1.x , spring官方提供了编译源码的步骤, 点击下面的链接[https://github.com/spring-projects/spring-framework/wiki/Build-from-Source]即可

    1. Before You Start 部分要求先安装git 和 jdk8, 而且jdk8 的版本号后262之后(我之前编译失败,也不知有没有这方面的原因)。

    1. 因为我们是使用git clone方式下载spring源码的,所以git肯定是安装好了的

      git clone -b 5.1.x https://gitee.com/mirrors/Spring-Framework.git
      
    2. 最终很关键,很重要

      4.1 修改 ${spring-framework}/gradle/wrapper/gradle-wrapper.properties 文件的 distributionUrl 配置项

      distributionBase=GRADLE_USER_HOME
      distributionPath=wrapper/dists
      distributionUrl=https://services.gradle.org/distributions/gradle-4.10.3-bin.zip  // 默认配置
      zipStoreBase=GRADLE_USER_HOME
      zipStorePath=wrapper/dists
      

      spring的默认配置是需要去在线下载gradle的,反正我是下了半天没有成功。所以最终选择了离线下载。

      修改之后的配置文件如下所示:

      distributionBase=GRADLE_USER_HOME
      distributionPath=wrapper/dists
      distributionUrl=file:/D:/work/maven/gradle-4.10.3-bin.zip  // 这是我本地的gradle存放路径 
      zipStoreBase=GRADLE_USER_HOME
      zipStorePath=wrapper/dists
      
      

      注意

      1. gradle插件的版本一定要与spring提供的版本一致,我最开始没有弄成一致,结果就导致编译失败了。

      2. 配置gradle的环境变量(略)

      4.2 将gradle镜像地址修改成aliyun镜像,需要修改这几个文件 docs.gradle, build.gradle

      ​ 将docs.gradle文件中repositories 改成aliyun镜像。

      	repositories {
      		maven { url "https://maven.aliyun.com/repository/spring" }
      		maven { url "https://maven.aliyun.com/repository/spring-plugin" }
              
      		//gradlePluginPortal()
      		//maven { url "https://repo.spring.io/plugins-release" }
      	}
      
      

      ​ 将build.gradle文件中的repositories 改成aliyun镜像(有两处)

      buildscript {
          
      	repositories {
      		maven { url "https://maven.aliyun.com/repository/spring" }
      		maven { url "https://maven.aliyun.com/repository/spring-plugin" }
      	}
      	
      }
      
      	repositories {
      		maven { url "https://maven.aliyun.com/repository/spring" }
      		maven { url "https://maven.aliyun.com/repository/spring-plugin" }
      		maven { url "https://maven.aliyun.com/repository/public" }
      	}
      

      将上面这些修改完毕之后,就可以编译了。

    编译

    1. cd 到spring-framework的根目录
    2. 执行 ./gradlew build

    注意: 需要使用git bash , 否则windows根本就识别不了这个命令

    1. 等待,漫长的等待,如果报错,就再执行一次这个问题,如果再报错,就再执行。 反正我是连续执行了四次才最终编译成功的

    2. 如下图,Task并没有完全跑完,卡在这儿,死也不动了, 不过我猜测只要跑完Test类型的Task就应该可以了。

    导入IDEA

    1. 官网提供了导入IDEA的操作步骤,具体可见官方文档: https://github.com/spring-projects/spring-framework/blob/master/import-into-idea.md
    2. 在git bash中编译成功之后, 我导入idea直接就成功,并没有官方文档中出现的问题, 很幸运!!!

    测试

    1. 我在spring-framework工程下面创建了一下srping-zhengqinfeng-test 模块

    2. 在该模块的build.gradle文件中引入依赖

      dependencies {
          compile(project(":spring-context"))
          compile(project(":spring-core"))
          testCompile group: 'junit', name: 'junit', version: '4.12'
      }
      
    3. 创建测试代码

      import org.springframework.stereotype.Component;
      
      /**
       * @Author ZhengQinfeng
       * @Date 2020/12/6 22:37
       * @dec
       */
      @Component
      public class UserComponent {
      	public void test() {
      		System.out.println("this is a test!");
      	}
      }
      
      
      /**
       * @Author ZhengQinfeng
       * @Date 2020/12/06 22:26
       * @dec
       */
      @Configuration
      @ComponentScan("qinfeng.zheng")
      public class SpringConfig {
      }
      
      
      import org.springframework.context.annotation.AnnotationConfigApplicationContext;
      import qinfeng.zheng.component.UserComponent;
      
      /**
       * @Author ZhengQinfeng
       * @Date 2020/12/06 22:26
       * @dec
       */
      public class App {
      	public static void main(String[] args) {
      		AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
      		UserComponent userComponent = ac.getBean(UserComponent.class);
      		userComponent.test();
      	}
      }
      
      

      刷新依赖之后,测试运行成功!!!

    优化配置

    我看网上说,使用idea编译会快很多,因此我将其改了一下下

    但是,报错了,报错如下:

    百度,说是修改spring-context.gradle 文件, 将optional(project(":spring-instrument")) 改成 compile(project(":spring-instrument"))

    gradle刷新依赖,测试成功,代码编译速度也提升了, 完美!

  • 相关阅读:
    实例变量和类变量
    Spring源码解读(一)
    linux shell学习三
    linux shell学习二
    linux shell学习一
    利用Zynq Soc创建一个嵌入式工程
    (转) 使用vivado创建工程 4[完结]
    (转) 使用vivado创建工程 3
    (转) 使用vivado创建工程 2
    (转) 使用vivado创建工程 1
  • 原文地址:https://www.cnblogs.com/z-qinfeng/p/14095093.html
Copyright © 2020-2023  润新知