H__D  

环境准备

  • Gradle:5.6.4(类似Maven构建工具)
  • Jdk:1.8.0_181
  • idea:2021.1.1 Community Edition(社区版)

1、下载Spring源码

  官网地址:https://github.com/spring-projects/spring-framework

  选择需要的版本下载。

  本例下载的是 5.2.4.RELEASE 版本,下载完后解压。

  

  源码中有文件 import-into-idea.md ,导入idea说明文件,可以进行参考

2、使用gradle,编译compileTestJava模块

1、gradle版本选择

  可以参考spring目录中的gradle版本(5.6.4)

  命令:cat ./gradle/wrapper/gradle-wrapper.properties 

  

  最好使用对应版本的gradle进行编译,否则可能出现版本问题

2、设置项目的gradle仓库镜像

  修改spring项目中的 build.gradle 文件,添加本地仓库 和 aliyun镜像

        repositories {
            // 配置先从本地仓库寻找jar包,优先寻找上一个配置,找到不执行下面的配置
            // 本地仓库位于USER_HOME/.m2/repository
            mavenLocal()
            // aliyun镜像
            maven { url 'https://maven.aliyun.com/nexus/content/groups/public/'}
            // Maven的中央仓库
            mavenCentral()
            // Spring Maven 仓库
            maven { url "https://repo.spring.io/libs-spring-framework-build" }
        }

3、使用gradle编译compileTestJava模块

  进入spring目录命令:cd /Users/h__d/Downloads/spring-framework-5.2.4.RELEASE

  命令:/Users/h__d/Applications/gradle-5.6.4/bin/gradle :spring-oxm:compileTestJava

  

3、使用Idea打开项目

  File --> Open --> 选择Spring项目目录spring-framework-5.2.4.RELEASE

   

4、测试使用

  可以自己找到项目中的测试类进行运行

  本例找的是 spring-context 项目中的 test/java包下的AnnotationConfigApplicationContextTests.java

  java/org/springframework/context/annotation/AnnotationConfigApplicationContextTests.java

  

  运行AnnotationConfigApplicationContextTests.java中的测试方法 registerAndRefresh()

  

  能运行成功,已成功编译,且能使用

5、可能出现的问题

问题1:类 org.springframework.core.ReactiveAdapterRegistry.CoroutinesRegistrar 的引用问题

  报错类 ReactiveAdapterRegistry 位置在 spring-core --> src/main/java 中

  

  解决:问题是由于CoroutinesRegistrar类无法引用到引起的,通过搜索找到CoroutinesRegistrar的源码位置,发现CoroutinesRegistrar是一个kotlin编写的类

  所以对应模块中引入它的jar包即可

  

  引入:右键 spring-core/kotlin-coroutines/build/libs/kotlin-coroutines-5.2.4.RELEASE.jar --> Add as Library --> Create Library --> 添加到对应的模块

  也可以在项目中的结构进行设置(File --> Library --> 进行设置),是spring-core.main模块能够引用到 kotlin-coroutines-5.2.4.RELEASE.jar 包

  

  

  如果其他项目出现类找不到的问题,也是这种解决方案

6、自定义Spring模块使用

  参考Spring项目中的其他模块

1、新建项目目录sprign-my

  右键spring项目名 --> new --> Directory --> 新建目录

      

  创建maven项目中对应的各种包

  

2、项目中新建文件 spring-my.gradle

description = "Spring MY"

apply plugin: "kotlin"
apply plugin: 'java'

dependencies {

    compile(project(":spring-core"))
    optional(project(":spring-beans"))
    optional(project(":spring-context"))

}

3、在Spring项目中添加模块spring-my

  找到spring项目配置文件 settings.gradle,增加包含模块 spring-my

  

  然后刷新grandle项目

  

4、对spring-my模块进行编码

  编辑配置类 MainConfig.java

 1 package com.test.my;
 2 import org.springframework.context.annotation.Bean;
 3 import org.springframework.context.annotation.Configuration;
 4 
 5 import java.util.Date;
 6 
 7 @Configuration
 8 public class MainConfig {
 9 
10     @Bean
11     public Date date() {
12         Date date = new Date();
13         return date;
14     }
15 
16 }

  编辑主类 MainStarter.java

 1 package com.test.my;
 2 
 3 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 4 
 5 import java.util.Date;
 6 
 7 public class MainStarter {
 8 
 9     public static void main(String[] args) {
10 
11         // 注解配置引用上下文
12         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
13 
14         // 获取bean
15         Date date = (Date) context.getBean("date");
16         System.out.println(date);
17 
18         // 关闭上下文
19         context.close();
20     }
21 }

5、测试spring-my模块

  运行主类 MainStarter.java即可

    

7、Gradle发布Spring项目

  参考:【Gradle】maven-publish插件的使用

   1、项目版本修改,在文件gradle.properties 中

version=5.2.4.RELEASE-MY

  2、class.jar和sources.jar及javadoc.jar 三种jar包

  • 打包sourcesJar任务 和 打包javadocJar任务,代码在 gradle/spring-module.gradle 文件中

  • 发布代码在gradle/publications.gradle 文件中

  3、执行命令

  打包sourcesJar任务命令:gradle sourcesJar

  打包javadocJar任务命令:gradle javadocJar

  发布到配置仓库命令:gradle publish

  发布到本地仓库命令:gradle publishToMavenLocal

  这样其他项目就根据maven依赖自己编译的Spring代码了

可能出现的错误

  1、问题:Kotlin插件版本不对

错误:/Users/h__d/Documents/git-repository/spring-framework-5.2.4/spring-core/build/libs/spring-core-5.2.4.RELEASE.jar!/META-INF/spring-framework-5.2.4.spring-core.main.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.16.  

  解决1:

    可能跟idea有关,退出idea,将idea相关配置删除,使用命令窗口进行发布

  解决2:

    - 删除idea中原有的Kotlin插件

    - 官网:https://plugins.jetbrains.com,下载对应版本的Kotlin插件

    - idea离线安装Kotlin插件(可自行百度)

    - 安装的时候,选择kotlin/lib/kotlin-plugin.jar 即可  

  2、问题:发布到本地仓库太慢

  解决:

    - 将 gradle/spring-module.gradle 文件中,注释掉artifact javadocJar代码

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
            artifact sourcesJar
//             artifact javadocJar
        }
    }
}

    - 将 gradle/publications.gradle 文件中,pom 相关的注释掉

publishing {
    publications {
        mavenJava(MavenPublication) {

//             pom {
//                 afterEvaluate {
//                     name = project.description
//                     description = project.description
//                 }
//                ......
//             }

        }
    }
}

 

 

posted on 2021-05-07 01:21  H__D  阅读(541)  评论(0编辑  收藏  举报