Spring源码阅读之编译带源码的jar包 末蓝、 2021-09-29 02:02 331阅读 0赞 一、问题说明 我在调试源码时,有时需要新建一个项目来写单元测试,没有办法直接在源码的test包下面写 比如:我需要测试下spring的自定义标签(需要依赖spring-core、spring-context、spring-beans、spring-expression),还要在resources目录下创建META-INF文件夹,放入spring.handlers和spring.schemas文件(但是spring源码中本身已经把这个位置给占用了,源码里文件的名字是写死的)。 所以我要新建一个项目,然后引入spring的这几个jar包;我在之前看源码的时候,里面写了一些注释,我还想在打断点的时候能够看到自己写的源码注释,我需要编译一个带有源码的jar包 相关环境说明: spring源码版本:分支5.1.x idea版本 2018.1 gradle版本 4.6 jdk版本 1.8.0\_61 二、解决过程 spring源码是使用gradle编译的,在spring-framework目录下有个build.gradle文件 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70][] 找到上面这一段,然后点开idea中gradle里的spring(root)->Tasks->sourcesJar,双击后稍等片刻,可以看到spring各个模块的工程下面出现了sources.jar结尾的源码包 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 1][] ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 2][] 中途遇到的问题: 1. 如果在cmd命令行(工作目录在spring-framework根目录下)中执行“gradlew sourcesJar”会报一个问题“GBK不可映射的字符”,网上搜了一下解决方法,只要在build.gralde中添加一段,编译就正常了 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 3][] 2. 我在编译好以后看了下sources包里的文件 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 4][] 如果我新建一个maven项目的话,对应每个spring模块有两个包(classes包和sources包)。现在我只想采用本地引入的方式使用jar包(scope设置为system),我想让编译出的源码包里同时有class文件和java文件,在用的时候关联源码包直接用一个包就好了 google了一下(搜索gradle compile jar with source code,找到[https://discuss.gradle.org/t/build-jar-files-which-includes-class-and-java-files/13139/3][https_discuss.gradle.org_t_build-jar-files-which-includes-class-and-java-files_13139_3]) 改了下build.gradle,我在task javadocJar后面追加了一段 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 5][] 然后在cmd中执行“gradlew sourcesBinJar”,生成sources包,现在看下spring-beans里的文件 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 6][] 然后我在自己的maven测试工程中引入, ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 7][] 如果引入的依赖比较多的话,一个个关联源码还是比较麻烦的。引入maven依赖后,可以批量关联源码 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 8][] 参考链接:[https://discuss.gradle.org/t/build-jar-files-which-includes-class-and-java-files/13139/3][https_discuss.gradle.org_t_build-jar-files-which-includes-class-and-java-files_13139_3] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70]: /images/20210923/f88214e4eeb749f7a0ed15be3b8f33ca.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 1]: /images/20210923/5871602f22424e1999ea218e2d490c0f.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 2]: /images/20210923/59cefcc2bc854ad984aa9a9ddec00a5e.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 3]: /images/20210923/89faef35b7d14a308cffac570316be4a.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 4]: /images/20210923/cf2a348ae157493884cca01d6b9b5ca1.png [https_discuss.gradle.org_t_build-jar-files-which-includes-class-and-java-files_13139_3]: https://discuss.gradle.org/t/build-jar-files-which-includes-class-and-java-files/13139/3 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 5]: /images/20210923/2d8271d0aabb4dde96860f58e47d5c2f.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 6]: /images/20210923/124a91486b72459895721c17c1dd4fcd.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 7]: /images/20210923/eec9ae89198f4410be75463d7e5c86bc.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk_size_16_color_FFFFFF_t_70 8]: /images/20210923/6fa861fa7f9043999a4a0f24212a3d71.png
还没有评论,来说两句吧...