grade构建阅读spring源码环境 Idea2020.3

grade构建阅读spring源码环境 Idea2020.3

笔者看了很多博客,从早上搞到晚上,终于成功了😢

第一步:下载spring源码

​ 在这里我推荐到码云上下载,网速比较快,顺便附上网址

https://gitee.com/mirrors/Spring-Framework?_from=gitee_search

第二步:下载对应gradle版本

首先我们要确认我们下载的源码所需要的gradle版本是哪个,我们先解压源码,进入这个目录下的properties这个文件

spring-framework\gradle\wrapper\gradle-wrapper.properties

在这里我们可以看到对应gradle版本是5.6.4,所以接下来我们要去官网下载5这个版本的gradle

附上网址https://gradle.org/releases/

点击下载,解压

第三步:配置gradle环境变量

点击确认后就可以了,然后我们看下我们环境变量添加成功了没有,发现是成功的

第四步:预编译spring

我们在spring源码中可以看到这个md文件,打开

按照它的步骤,我们首先要在当前目录下执行

gradle :spring-oxm:compileTestJava

在这期间会报关于找不到git的错误,这个不用管它

报错了就再跑几遍,看到success就成功了

第五步:导入到IDEA中

选择你的源码文件夹,之后

进去之后点击取消,因为我们已经自己下载了对应版本的Gradle了

之后我们要到设置里设置一下我们的Gradle

第六步:更换Gradle镜像源

中间四个替换成下面三个

maven{url 'http://maven.aliyun.com/nexus/content/groups/public/'}
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven{ url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}

这个也是一样

第七步,编译spring

点击下面右边那个刷新,然后它会下载依赖,要挺久的

等等等…终于好了,发现它右边也能展开了,然后我们就开始测试啦

第八步:测试

新建一个gradle model

然后写一个简单的demo,发现包没有导进来

我们加入下面这行导包

然后点击构建,发现就可以了

然后更改设置

然后我们新建测试类测试,发现报了错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kb8eu9aJ-1604623752465)(C:\Users\WXC\Desktop\typora\image-20201027101638597.png)]

这时候我们要去导入一个包,具体看这篇博客

https://blog.csdn.net/gooaaee/article/details/104437902

然后发现又报了错

这个问题具体看这篇博客

https://blog.csdn.net/weixin_43405771/article/details/106313378

然后就可以了

然后我们加个配置类试试看,发现也是没问题的

那如果我们想进行单元测试呢,加上test,让他导入junit4,等到导入完成后我们进行测试,发现报错了

然后发现又报错了,我的天

这时候我们要降低junit版本,然后让它重新导入

如果运行还发现这个错误

跟之前一样的步骤即可,终于可以了,感动😿

到这环境就搭建完成了,磕磕绊绊,开始进攻源码了!😃

追更:AOP设置

第一步:导入依赖

dependencies {
    implementation 'junit:junit:4.8'
    compile(project(":spring-context"))
    compile(project(":spring-instrument"))
    compile(project(":spring-aop"))
    compile(project(":spring-aspects"))
    testCompile group: 'junit', name: 'junit', version: '4.8'
}

等依赖导入完成后运行会发现找不到aspect类这类的错误,原因是spring源码的AOP使用了aspectj,而java不识别aspectj,所以我们要自己下载aspectJ

第二步:下载AspectJ安装

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

下载完成后

打开 系统cmd 命令行 切换工作目录到 下载的AspectJ 所在目录
执行 java -jar aspectj-1.9.0.jar

第三步:为spring-aspect 工程添加Facets属性

File -> Project Structure -> Facets -> 点击 + 按钮 -> AspectJ -> 选择 spring-aop_main -> 点击OK -> 右键spring-aop_main的Kotlin 选择删除,具体过程如下

同上面给spring-aop_main添加Facets属性一样 给 spring-aspects_main 也添加Facets属性

第四步:更改编译器

选择 Delegate to Javac ,作用是 只编译AspectJ的Facets

再次编译 Build -> Build Project,再跑起来,发现可以了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
package com.ischoolbar.programmer.controller; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import com.ischoolbar.programmer.entity.Clazz; import com.ischoolbar.programmer.entity.Grade; import com.ischoolbar.programmer.page.Page; import com.ischoolbar.programmer.service.ClazzService; import com.ischoolbar.programmer.service.GradeService; import com.ischoolbar.programmer.util.StringUtil; /** * 班级信息管理 * @author llq * */ @RequestMapping("/clazz") @Controller public class ClazzController { @Autowired private GradeService gradeService; @Autowired private ClazzService clazzService; /** * 班级列表页 * @param model * @return */ @RequestMapping(value="/list",method=RequestMethod.GET) public ModelAndView list(ModelAndView model){ model.setViewName("clazz/clazz_list"); List<Grade> findAll = gradeService.findAll(); model.addObject("gradeList",findAll ); model.addObject("gradeListJson",JSONArray.fromObject(findAll)); return model; }给这段代码加上注释
06-03
``` //导入所需的类 package com.ischoolbar.programmer.controller; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import com.ischoolbar.programmer.entity.Clazz; import com.ischoolbar.programmer.entity.Grade; import com.ischoolbar.programmer.page.Page; import com.ischoolbar.programmer.service.ClazzService; import com.ischoolbar.programmer.service.GradeService; import com.ischoolbar.programmer.util.StringUtil; /** * 班级信息管理 * @author llq */ @RequestMapping("/clazz") @Controller public class ClazzController { //自动注入GradeService和ClazzService @Autowired private GradeService gradeService; @Autowired private ClazzService clazzService; /** * 班级列表页 * @param model * @return */ @RequestMapping(value="/list",method=RequestMethod.GET) public ModelAndView list(ModelAndView model){ //设置视图的名称 model.setViewName("clazz/clazz_list"); //获取所有年级的列表 List<Grade> findAll = gradeService.findAll(); //将年级列表放入ModelAndView中 model.addObject("gradeList",findAll ); //将年级列表转换为JSON格式,并放入ModelAndView中 model.addObject("gradeListJson",JSONArray.fromObject(findAll)); return model; } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值