CN115857894A - maven工程代码整合方法及装置 - Google Patents
maven工程代码整合方法及装置 Download PDFInfo
- Publication number
- CN115857894A CN115857894A CN202211646703.2A CN202211646703A CN115857894A CN 115857894 A CN115857894 A CN 115857894A CN 202211646703 A CN202211646703 A CN 202211646703A CN 115857894 A CN115857894 A CN 115857894A
- Authority
- CN
- China
- Prior art keywords
- jar
- maven
- dependent
- forest
- engineering
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本申请提供了一种maven工程代码整合方法及装置,可用于人工智能技术领域,所述方法包括:获取多个工程代码,确定每个工程代码的maven依赖森林;根据所述maven依赖森林确定是否存在jar程序冲突;若不存在,整合多个工程代码的maven依赖森林得到maven整合依赖森林;若存在,根据存在冲突的jar程序构建jar程序池,根据所述jar程序池对多个工程代码进行整合测试,若测试通过,根据测试结果整合多个工程代码的maven依赖森林得到maven整合依赖森林。本申请可实现maven工程代码的自动整合和测试,提高整合效率,降低人力成本。
Description
技术领域
本申请涉及代码整合技术领域,特别涉及人工智能领域,尤其涉及一种maven工程代码整合方法及装置。
背景技术
IT企业对于同质化的maven项目工程时常会有整合需求便于统一管理,但由于各自工程引入的maven依赖或多或少存在差异(如版本号差异等),导致在简单的物理整合后通常存在jar程序的冲突,需要人为调整依赖以便引入的jar程序能够兼容原来工程,但这个调整过程中由于原依赖及jar程序的版本众多等因素导致整合过程费时费力。
发明内容
本申请的一个目的在于提供一种maven工程代码整合方法,实现maven工程代码的自动整合和测试,提高整合效率,降低人力成本。本申请的另一个目的在于提供一种maven工程代码整合装置。本申请的再一个目的在于提供一种计算机设备。本申请的还一个目的在于提供一种可读介质。
为了达到以上目的,本申请的一方面公开了一种maven工程代码整合方法,包括:
获取多个工程代码,确定每个工程代码的maven依赖森林;
根据所述maven依赖森林确定是否存在jar程序冲突;
若不存在,整合多个工程代码的maven依赖森林得到maven整合依赖森林;若存在,根据存在冲突的jar程序构建jar程序池,根据所述jar程序池对多个工程代码进行整合测试,若测试通过,根据测试结果整合多个工程代码的maven依赖森林得到maven整合依赖森林。
优选的,所述获取多个工程代码,确定每个工程代码的maven依赖森林具体包括:
通过maven指令获取每个工程代码全部被引入的jar程序清单;
获取jar程序清单对应的工程代码的文件头部中的jar导入代码;
通过动态代码分析确定所述工程代码实际使用的jar程序以更新所述jar程序清单,根据更新后的jar程序清单优化所述maven依赖森林。
优选的,所述根据更新后的jar程序清单优化所述maven依赖森林具体包括:
确定maven依赖森林中是否存在不在所述jar程序清单中的目标jar程序;
若存在且所述目标jar程序为不存在依赖jar程序的独立jar程序,删除maven依赖森林中的所述目标jar程序;
若存在且所述目标jar程序存在依赖jar程序,删除maven依赖森林中的所述目标jar程序,将所述依赖jar程序作为独立jar程序。
优选的,所述根据所述maven依赖森林确定是否存在jar程序冲突具体包括:
确定不同工程代码的maven依赖森林中是否存在相同名称的jar程序;
若存在,比对不同工程代码的jar程序的版本是否一致;
若不一致,则存在jar程序冲突。
优选的,所述整合多个工程代码的maven依赖森林得到maven整合依赖森林具体包括:
保留所有工程代码maven依赖森林中相同的maven依赖中的一个至maven整合依赖森林;
保留所有工程代码maven依赖森林中的独立jar程序和依赖相同的依赖jar程序至maven整合依赖森林;
将所有工程代码maven依赖森林中依赖不相同的依赖jar程序作为独立jar程序保留至maven整合依赖森林。
优选的,所述根据存在冲突的jar程序构建jar程序池具体包括:
确定存在冲突的jar程序的不同版本;
根据不同版本确定版本区间;
确定处于所述版本区间内的所有版本的jar程序作为测试jar程序形成jar程序池。
优选的,所述根据所述jar程序池对多个工程代码进行整合测试具体包括:
从所述jar程序池中依次选择不同版本的测试jar程序对多个工程代码进行整合得到整合后的测试工程代码;
对整合后的工程代码进行运行测试,若测试通过,根据所述测试jar程序形成maven整合依赖森林。
本申请还公开了一种maven工程代码整合装置,包括:
代码分析模块,用于获取多个工程代码,确定每个工程代码的maven依赖森林;
冲突检测模块,用于根据所述maven依赖森林确定是否存在jar程序冲突;
代码整合模块,用于若不存在,整合多个工程代码的maven依赖森林得到maven整合依赖森林;若存在,根据存在冲突的jar程序构建jar程序池,根据所述jar程序池对多个工程代码进行整合测试,若测试通过,根据测试结果整合多个工程代码的maven依赖森林得到maven整合依赖森林。
本申请还公开了一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述方法。
本申请还公开了一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述方法。
本申请maven工程代码整合方法获取多个工程代码,确定每个工程代码的maven依赖森林;根据所述maven依赖森林确定是否存在jar程序冲突;若不存在,整合多个工程代码的maven依赖森林得到maven整合依赖森林;若存在,根据存在冲突的jar程序构建jar程序池,根据所述jar程序池对多个工程代码进行整合测试,若测试通过,根据测试结果整合多个工程代码的maven依赖森林得到maven整合依赖森林。从而,本申请通过对工程代码的maven依赖森林进行检测以确定是否存在jar程序冲突,当不存在jar程序冲突时,直接自动整合多个工程代码,若存在jar程序冲突,则建立jar程序池对整合后的工程代码进行自动测试以自动确定不会存在冲突的整合方案对多个工程代码进行整合,通过自动检测和测试实现多个工程代码全程的自动化测试和整合,保证整合成功率的基础上提高整合效率,并大幅节省了人工操作的过程,降低了人力成本。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本申请maven工程代码整合方法具体实施例的流程图;
图2示出了本申请maven工程代码整合方法具体实施例S100的流程图;
图3示出了本申请maven工程代码整合方法具体实施例S130的流程图;
图4示出了本申请maven工程代码整合方法一个具体例子中工程代码maven依赖森林的示意图;
图5示出了本申请maven工程代码整合方法一个具体例子中工程代码maven依赖森林优化后的示意图;
图6示出了本申请maven工程代码整合方法具体实施例S200的流程图;
图7示出了本申请maven工程代码整合方法具体实施例S300整合多个工程代码的maven依赖森林的流程图;
图8和图9示出了本申请maven工程代码整合方法具体实施例甲和乙工程代码maven依赖森林的示意图;
图10~图13示出了本申请maven工程代码整合方法具体实施例甲和乙工程代码maven依赖森林整合过程的示意图;
图14示出了本申请maven工程代码整合方法具体实施例S300构建jar程序池的流程图;
图15示出了本申请maven工程代码整合方法具体实施例jar程序池的示意图;
图16示出了本申请maven工程代码整合方法具体实施例jar程序测试的流程图;
图17示出了本申请maven工程代码整合装置具体实施例的结构图;
图18示出适于用来实现本申请实施例的计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
关于本文中所使用的“第一”、“第二”、……等,并非特别指称次序或顺位的意思,亦非用以限定本申请,其仅为了区别以相同技术用语描述的元件或操作。
关于本文中所使用的“包含”、“包括”、“具有”、“含有”等等,均为开放性的用语,即意指包含但不限于。
关于本文中所使用的“及/或”,包括所述事物的任一或全部组合。
需要说明的是,本申请技术方案中对数据的获取、存储、使用、处理等均符合国家法律法规的相关规定。
需要说明的是,本申请公开的一种maven工程代码整合方法及装置可用于人工智能技术领域,也可用于除人工智能技术领域之外的任意领域,本申请公开的一种maven工程代码整合方法及装置的应用领域不做限定。
本申请实施例公开了一种maven工程代码整合方法。如图1所示,本实施例中,所述方法包括:
S100:获取多个工程代码,确定每个工程代码的maven依赖森林。
S200:根据所述maven依赖森林确定是否存在jar程序冲突。
S300:若不存在,整合多个工程代码的maven依赖森林得到maven整合依赖森林;若存在,根据存在冲突的jar程序构建jar程序池,根据所述jar程序池对多个工程代码进行整合测试,若测试通过,根据测试结果整合多个工程代码的maven依赖森林得到maven整合依赖森林。
本申请maven工程代码整合方法获取多个工程代码,确定每个工程代码的maven依赖森林;根据所述maven依赖森林确定是否存在jar程序冲突;若不存在,整合多个工程代码的maven依赖森林得到maven整合依赖森林;若存在,根据存在冲突的jar程序构建jar程序池,根据所述jar程序池对多个工程代码进行整合测试,若测试通过,根据测试结果整合多个工程代码的maven依赖森林得到maven整合依赖森林。从而,本申请通过对工程代码的maven依赖森林进行检测以确定是否存在jar程序冲突,当不存在jar程序冲突时,直接自动整合多个工程代码,若存在jar程序冲突,则建立jar程序池对整合后的工程代码进行自动测试以自动确定不会存在冲突的整合方案对多个工程代码进行整合,通过自动检测和测试实现多个工程代码全程的自动化测试和整合,保证整合成功率的基础上提高整合效率,并大幅节省了人工操作的过程,降低了人力成本。
在优选的实施方式中,如图2所示,所述S100获取多个工程代码,确定每个工程代码的maven依赖森林具体包括:
S110:通过maven指令获取每个工程代码全部被引入的jar程序清单。
S120:获取jar程序清单对应的工程代码的文件头部中的jar导入代码。
S130:通过动态代码分析确定所述工程代码实际使用的jar程序以更新所述jar程序清单,根据更新后的jar程序清单优化所述maven依赖森林。
具体的,可将待整合的多个工程代码从代码库获取,分析工程代码得到工程有正式使用的全体jar程序的程序清单,并构建每个工程代码的maven依赖森林。
其中,可选的,可通过maven指令,例如mvn dependency:tree等,获取工程代码全部被引入的jar程序的jar程序清单。
然后,可获取工程代码文件头部中的jar导入代码,例如import部分代码。然后通过动态代码分析等方式确定jar导入代码所在的具体jar程序文件并最终形成工程代码真正有使用的jar程序清单。
在具体例子中,工程代码的文件头部代码如下:
import com.alibaba.fastjson.JSONObject;
import com.ci.exception.IcbcException;
现需确定com.alibaba.fastjson.JSONObject与com.ci.exception.IcbcException分别来自那个jar程序,采用动态生成并执行含CodeSources类及getLocation()方法的代码即可获得其所在jar程序。进而根据实际使用的jar程序清单及工程代码原有的maven依赖森林可得到优化后的maven依赖森林。
其中,需要说明的是,在开源代码的时代里,任何的java工程或多或少都会借用某些第三方的开源类库(即jar程序),过去常用的方式是将所有使用到的jar程序统计分配至某路经下,java工程逐一将其导入工程内部。但对于大型的IT系统,由于其需要引入的jar程序众多,若采用过去逐一引入方式费时费力且后续如发生功能升级导致jar程序变动,或许设及大量的jar程序更新。而maven提供的依赖传递引入特性可使得java工程的第三方资源库快速构建。例如:java工程甲需要引入第三方资源程序a.jar,b.jar,c.jar,d.jar,e.jar,f.jar和g.jar,按历史模式需将这7个jar文件存放在lib目录下,然后逐一将这7个文件引入工程,利用maven提供的依赖传递特性,假设现有某个开源程序A.jar,其下已有包含引入上述7个jar程序,故工程甲仅需要通过maven依赖引入A.jar,通过依赖传递即可同步将7个jar程序引入工程。
在优选的实施方式中,如图3所示,所述S130根据更新后的jar程序清单优化所述maven依赖森林具体包括:
S131:确定maven依赖森林中是否存在不在所述jar程序清单中的目标jar程序。
S132:若存在且所述目标jar程序为不存在依赖jar程序的独立jar程序,删除maven依赖森林中的所述目标jar程序。
S133:若存在且所述目标jar程序存在依赖jar程序,删除maven依赖森林中的所述目标jar程序,将所述依赖jar程序作为独立jar程序。
具体的,在确定jar程序清单中实质用到的jar程序清单处,则maven依赖森林中可能存在不再用到的jar程序,从而需要对maven依赖森林进行优化。
在该优选的实施方式中,若maven依赖森林中存在不在所述jar程序清单中的目标jar程序且所述目标jar程序为不存在依赖jar程序的独立jar程序,只保留有实际用到的jar程序,在后续整合测试中最大限度的降低程序冲突而造成测试失败的可能性,若工程代码引入了不再使用的jar a,而a在另一被工程代码有使用,而不对maven依赖森林进行优化,两个jar a的版本号不相同就很容易出现版本冲突而造成测试失败。
若maven依赖森林中存在不在所述jar程序清单中的目标jar程序且所述目标jar程序存在依赖jar程序,即若有实际用途的jar程序是被依赖传递引入的,而引入该jar程序的独立jar程序本身无实际使用,则可重构maven依赖森林,将传递引入的jar程序修改为直接引入。
在具体例子中,假设一个工程代码原有的maven依赖森林如图4所示。工程代码一共引入了9个jar程序,分别为A、B、C、D、E、F、G、H和I,其中A是通过直接依赖引入,B、C和D被A传递引入,E和F被B传递引入,G被C传递引入,H和I被D传递引入。
经过代码分析后,确定除了D外其余jar程序均实际有效,根据优化规则,需要将D从中剔出,H和I为D传递引入的,故需要将H和I从传递引入改为直接引入。优化后的工程代码的maven依赖森林如图5所示。经优化后,工程代码从直接依赖引入A修改为直接依赖引入A、H和I,B和C被A传递引入,E和F被B传递引入,G被C传递引入,不使用的D被剔出。
在优选的实施方式中,如图6所示,所述S200根据所述maven依赖森林确定是否存在jar程序冲突具体包括:
S210:确定不同工程代码的maven依赖森林中是否存在相同名称的jar程序。
S220:若存在,比对不同工程代码的jar程序的版本是否一致。
S230:若不一致,则存在jar程序冲突。
具体的,在多个工程代码整合时,若不同的工程代码均引入了相同名称的jar程序,但是jar程序的版本不同,则将多个工程代码进行整合时,可能会由于jar程序版本不同而导致整合后的工程代码的测试出现错误,导致工程代码整合失败。从而,在对多个工程代码进行整合之前,可先检测多个工程代码中是否存在名称相同且不同版本的jar程序,若存在,则表示直接代码整合可能会存在整合出错的问题,需要将这些存在冲突的jar程序识别出来并通过测试决定最后的jar程序,使整合后的整合工程代码通过测试,可以正常运行。
在优选的实施方式中,如图7所示,所述S300整合多个工程代码的maven依赖森林得到maven整合依赖森林具体包括:
S311:保留所有工程代码maven依赖森林中相同的maven依赖中的一个至maven整合依赖森林。
S312:保留所有工程代码maven依赖森林中的独立jar程序和依赖相同的依赖jar程序至maven整合依赖森林。
S313:将所有工程代码maven依赖森林中依赖不相同的依赖jar程序作为独立jar程序保留至maven整合依赖森林。
具体的,对于不存在jar程序冲突的工程代码的maven依赖森林可以直接整合。即在该优选的实施方式中,被整合工程代码的共有的maven依赖部分可直接用于新整合方案,即保留所有工程代码maven依赖森林中相同的maven依赖中的一个至maven整合依赖森林。被整合工程独立使用的maven依赖部分可用于新整合方案,其中,如jar程序为直接依赖引入则可直接用于整合方案;如jar程序传递依赖引入的jar为共用程序,可直接用于整合方案;如jar程序为传递依赖引入且直接和间接存在依赖关系的jar程序中不涉及jar程序冲突的可能性可直接用于整合方案。如jar程序为传递依赖引入且直接和间接存在依赖关系的jar程序中涉及jar程序冲突的可能性时,需将jar程序从传递依赖转换为直接依赖后再用于整合方案。
在具体例子中,假设现有甲和乙两工程代码需要进行整合,经过代码分析处理过后,甲和乙各自的依赖森林分别如图8和图9所示。
从图8和图9中可知,甲和乙均有AA->BB->CC,故根据整合原则,将AA->BB->CC直接用于整合方案,保存至maven整合依赖森林,如图10所示。
从图8和图9中可知,A为甲独有且为直接依赖,D为乙独有且为直接依赖,故根据整合原则,分别将A和D保存至maven整合依赖森林,如图11所示。
从图8和图9中可知,甲工程中A传递依赖引入了B,乙工程中D传递依赖引入了B,故根据整合原则,可将B保存至maven整合依赖森林,如图12所示。
从图8和图9中可知,G为甲乙共用,但其为传递依赖所引入且其传递方不同可能存在冲突,根据整合原则,需将G从传递依赖引入修改为直接依赖引入保存至maven整合依赖森林,如图13所示。
在优选的实施方式中,如图14所示,所述S300根据存在冲突的jar程序构建jar程序池具体包括:
S321:确定存在冲突的jar程序的不同版本。
S322:根据不同版本确定版本区间。
S323:确定处于所述版本区间内的所有版本的jar程序作为测试jar程序形成jar程序池。
具体的,若存在不同版本的冲突jar程序,分别获取冲突的各自工程jar程序的版本形成一个版本区间,根据版本区间生成一个jar程序的测试池,将版本区间中存在的多个版本的jar程序设置在测试池中,以用于测试。
在具体例子中,图8和图9的工程代码整合时,甲中的jar程序C(v=2.0)和乙的C(v=4.0)的差别在于版本的差异,需要搜索一个可以兼容C(v=2.0)和C(v=4.0)的新版本。于是形成一个(v=2.0-v=4.0)的版本区间,假设预设的jar程序库中关于C的全量版本如图15所示,根据版本区间,将2.0,3.0,4.0三个版本的jar程序纳入测试池。
在优选的实施方式中,如图16所示,所述S300根据所述jar程序池对多个工程代码进行整合测试具体包括:
S331:从所述jar程序池中依次选择不同版本的测试jar程序对多个工程代码进行整合得到整合后的测试工程代码。
S332:对整合后的工程代码进行运行测试,若测试通过,根据所述测试jar程序形成maven整合依赖森林。
具体的,可从测试池中分别获取不同版本jar程序作为最终jar程序整合至maven整合依赖森林中,并得到整合后的测试工程代码,然后分别对测试工程代码启动maven测试。测试完毕后从测试结果分析策略库引入结果分析策略并对结果进行分析。
在具体例子中,图8和图9的工程代码整合时,形成的maven整合依赖森林分别代入甲和乙整合后的测试工程代码中,启动mvn test指令执行测试。测试指令执行完毕后,从测试结果分析策略库将分析策略引入并进行分析。
分析策略可为常见报错信息或关键字(如版本冲突最明显的一个特征即为“nosuch method”,“no such method class”等文字)的集合等,可根据测试执行结果套入分析策略进行匹配识别出是否存在版本冲突问题。
分析后如不存在版本冲突问题,则当前整合方案的maven整合依赖森林即为最终整合方案,否则重新生成一套整合方案后再重新测试。依此类推,如测试池所有的版本用过后均无法形成最终方案则所明目标工程暂不具备直接整合的条件。
在具体例子中,甲和乙整合的整合方案C的版本备选分别为2.0,3.0,4.0,则最多可形成3个整合方案,系统从2.0->3.0->4.0遍历测试,如三个方案中任意一个测试通过即可将此方案定为最终方案,否则说明甲和乙不具备整合的条件。
基于相同原理,本申请实施例公开了一种maven工程代码整合装置。本实施例中,如图17所示,所述装置包括代码分析模块11、冲突检测模块12和代码整合模块13。
其中,代码分析模块11用于获取多个工程代码,确定每个工程代码的maven依赖森林。
冲突检测模块12用于根据所述maven依赖森林确定是否存在jar程序冲突。
代码整合模块13用于若不存在,整合多个工程代码的maven依赖森林得到maven整合依赖森林;若存在,根据存在冲突的jar程序构建jar程序池,根据所述jar程序池对多个工程代码进行整合测试,若测试通过,根据测试结果整合多个工程代码的maven依赖森林得到maven整合依赖森林。
在优选的实施方式中,所述代码分析模块11具体用于通过maven指令获取每个工程代码全部被引入的jar程序清单;获取jar程序清单对应的工程代码的文件头部中的jar导入代码;通过动态代码分析确定所述工程代码实际使用的jar程序以更新所述jar程序清单,根据更新后的jar程序清单优化所述maven依赖森林。
在优选的实施方式中,所述代码分析模块11具体用于确定maven依赖森林中是否存在不在所述jar程序清单中的目标jar程序;若存在且所述目标jar程序为不存在依赖jar程序的独立jar程序,删除maven依赖森林中的所述目标jar程序;若存在且所述目标jar程序存在依赖jar程序,删除maven依赖森林中的所述目标jar程序,将所述依赖jar程序作为独立jar程序。
在优选的实施方式中,所述冲突检测模块12具体用于确定不同工程代码的maven依赖森林中是否存在相同名称的jar程序;若存在,比对不同工程代码的jar程序的版本是否一致;若不一致,则存在jar程序冲突。
在优选的实施方式中,所述代码整合模块13具体用于保留所有工程代码maven依赖森林中相同的maven依赖中的一个至maven整合依赖森林;保留所有工程代码maven依赖森林中的独立jar程序和依赖相同的依赖jar程序至maven整合依赖森林;将所有工程代码maven依赖森林中依赖不相同的依赖jar程序作为独立jar程序保留至maven整合依赖森林。
在优选的实施方式中,所述代码整合模块13具体用于确定存在冲突的jar程序的不同版本;根据不同版本确定版本区间;确定处于所述版本区间内的所有版本的jar程序作为测试jar程序形成jar程序池。
在优选的实施方式中,所述代码整合模块13具体用于从所述jar程序池中依次选择不同版本的测试jar程序对多个工程代码进行整合得到整合后的测试工程代码;对整合后的工程代码进行运行测试,若测试通过,根据所述测试jar程序形成maven整合依赖森林。
由于该装置解决问题的原理与以上方法类似,因此本装置的实施可以参见以上的方法的实施,在此不再赘述。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机设备,具体的,计算机设备例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
在一个典型的实例中计算机设备具体包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述方法。
下面参考图18,其示出了适于用来实现本申请实施例的计算机设备700的结构示意图。
如图18所示,计算机设备700包括中央处理单元(CPU)701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的工作和处理。在RAM703中,还存储有系统700操作所需的各种程序和数据。CPU701、ROM702、以及RAM703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
以下部件连接至I/O接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶反馈器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡,调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装如存储部分708。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包括用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由记录“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (10)
1.一种maven工程代码整合方法,其特征在于,包括:
获取多个工程代码,确定每个工程代码的maven依赖森林;
根据所述maven依赖森林确定是否存在jar程序冲突;
若不存在,整合多个工程代码的maven依赖森林得到maven整合依赖森林;若存在,根据存在冲突的jar程序构建jar程序池,根据所述jar程序池对多个工程代码进行整合测试,若测试通过,根据测试结果整合多个工程代码的maven依赖森林得到maven整合依赖森林。
2.根据权利要求1所述的maven工程代码整合方法,其特征在于,所述获取多个工程代码,确定每个工程代码的maven依赖森林具体包括:
通过maven指令获取每个工程代码全部被引入的jar程序清单;
获取jar程序清单对应的工程代码的文件头部中的jar导入代码;
通过动态代码分析确定所述工程代码实际使用的jar程序以更新所述jar程序清单,根据更新后的jar程序清单优化所述maven依赖森林。
3.根据权利要求2所述的maven工程代码整合方法,其特征在于,所述根据更新后的jar程序清单优化所述maven依赖森林具体包括:
确定maven依赖森林中是否存在不在所述jar程序清单中的目标jar程序;
若存在且所述目标jar程序为不存在依赖jar程序的独立jar程序,删除maven依赖森林中的所述目标jar程序;
若存在且所述目标jar程序存在依赖jar程序,删除maven依赖森林中的所述目标jar程序,将所述依赖jar程序作为独立jar程序。
4.根据权利要求1所述的maven工程代码整合方法,其特征在于,所述根据所述maven依赖森林确定是否存在jar程序冲突具体包括:
确定不同工程代码的maven依赖森林中是否存在相同名称的jar程序;
若存在,比对不同工程代码的jar程序的版本是否一致;
若不一致,则存在jar程序冲突。
5.根据权利要求1所述的maven工程代码整合方法,其特征在于,所述整合多个工程代码的maven依赖森林得到maven整合依赖森林具体包括:
保留所有工程代码maven依赖森林中相同的maven依赖中的一个至maven整合依赖森林;
保留所有工程代码maven依赖森林中的独立jar程序和依赖相同的依赖jar程序至maven整合依赖森林;
将所有工程代码maven依赖森林中依赖不相同的依赖jar程序作为独立jar程序保留至maven整合依赖森林。
6.根据权利要求1所述的maven工程代码整合方法,其特征在于,所述根据存在冲突的jar程序构建jar程序池具体包括:
确定存在冲突的jar程序的不同版本;
根据不同版本确定版本区间;
确定处于所述版本区间内的所有版本的jar程序作为测试jar程序形成jar程序池。
7.根据权利要求1所述的maven工程代码整合方法,其特征在于,所述根据所述jar程序池对多个工程代码进行整合测试具体包括:
从所述jar程序池中依次选择不同版本的测试jar程序对多个工程代码进行整合得到整合后的测试工程代码;
对整合后的工程代码进行运行测试,若测试通过,根据所述测试jar程序形成maven整合依赖森林。
8.一种maven工程代码整合装置,其特征在于,包括:
代码分析模块,用于获取多个工程代码,确定每个工程代码的maven依赖森林;
冲突检测模块,用于根据所述maven依赖森林确定是否存在jar程序冲突;
代码整合模块,用于若不存在,整合多个工程代码的maven依赖森林得到maven整合依赖森林;若存在,根据存在冲突的jar程序构建jar程序池,根据所述jar程序池对多个工程代码进行整合测试,若测试通过,根据测试结果整合多个工程代码的maven依赖森林得到maven整合依赖森林。
9.一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7中任一项所述方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211646703.2A CN115857894A (zh) | 2022-12-21 | 2022-12-21 | maven工程代码整合方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211646703.2A CN115857894A (zh) | 2022-12-21 | 2022-12-21 | maven工程代码整合方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115857894A true CN115857894A (zh) | 2023-03-28 |
Family
ID=85674753
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211646703.2A Pending CN115857894A (zh) | 2022-12-21 | 2022-12-21 | maven工程代码整合方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115857894A (zh) |
-
2022
- 2022-12-21 CN CN202211646703.2A patent/CN115857894A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11163731B1 (en) | Autobuild log anomaly detection methods and systems | |
US8918377B2 (en) | Multiple source data management using a conflict rule | |
US6510457B1 (en) | Data analysis method and apparatus for data mining | |
CN109492053B (zh) | 用于访问数据的方法和装置 | |
US9779158B2 (en) | Method, apparatus, and computer-readable medium for optimized data subsetting | |
CN109379398A (zh) | 一种数据同步方法及装置 | |
CN115202669A (zh) | 一种基于配置文件的项目构建方法、系统及相关设备 | |
CN112256318B (zh) | 一种用于依赖产品的构建方法及设备 | |
CN115033894A (zh) | 一种基于知识图谱的软件组件供应链安全检测方法及装置 | |
US20060225047A1 (en) | Generic software requirements analyzer | |
CN112825068A (zh) | 数据血缘生成方法及装置 | |
US9396239B2 (en) | Compiling method, storage medium and compiling apparatus | |
CN115857894A (zh) | maven工程代码整合方法及装置 | |
CN110765100A (zh) | 标签的生成方法、装置、计算机可读存储介质及服务器 | |
CN113761746B (zh) | 一种代数环的识别方法及装置 | |
CN115470264A (zh) | 一种数据审计方法及装置、电子设备、存储介质 | |
CN110333883B (zh) | 一种更新持久化数据的方法及装置 | |
US20210004283A1 (en) | Interchangeable plugins for detecting conflicts between server-side data and client-side data | |
CN113377604A (zh) | 一种数据处理方法、装置、设备和存储介质 | |
CN115174366B (zh) | 数据处理方法以及装置 | |
CN115460101B (zh) | 网络服务的管理方法、装置、设备及存储介质 | |
CN115941834B (zh) | 智能手机自动化运行方法、装置、设备及存储介质 | |
CN115034392B (zh) | Rete网络的编译方法及装置、Rete算法的执行方法及装置 | |
CN115983616B (zh) | 一种基于管理系统的业务流程挖掘方法及设备 | |
US20230359452A1 (en) | Systems and methods for software distribution |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |