一种基于Maven自动化评估软件可更新的方法

       软件更新是软件研发完成交付,上线运维过程中的重要环节,通常由于基础模块(插件)版本变更,客户需求变化,软件功能研发引入新技术,软件运行环境发生变化,安全加固,漏洞修复等情况下,要求软件进行更新。这里说的软件更新包含软件升级和降级两种,即软件升级为低版本向高版本更新变化,软件降级则指高版本回退到低版本。软件功能可更新,一般在研发阶段即可判断,本案重点针对由于基础模块(插件)版本变更、引入新技术、软件运行环境变化发生的软件可更新评估方法说明。
软件更新既要保证原系统功能正常,又必须判断评估更新内容与原软件是否存在冲突或缺失,查找并消除处理,确保更新软件稳定上线。软件可更新的标准是软件正确编译,启动,运行。
       在用Java研发的软件中,基础插件(模块)指的是Jar文件,新技术通常也是引入自带Jar并调用接口方法。所谓Jar文件,是一种归档文件,以ZIP格式构建,以.jar为文件扩展名。研发时可以使用Java环境(JDK)自带的jar命令创建或解析Jar文件。一个Java软件通常包含几个,几十个甚至上百个Jar文件,依赖引入这些Jar文件,软件功能代码研发时可以很方便地导入(import)其中已编译完成的接口方法、属性和工具类,如时间处理,字符串处理等,同时一些Java软件也可以编译打包生成Jar供别的软件引用或直接运行使用。
       Maven是一种用于构建和管理Java项目的工具。在此之前,研发人员通常需花较多时间查找软件研发需要的Jar包以搭建软件编码环境,同时由于每个Jar版本差异,某个Jar又依赖其它Jar的原因,也随之出现了Jar冲突,间接依赖Jar缺失等问题。Maven的出现很好地解决上述问题。
       通常情况下,一个Jar包只是一项技术的解决代码实现,所以它自身也需要依赖其它Jar包。Java软件jar依赖分直接依赖和间接依赖,直接依赖是指明确在软件配置中定义以完成软件代码编译的Jar包,间接依赖则指直接依赖包又依赖的其它Jar包,它们的作用及依赖过程通常发生在软件运行过程中。
       Java这种模块化Jar分包设计方法在软件应用研发中同样存在,即一个软件或系统通常包含多个子模块组成。在使用Maven构建软件代码时,每个模块的代码结构中包含一个pom.xml文件,Maven把POM作为软件项目对象模型,它主要包含:软件配置数据,开发者信息描述,软件依赖Jar定义、编译参数以及其它软件代码相关内容。所以当一个软件由多个模块组成,即当软件包含多个POM,又或者依赖的jar很多时,人工验证软件基础插件(模块)Jar版本可变更,新技术Jar可用,变更后的软件代码可正常编译,变更环境可正常运行软件等工作无疑是比较耗时,且验证结果也会存在一定疏漏。
出现上述情况,需要研发实现一种自动化判断软件可更新的评估方法。

流程如下:

  • 1)    首先确定待更新基础插件(模块)、新技术等信息(以下描述特指Jar版本),并将对应数据写入软件配置文件。

按树形结构配置内容,配置项分三类:
1、    新增或更新Jar:在使用Maven构建Java软件时,一个项目的POM(文件)通常存在继承关系,即存在一个根POM,其它POM以树型结构的形式存在,并且每个子POM文件可继承共享父POM文件已引入的依赖Jar无需再定义引入,故此处配置需标注当前Jar数据是否写入根POM,不是根POM则需要配置指定所属的POM文件;
2、    删除Jar:配置需要删除的jar文件,要求同上;
3、    运行环境:更新软件运行环境即Java版本,则直接配置Java版本号即可;

  • 2)    从待更新的软件源代码中检索所有子模块代码,即查询当前代码中包含的全部POM文件并存储每个POM文件的文件(物理磁盘)路径;
  • 3)    软件更新评估模块检查待更新的POM文件是否存在。如不存在则创建评估报告并结束本次评估操作;存在则循环读取每个POM文件;
  • 4)    使用Dom4j解析当前POM文件,获得当前POM包含的所有Jar数据集和软件其它配置信息,并对其进行软件更新数据修改。首先读取第一类(新增或更新)Jar,此处仅读取与当前POM文件匹配的待更新配置数据,即已配置待更新Jar数据集,通过groupid、artifactId标识唯一Jar,循环判断待更新Jar是否存在当前POM的Jar数据集中,如存在,则使用待更新的Jar数据替换当前POM中的Jar数据,否则直接当前POM的Jar数据集中添加待更新Jar数据;其次读取删除Jar,此处仅读取与当前POM文件匹配的待更新配置数据,并在当前POM的Jar数据集中将当前jar移除;最后,如果配置有运行环境更新,则直接修改当前POM文件中maven-compiler-plugin的配置项target和source即可;基于以上变更POM的Jar数据集和其它配置信息,使用Dom4j创建生成软件更新的POM文件;
  • 5)    间接依赖缺失检查:通过Maven-model提供的InvocationRequest接口,输入软件更新的POM文件路径信息并执行dependency:tree命令,返回数据解析获得当前POM的依赖Jar树。将当前依赖树Jar包集与第4步生成的Jar数据集对比,检查是否有Jar缺失。如存在缺失,则添加缺失Jar数据,使用POM数据重新生成软件更新的POM文件并重新执行当前步骤;不存在缺失,则下一步;
  • 6)    依赖冲突检查:通过Maven-model提供的InvocationRequest接口,输入软件更新的POM文件路径信息并执行dependency:tree命令,返回数据解析获得当前POM的依赖Jar树。遍历POM文件依赖Jar树,检查每个节点jar版本号是否与第4、5步生成POM中的Jar数据集中的匹配Jar的版本号存在不一致,如存在不一致,则以高版本号为准,即如果POM文件中的Jar为低版本号,则需要把对应的Jar修改替换为高版本号,否则可忽略,使用修改后的POM数据重新生成软件更新的POM文件并重新执行当前步骤;不存在版本不一致,则下一步;
  • 7)    通过Maven-model提供的InvocationRequest接口,输入软件更新的POM文件路径信息并执行compile命令,检查当前POM文件所在模块代码是否编译通过,通过则返回第3步,否则创建可更新报告并结束本次评估操作。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值