• 手把手教你spring源码搭建


    一 Spiring源码搭建

    1.1 gradle安装

    先不要下载安装,看后面,耐心看完本节所有内容再想要不要全局安装;

    1.2 下载源码

    github: https://github.com/spring-projects/spring-framework

    知识追寻者下载的是spring源码5.0版本, gradle 6.5.1, jdk1.8;

    由于github下载网速很慢,可以登陆码云进行folk一份github的spring源码到自己仓库下载会很快,如果你比较懒,知识追寻者也找到一个仓库如下;

    https://gitee.com/mirrors/Spring-Framework

    1.3导入 IDEA

    1. 打开 IDEA
    2. 选择Improt Project,指向spring源码目录;
    3. Improt Project from Existing Sources ;
    4. 选择 build.gradle;
    5. 配置gradle构建(如果不想全局配置这步省略,打开工程后会自动下载gradle)

    注意:idea 需要配置 gradle 关闭 offline 模式 ;由于2019版本在setting中无法找到 而是在右侧的视图中;

    1.4 源码编译

    有的小伙伴会下错gradle版本,那真是卡几天都无法解决的是,源码编译无法通过,直接放弃啊,知识追寻者也卡了一会,看官方说明才知道咋回事;

    方式一

    在源码项目的当前目录命令行输入如下命令会自动下载gradle, 直接将链接复制出来使用迅雷下载,然后配置gradle,在 右侧gradle视图中找到spring-oxm项目的compileTestJava双击即可;

    gradlew :spring-oxm:compileTestJava
    

    方式二

    也可以不配置本地全局gradle,你网络好就直接在命令行中使用如上命令,idea会自动进行局部配置;

    耐心等待一段时间进行源码编译;然后再用idea打开工程,构建成功如下

    1.5替换仓库

    工程目录下找到 build.gradle;在如下代码中添加一行 阿里仓库,提升下载依赖速度;

    	repositories {
    			mavenCentral()
    			maven { url "https://repo.spring.io/libs-spring-framework-build" }
    			maven { url "https://repo.spring.io/snapshot" } // Reactor and RSocket
    		}
    

    阿里云仓库

    maven { url "http://maven.aliyun.com/nexus/content/groups/public/"}
    

    1.6 去除 spring-aspect 加载

    如果加载到后面发现 spring-aspect 模块依赖报错,

    第一种方案 直接点击该工程 右键 -> unload module,或者使用 exclude module 排除模块;

    第二种方案:安装 aspect需要手动安装

    https://www.eclipse.org/aspectj/downloads.php

    关于 安装请看下面链接,因为知识追寻者这边没报错;

    https://blog.csdn.net/a704397849/article/details/102754505

    1.7 创建gradle测试工程

    File–>New–>Modul–>Gradle–>Java–>Next

    打开测试工程的build.gradle文件添加 依赖 beas 和 context;

    dependencies {
        compile(project(":spring-beans"))
        compile(project(":spring-context"))
        testCompile group: 'junit', name: 'junit', version: '4.12'
    }
    

    新建用户实体

    public class SysUser {
    
    	private String username;
    
    	private String password;
    
    	public SysUser() {
    	}
    
    	public SysUser(String username, String password) {
    		this.username = username;
    		this.password = password;
    	}
    	// 省略set/get  toString
    }	
    

    新建配置类

    /**
     * @Author lsc
     * <p> </p>
     */
    @Configuration
    public class SysConfig {
    
    	@Bean
    	public SysUser sysUser(){
    		return new SysUser("zszxz","123");
    	}
    }
    

    新建主类测试

    /**
     * @Author lsc
     * <p> </p>
     */
    public class ZszxzMain {
    
    	public static void main(String[] args) {
    		// 获取容器
    		ApplicationContext ac =new AnnotationConfigApplicationContext(SysConfig.class);
    		// 获取 bean
    		SysUser user = (SysUser) ac.getBean("sysUser");
    		System.out.println(user.toString());
    	}
    }
    

    build 一下 测试工程,然后执行主类,一般情况下会报错看后续内容

    1.8 去除风格校验

    如果报代码格式错误,找到 src 下checkstyle里面checkstyle.xml文件 ,去除掉 里面的风格校验;

    <?xml version="1.0"?>
    <!DOCTYPE module PUBLIC "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd">
    <module name="com.puppycrawl.tools.checkstyle.Checker">
    </module>
    
    

    1.9 kotlin报错

    如果 kotlin 1.3 版本太低,无法支持新的语法,找到 idea 的kotlin 语言配置,升级到 1.4;知识追寻者编译第一次编译出现这种问题,第二次没有;很魔幻的事情,建议大家不要使用idea 2019.2 版本,坑比较大;

    重点: 网速很重要,如果连wifi不建议进行编译,知识追寻者亲测用wifi发了2天没搞定!!!后来换了宽带非常快;

    1.20 核心包编译出错

    如果spring-core 核心包下 jrf 包(org.springframework.core.metrics.jfr)里面的类出错一种办法直接注释掉出错类,

    第二种:可能是jdk不兼容,更换jdk;

    1.20 编译成功

    如果最后没报错,并且主类执行成功输出如下;

    > Task :zszxz-test:ZszxzTest.main()
    SysUser{username='zszxz', password='123'}
    
  • 相关阅读:
    redis主从模式
    深入理解BigDecimal
    double使用BigDecimal进行计算出现精确度问题
    代理IP爬取和验证(快代理&西刺代理)
    Jsoup-简单爬取知乎推荐页面(附:get_agent())
    Jsoup-基础练习
    取数据超过内存限制的问题-解决方案(sample,takeSample,filter)
    说出你的故事:你为什么学爬虫
    hadoop第一次面到hr(品友互动)
    MapReduce本地运行模式wordcount实例(附:MapReduce原理简析)
  • 原文地址:https://www.cnblogs.com/zszxz/p/13450236.html
Copyright © 2020-2023  润新知