前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >修改和编译spring源码,构建jar(spring-context-4.0.2.RELEASE)

修改和编译spring源码,构建jar(spring-context-4.0.2.RELEASE)

作者头像
程序员欣宸
发布2018-01-04 15:39:23
7160
发布2018-01-04 15:39:23
举报
文章被收录于专栏:实战docker实战docker

上周在定位问题的时候,发现有个异常是在spring构建bean的时候抛出的,为了查看更详细的信息,决定修改spring-context-4.0.2.RELEASE.jar中的CommonAnnotationBeanPostProcessor类的代码,在里面打印出更详细的信息,以便我们分析和定位问题,下面我们一步一步通过实战来修改和编译spring-context的源码;

下载源码

下载源码的第一步,是找个用到了spring-context-4.0.2.RELEASE.jar的java工程,如果读者您手里没有现成的工程,可以在我的git上下载,地址:git@github.com:zq2599/blog_demos.git;

下载后可以发现里面有很多工程,本次实战用的工程是springmybatisexceptiondemo,如下图红框所示:

这里写图片描述
这里写图片描述

用命令行进入pom.xml所在的目录下,执行命令mvn dependency:sources,即可下载所有依赖库的源码包,如下图:

这里写图片描述
这里写图片描述

此时进入maven的本地仓库,找到spring-context的目录,在里面就能看到源码的jar包,如下图:

这里写图片描述
这里写图片描述

maven的本地仓库,一般在用户目录的.m2文件夹下;

解压jar包,准备材料

在maven的本地仓库中,找到spring-context的目录后,将里面的spring-context-4.0.2.RELEASE.pom,spring-context-4.0.2.RELEASE-sources.jar,spring-context-4.0.2.RELEASE.jar这三个文件都复制到一个新建的文件夹中,然后将spring-context-4.0.2.RELEASE-sources.jar和spring-context-4.0.2.RELEASE.jar都解压;

新建spring-context的maven工程

新建一个maven工程,pom文件的内容和spring-context-4.0.2.RELEASE.pom的一模一样,如下图:

这里写图片描述
这里写图片描述

进入刚才解压的spring-context-4.0.2.RELEASE-sources.jar的文件夹,把里面的org文件夹整个都复制到新建的maven工程的java文件夹下,如下图所示:

这里写图片描述
这里写图片描述

只复制java文件是不够的,还要复制META-INF和xsd文件,这些东西都不在spring-context-4.0.2.RELEASE-sources.jar包中,还记得刚刚我们把spring-context-4.0.2.RELEASE.jar文件也解压了么?META-INF和xsd文件在这个解压的文件夹中可以找到;

先是META-INF,在spring-context-4.0.2.RELEASE.jar的解压目录中,把META-INF文件夹复制到新建的maven工程的resources文件夹下,如下图所示:

这里写图片描述
这里写图片描述

接下来是xsd文件,在spring-context-4.0.2.RELEASE.jar的解压目录中,进入org/springframework/cache/config子目录,里面不以class为后缀的文件有四个,把这四个文件全部复制到maven工程源码的org/springframework/cache/config目录下,如下图:

这里写图片描述
这里写图片描述

以下几个目录下也有xsd文件,请像上面的方法一样,将里面的xsd和gif都复制到maven工程中对应的目录下:

org/springframework/context/config org/springframework/ejb/config org/springframework/scheduling/config org/springframework/scripting/config

构建jar包

在上面所建的maven工程的pom.xml文件所在目录下,执行命令mvn clean package -U -Dmaven.test.skip=true,执行成功后,在target目录下就能看到最新构建的jar包了,如下图:

这里写图片描述
这里写图片描述

至此,我们实践了构建spring-context的jar包的过程,根据实际需要,我们可以先修改了源码再构建,例如下图是我修改的CommonAnnotationBeanPostProcessor类的源码,很简单,加了一些输出,比如打印当前缓存的key,以及代码的调用栈情况:

这里写图片描述
这里写图片描述

改完代码后重新构建,生成新的spring-context-4.0.2.RELEASE.jar文件,我的web应用之前已经部署在了tomcat下,现在打开这个应用的lib目录,用这个jar替换原有的文件,再重启tomcat,在控制台可以看到改动的结果,打印出了如下的的信息:

这里写图片描述
这里写图片描述

这个用来测试的web工程,其实就是本文一开始提到的springmybatisexceptiondemo,关于这个工程的使用详情,请参照文章《spring+mybatis启动NoClassDefFoundError异常分析三部曲之一:稳定重现问题》

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-06-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 下载源码
  • 解压jar包,准备材料
  • 新建spring-context的maven工程
  • 构建jar包
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档