zoukankan      html  css  js  c++  java
  • Spring 5.3.x源码构建

    参考博客

    Spring 5.2.x 源码环境搭建(Windows 系统环境下)

    使用Git,从码云上clone项目到本地,修改完之后提交项目到码云

    git 如何创建一个分支

    编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?

    1. 下载源码

    码云镜像仓库:点此

    选择5.3.x的分支,下载zip压缩文件,解压,.github文件夹直接删了

    2. 配置文件修改

    build.gradle约292行改为(allowInsecureProtocol = true这个配置,配置init.gradle时最好也加上)

    repositories {
       // 本地仓库路径,应该是不用配置,根据环境变量处理的
      maven { url 'file:///E:/java/development/gradle/gradle_repository'}
    mavenLocal()
    // 私服
      maven { url "http://192.168.31.100:8081/repository/maven-public/"
      // gradle7以后,使用http协议的会报错,需要允许不安全协议
        allowInsecureProtocol = true }
    // 阿里云公共仓库
      maven { url "https://maven.aliyun.com/repository/public"
    allowInsecureProtocol = true }
    maven { url "https://repo.spring.io/libs-spring-framework-build"
    allowInsecureProtocol = true }
    mavenCentral()
    }
     

    gradlewrappergradle-wrapper.properties】文件打开

    distributionUrl=https://services.gradle.org/distributions/gradle-7.2-bin.zip

    这个路径是gradlew会下载配置的gradle(可搜索gradle和gradlew区别),复制路径到浏览器直接下载,将压缩包放到自定义路径,然后配置gradlewrappergradle-wrapper.properties文件

    # 下面组合为下载后解压位置
    distributionBase=GRADLE_USER_HOME
    distributionPath=wrapper/dists
    # 下载地址,现配置为文件位置
    distributionUrl=file:///E:/java/development/gradle/gradle-7.2-bin.zip
    # 下面组合为下载后存放位置
    zipStoreBase=GRADLE_USER_HOME
    zipStorePath=wrapper/dists

    实际使用idea直接导入不一定会使用gradlw命令,也即上面的配置不一定有用,那么则需要自己配置gradle(搜索gradle的安装和配置),高版本的IDEA不支持gradle的全局配置了,只能单独对项目进行配置

     

    还有.gitignore文件,默认配置的文件中忽略所有target文件夹,但是aop源码里有一个包就是名为target,需要在这里修改和IDEA配置不忽略,否则可能编译报错/提交码云时没有提交上去

    target/
    # 上面忽略所有target目录,下面则指定某个target目录不可忽略
    !/spring-aop/src/main/java/org/springframework/aop/target/

    注意:当直接复制上述配置时,注意将空白字符处理一下,避免复制出无法识别的空白字符从而报错

    3. 码云上传(可略)

    首先码云创建仓库,创建后也有指示如何配置(git的安装和配置自行搜索)

    # 切换到解压后项目根目录
    cd /E/java/OpenSource/Spring/Spring-Framework-5.3.x
    # 初始化
    git init
    # 查询文件状态
    git status -s
    
    # 全部提交到暂存区(所需时间较长)
    git add .
    # 提交到本地仓库
    git commit -m '初始化'
    
    # 与远程仓库相关联, origin是远程分支名称, 取决于仓库配置, 码云仓库创建完毕时有指示
    git remote add origin https://gitee.com/cxy-ali-gitee/spring-5.3.x.git
    
    # 提交到远程仓库(-u指定默认远程仓库, 后续可不指定远程仓库, 且会创建远程master分支)
    # 需要账号密码
    git push -u origin master
    
    # 新建本地分支
    git branch dev
    # 会在远程仓库建立dev分支
    git push origin dev
    # 切换到dev分支
    git checkout dev

    3. 源码编译

     IDEA:file -> project -> new project from existing source -> import project from extenal model(gradle)

    导入后右下角和立即停止gradle的build,然后配置此项目的gradle

    然后apply,可以看一下上面配置的zipStorePath路径是否产生,产生则先关闭IDEA,删除,然后重新打开IDEA

    导入后在右边Gradle导航栏 spring-core --> Tasks --> other --> compileTestJava双击执行

    OK,没问题

    但是下面编译时会出错,在于org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator引入import org.springframework.aop.target.SingletonTargetSource失败看看;;

    4. 测试

    新建一个 gradle的模块,父module为spring,build.gradle内配置

    1 dependencies {
    3     api(project(":spring-context"))
    4 }

    主要是第二行引入模块

    然后就可以编写案例测试了,只要新建一个Configuration类扫描 + 一个Bean ==> getBean 能拿出来即可

    package com.chen.app;
    
    import com.chen.app.domain.UserService;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @ComponentScan("com.chen.app")
    public class Application {
        public static void main(String[] args) {
            AnnotationConfigApplicationContext
                    context = new AnnotationConfigApplicationContext(Application.class);
            UserService bean = context.getBean(UserService.class);
            System.out.println("----------------------------------------------");
            System.out.println(bean);
            System.out.println("----------------------------------------------");
        }
    }
    package com.chen.app.domain;
    
    import org.springframework.stereotype.Component;
    
    @Component
    public class UserService {
    
    }
     
  • 相关阅读:
    KMP
    KMP 算法详解
    快慢指针-链表环入口问题
    算法题——只出现一次的数字
    DECODE 与CASE WHEN 的比较
    Mybatis动态传入tableName--非预编译(STATEMENT)
    mysql数据库出现无法登录(ERROR 1045 ),预防和解决及系列问题解决方法。
    15.linux iptables防火墙规则vsftp服务
    14.LAMP服务 Linux Apache Mysql Php和防护机制 xinetd、tcp wapper
    13.mysql数据库
  • 原文地址:https://www.cnblogs.com/chenxingyang/p/14264921.html
Copyright © 2011-2022 走看看