前言
描述 | 版本号 |
---|---|
操作系统 | win10 |
jdk | 1.8.0_102 |
gradle | 4.9 |
spring | 5.0.x |
相关包在分享的网盘中
****链接:https://pan.baidu.com/s/1qDk4H9g5yGyrOOurXBGt7Q
提取码:lnt5
安装gradle
下载gradle
services.gradle.org/distributio…
其它版本,试了很多,就这个编译通过,测试通过
配置gradle
下载下来后解压
配置环境变量
GRADLE_HOME
GRADLE_USER_HOME
配置镜像加速
验证gradle
下载spring源码
版本是5.0.x,其它版本的试了几个,没成功
修改spring源码配置
spring源码下载下来后,不着急导入idea,先修改几处配置
配置gradle的远程仓库
打开spring源码的gradle配置文件
如下两处添加镜像源配置
// 配置国内镜像源
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven{ url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
配置源码使用的gradle版本
distributionUrl=file:///E:/yuanma/gradle-4.9-all.zip
这里的distributionUrl的值指向我们下载的gradle-4.9-all.zip压缩包
修改spring-beans.gradle文件配置
注释掉部分报错配置,替换成新的配置
def deps = compileGroovy.taskDependencies.immutableValues + compileGroovy.taskDependencies.mutableValues
compileGroovy.dependsOn = deps - "compileJava"
compileKotlin.dependsOn(compileGroovy)
compileKotlin.classpath += files(compileGroovy.destinationDir)
导入idea
做完上述步骤,就可以将项目导入idea了
等待下载好依赖,在gradle控制面板中即可看到导入的spring的各个模块
编译oxm、编译core
要编译整个spring的源码,我们需要预先编译 spring-oxm和spring-core
在gradle面板中找到如下按钮,点击即可编译oxm模块
编译结果如下:
我这里因为已经编译过了,所以会比较快
同理,编译core模块
编译结果如下:
编译整个spring源码
确保oxm和core模块编译成功后,即可编译spring整体
编译结果如下:
我这里因为已经编译过了,所以会比较快,初次编译的话,大概在半个小时的样子(实际上我等了1个半小时。。。),如果不配置国内的镜像源的话,根本就编译不通过。
到这里的话,其实spring的编译就完成了。项目的整体结构如下,并且各个模块在idea中都有一个蓝色的小标
打开 ApplicationContext 类,选中类名,按快捷键 ctr + alt + shift + u,可生成 ApplicationContext类的UML继承图
新建测试模块测试
新建spring-jiuge子模块
修改spring-jiuge模块的build.gradle文件,新增依赖
compile(project(":spring-beans"))
compile(project(":spring-core"))
compile(project(":spring-context"))
compile(project(":spring-aop"))
新建包 com.jiuge、以及类 User、JavaConfig、App,代码如下
User.java
package com.jiuge;
/**
* @author 九歌
* @history 2021/2/22 新建
* @since JDK1.8
*/
public class User {
private String userName;
public User(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
JavaConfig.java
package com.jiuge;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* @author 九歌
* @history 2021/2/22 新建
* @since JDK1.8
*/
@Configuration
@ComponentScan
public class JavaConfig {
@Bean
public User user(){
return new User("九歌");
}
}
App.java
package com.jiuge;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* @author 九歌
* @history 2021/2/22 新建
* @since JDK1.8
*/
public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
User user = (User) context.getBean("user");
System.out.println(user.getUserName());
}
}
运行App.java类中的main方法,能输出对应的user对象的userName字段的值 “九歌” 即可,如下:
如此,spring-5.0.x编译、测试通过。
附录--问题记录
上述编译过程,在公司电脑上进行,回家后,拿自己的电脑,照着上述步骤进行第二次编译,还是遇到了一些问题。
项目导入idea后,无法下载插件
导入idea中后,自动编译,提示无法下载插件 id "com.gradle.build-scan" version "1.8",按提示点击 Open File 定位到 id "com.gradle.build-scan" version "1.8"位置,如下图:
解决步骤:
- 将插件部分注释掉,触发编译
- 此时,触发编译,会提示报错,如下:
- 重新打开被注释掉的插件,重新触发编译即可解决问题。
如果仍然无法解决,可试试以下方法,打开控制台运行 gradle build -x test -x javadocjar ,会自动下载相关jar, 如图:
oxm、core编译通过后,编译整个spring项目,耗时巨长
解决步骤:
- 注释掉build.gradle中的部分task,不在进行doc文档的编译,如下图:
- 注释掉docs.gradle文件中的dokka部分和asciidoctor部分,如下图:
注释掉以上部分后,编译时间缩短为几分钟