[发明专利]编译期的代码注入方法在审
申请号: | 202110051610.4 | 申请日: | 2021-01-13 |
公开(公告)号: | CN112817598A | 公开(公告)日: | 2021-05-18 |
发明(设计)人: | 于亚丰;覃兆俊;陈立;何国平;宋修虎;陈怀狮;王永平;徐志安;严伟;赵丽丽;周强;钱华;陈依婷 | 申请(专利权)人: | 浙江华云信息科技有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F8/72 |
代理公司: | 杭州华鼎知识产权代理事务所(普通合伙) 33217 | 代理人: | 项军 |
地址: | 310008 浙江*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 编译 代码 注入 方法 | ||
本申请实施例提出了编译期的代码注入方法,包括在目标项目中确定替换代码所在包的依赖关系,基于依赖关系对替换代码进行编译,得到class打包文件;将replaced‑proj插件添加至Maven管理工具中,在Maven管理工具中对class打包文件进行解析得到替换代码,对依赖库进行遍历,判断是否存在可替换代码集合;如果存在,则将替换代码写入目标项目的预设路径。由于只需要添加一个Maven/Gradle plugin,不修改原项目的业务代码,不用修改运行时参数,不引入额外的运行时依赖。
技术领域
本申请属于代码开发领域,尤其涉及编译期的代码注入方法。
背景技术
在软件研发中,一些场景下我们需要替换项目依赖包中的代码以实现特殊的行为,比如某个依赖包下的某一段代码有Bug(缺陷)需要修正,再比如希望在发送HTTP请求前统一修改请求信息(如加上请求头、修改HOST等)但相应的HTTP处理依赖包并没有提供相应的修改API接口。
目前常见的实现方案有:
1、修改依赖包代码,重新打包出新的分支,项目依赖改成到此分支上。
2、把依赖包及其对应的祖父级依赖的代码都复制到项目中并删除相应的依赖包,然后在项目中直接修改。
但是发明人发现,方案1需要打出新的依赖分支,导致需要同步维护主干版本与分支版本,对于只对依赖做简单修改(比如依赖包有1000个文件,需求上只要修改1个文件)的情况下这一方案成本太高;方案2需要分析依赖关系,复制所有的依赖代码到项目,这极不利于项目的维护;方案3仅在项目为可执行程序时有效,当项目为类库会被其它项目依赖时(比如要修改的依赖为dep_x.jar,当前项目为lab_x.jar,被另一个项目serv_x.jar依赖,形成serv_x.jar依赖于lab_x.jar,lab_x.jar又依赖于dep_x.jar,而dep_x.jar的代码被lab_x.jar重写了)由于JVM加载的机制会导致加载依赖包顺序的不确定性,当原依赖包(dep_x.jar)先于类库项目(lab_x.jar)加载时,后者修改的代码会失效。
发明内容
本申请实施例提出了编译期的代码注入方法,由于只需要添加一个Maven/Gradleplugin,不修改原项目的业务代码,不用修改运行时参数,不引入额外的运行时依赖。
具体的,本申请提出的编译期的代码注入方法,所述方法包括:
在目标项目中确定替换代码所在包的依赖关系,基于依赖关系对替换代码进行编译,得到class打包文件;
将replaced-proj插件添加至Maven管理工具中,在Maven管理工具中对class打包文件进行解析得到替换代码,对依赖库进行遍历,判断是否存在可替换代码集合;
如果存在,则将替换代码写入目标项目的预设路径。
可选的,所述在目标项目中确定替换代码所在包的依赖关系,基于依赖关系对替换代码进行编译,得到class打包文件,包括:
在目标项目中确定并添加替换代码所在包的依赖关系;
使用标准的包结构组织编写替换代码逻辑;
在Maven管理工具中基于得到的替换代码逻辑进行编译,生成class文件;
在Maven管理工具中对得到的class文件进行打包得到class打包文件。
可选的,所述在目标项目中确定并添加替换代码所在包的依赖关系,包括:
统一修改HTTP请求的host文件,在host文件中的profile字段中增加替换代码所在包的依赖关系。
可选的,所述在Maven管理工具中基于得到的替换代码逻辑进行编译生成class文件,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江华云信息科技有限公司,未经浙江华云信息科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110051610.4/2.html,转载请声明来源钻瓜专利网。