1 Spring源码环境编译与构建
工欲善其事 必先利其器
源码调试搭建步骤:
七大步骤
1.1 自动化构建gradle介绍
引言:
为什么要讲解gradle?
因为从Sping5开始,官方就开始使用gradle来构建环境了
接下来,我们所有的环境都要基于gradle
什么是gradle
Gradle是一个项目自动化构建工具。
是Apache的一个基于Ant 和Maven的软件,用于项目的依赖管理。
项目的构建经历了三个时代:
引言:
为什么要讲解gradle?
因为从Sping5开始,官方就开始使用gradle来构建环境了
接下来,我们所有的环境都要基于gradle
Apache Ant(2000 年左右)
Maven(2004年)
Gradle(2012 年左右)
Spring(5.0开始) 等优秀的开源项目都将自己的项目从 Maven 迁移到了 Gradle
Google 官方 Android 开发的 IDE Android Studio 也默认使用了 Gradle 进行构建。
1.2 源码环境搭建与编译
四大步骤
1)安装gralde环境
下载gradle,建议不要下载太高的版本,版本太高,后面在idea中编译的时候有些spring的组件下载不
了
https://services.gradle.org/distributions/
gralde的安装非常简单,就和配置jdk一样的道理,将主目录配置到环境变量即可
设置JAVA_HONME和GRADLE_HOME
然后cmd打开窗口,测试一下是否安装成功
gradle -V
tips:常见问题
如果不能正常查看版本号,说明jdk版本太高,需要将JAVA_HOME修改为8
2)下载Spring源码
进入Spring官网,然后从下面的窗口进入到github
https://spring.io/projects/spring-framework#learn
直接从github下载
https://github.com/spring-projects/spring-framework
3)源码环境编译
gradlew.bat
执行项目下的gradlew.bat, 等待构建完成…
4)IDEA导入源码
注意:这里必须使用import Project,不能使用open形式打开
然后点击 Finish 就会进入项目的自动构建阶段了。
Spring 构建完成(耗时比较长),如下图所示
正在编译
关键步骤
如果不运行当前的compileTestJava,会有很多类找不到
手工删除上面的 build;如果遇到找不的class依赖,右键run
5)常见错误
如果构建非常慢,可以在C:\用户\下创建【init.gradle】文件
allprojects { repositories { maven { name "ALIYUN_CENTRAL_URL" // name 可以不需要 url 'https://maven.aliyun.com/nexus/content/repositories/central' } maven { name "ALIYUN_JCENTER_URL" url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' } maven { name "ALIYUN_GOOGLE_URL" url 'https://maven.aliyun.com/nexus/content/repositories/google' } } }
2 构建gradle源码测试项目
2.1 开始搭建测试项目
四步:
1、新建测试module项目
首先我们在 Spring 源码项目中新增一个测试项目,点击 New -> Module… 创建一个 Gradle 的 Java 项目
2、详细信息
3、设置gradle
4、完善信息
在 build.gradle 中添加对 Spring 源码的依赖:
compile(project(‘:spring-context’))
spring-context 会自动将 spring-core、spring-beans、spring-aop、spring-expression 这几个
基础 jar 包带进来。
接着,我们需要在项目中创建一个 bean 和配置文件(application.xml)及启动文件(Main.java)
接口如下:
package com.spring.test.service; public interface UserService { public String getName(); }
实现类
package com.spring.test.impl; import com.spring.test.service.UserService; public class UserServiceImpl implements UserService { @Override public String getName() { return "Hello World"; } }
Main代码如下
public class Main { public static void main(String[] args) { ApplicationContext context =newClassPathXmlApplicationContext("classpath*:application.xml"); UserService userService = context.getBean(UserService.class); System.out.println(userService); // 这句将输出: hello world System.out.println(userService.getName()); } }
配置文件 application.xml(在 resources 中)配置如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="userService" class="com.spring.test.impl.UserServiceImpl"/> </beans>
运行
输出如下
com.spring.test.impl.UserServiceImpl@2aa5fe93 Hello World