一种Maven项目编译方法和装置制造方法及图纸

技术编号:24089506 阅读:69 留言:0更新日期:2020-05-09 07:26
本发明专利技术实施例提供一种Maven项目编译方法和装置,涉及软件工程领域,用于解决现有编译方式编译效率低下的问题。该方法包括:确定系统内部依赖模块;将依赖模块的序号确定为1、将有依赖模块且依赖模块的序号已确定的序号确定为最大序号加1;由序号2开始遍历所有项目,若项目的目标模块只依赖该项目中编码顺序为当前遍历的编译序号减1的模块,则将项目的目标模块追加至该项目中编码顺序为当前遍历的序号减1的模块之后;若所有项目的目标模块均为空集,则将编译序号大于当前编译序号的所有模块的序号减1;对各项目进行排序;根据各模块的序号以及各模块所属项目的排序对各模块进行编译。本发明专利技术实施例用于Maven项目编译。

A compiling method and device of Maven project

【技术实现步骤摘要】
一种Maven项目编译方法和装置
本专利技术涉及软件工程领域,尤其涉及一种Maven项目编译方法和装置。
技术介绍
在Maven项目中,每个项目包含若干个模块,这些模块按照Maven项目对象模型(ProjectObjectModel,POM)的方式进行管理。即,每个模块对应一个pom.xml文件,这些pom.xml形成一个树状的层次结构。Maven项目的模块之间存在依赖关系。即,一个模块编译时依赖若干个其他模块的编译结果。从树状的pom.xml文件集中,Maven工具能够解析出项目包含的模块集合,并分析出每个模块的依赖模块集合。Maven工具在模块编译之前检测模块的依赖模块的编译结果是否存在于本地仓库,如果所有依赖模块的编译结果都存在于本地仓库中,则开始编译,否则提示依赖模块不存。最后,如果模块编译成功则将模块的编译结果存入本地仓库供其他模块编译引用。如果依赖模块集合都属于同一项目,Maven工具能够决定项目内部模块的编译顺序,然而一个复杂的业务系统通常都会包含多个Maven项目,这些Maven项目所包含的模块在项目之间存在依赖关系,例如:项目A的模块A1依赖项目B的模块B3、B4,以及项目C的模块C5,但Maven工具本身不能处理依赖导致的项目之间的模块编译顺序问题。当前,处理Maven项目之间的模块编译依赖的方法是:依次编译系统所属的项目,每个项目编译成功的模块将编译结果存入Maven的本地仓库;然后多次编译失败的项目,直到每个项目的所有模块都编译成功。在这种编译方式下,若一个业务系统拥有较多的Maven项目,并且所有Maven项目都在进行频繁的迭代开发,则每个项目重复编译次数会非常多,进而导致编译效率低下。
技术实现思路
本专利技术的实施例提供一种Maven项目编译方法和装置,用于解决现有编译方式编译效率低下的问题。为达到上述目的,本专利技术的实施例采用如下技术方案:第一方面,本专利技术实施例提供了一种Maven项目编译方法,包括:确定业务系统中所有Maven项目的每一个模块的系统内部依赖模块;循环遍历未确定编译序号的模块,将没有系统内部依赖模块的模块的编译序号确定为1、将有系统内部依赖模块且系统内部依赖模块的编译序号已确定的模块的编译序号确定为当前最大编译序号加1,直至所有模块的编译序号均已确定;由编译序号2至最大编译序号依次遍历所述业务系统中所有Maven项目,对于任一Maven项目,若该Maven项目的目标模块只依赖该项目中编码顺序为当前遍历的编译序号减1的模块,则将该Maven项目的目标模块追加至该Maven项目中编码顺序为当前遍历的编译序号减1的模块之后;以任意编译序号遍历所述业务系统中所有Maven项目时,若所有Maven项目的目标模块均为空集,则将编译序号大于当前编译序号的所有模块的编译序号减1,任一Maven项目的目标模块为该Maven项目中编译序号与当前遍历的编译序号相同的模块;按照各Maven项目的模块的编译序号最大值从小到大对各Maven项目进行排序;根据各模块的编译序号以及各模块所属Maven项目的排序对各模块进行编译。可选的,所述根据各模块的编译序号以及各模块所属Maven项目的排序对各模块进行编译,包括:根据各模块的编译序号,由小到大依次对各模块进行编译,以及根据各模块所属Maven项目的排序,由先到后依次对编译序号相同的模块进行编译。可选的,所述方法还包括:判断第一模块集合是否与第二模块集合相同;所述第一模块集合为第n次遍历未确定编译序号的模块之后,未确定编译序号的模块组成的集合,所述第二模块集合为第n+1次遍历未确定编译序号的模块之后,未确定编译序号的模块组成的集合,n为正整数;若所述第一模块集合与所述第二模块集合相同,则发出警告信息;所述警告信息用于指示模块之间存在循环依赖。可选的,在发出所述警告信息之后,所述方法还包括:结束循环遍历未确定编译序号的模块。可选的,在根据各模块的编译序号以及各模块所属Maven项目的排序对各模块进行编译之前,所述方法还包括:对编译顺序相邻且所属Maven项目相同的模块的编译顺序进行合并。第二方面,本专利技术实施例提供了一种Maven项目编译装置,包括:依赖关系确定模块,用于确定业务系统中所有Maven项目的每一个模块的系统内部依赖模块;编译序号确定模块,用于循环遍历未确定编译序号的模块,将没有系统内部依赖模块的模块的编译序号确定为1、将有系统内部依赖模块且系统内部依赖模块的编译序号已确定的模块的编译序号确定为当前最大编译序号加1,直至所有模块的编译序号均已确定;项目排序确定模块,用于由编译序号2至最大编译序号依次遍历所述业务系统中所有Maven项目,对于任一Maven项目,若该Maven项目的目标模块只依赖该项目中编码顺序为当前遍历的编译序号减1的模块,则将该Maven项目的目标模块追加至该Maven项目中编码顺序为当前遍历的编译序号减1的模块之后;以任意编译序号遍历所述业务系统中所有Maven项目时,若所有Maven项目的目标模块均为空集,则将编译序号大于当前编译序号的所有模块的编译序号减1。任一Maven项目的目标模块为该Maven项目中编译序号与当前遍历的编译序号相同的模块,并按照各Maven项目的模块的编译序号最大值从小到大对各Maven项目进行排序;编译模块,用于根据各模块的编译序号以及各模块所属Maven项目的排序对各模块进行编译。可选的,所述编译模块,具体用于根据各模块的编译序号,由小到大依次对各模块进行编译,以及根据各模块所属Maven项目的排序,由先到后依次对编译序号相同的模块进行编译。可选的,所述编译序号确定模块,还用于判断第一模块集合是否与第二模块集合相同,以及在所述第一模块集合与所述第二模块集合相同时,则发出警告信息;其中,所述第一模块集合为第n次遍历未确定编译序号的模块之后,未确定编译序号的模块组成的集合,所述第二模块集合为第n+1次遍历未确定编译序号的模块之后,未确定编译序号的模块组成的集合,n为正整数;所述警告信息用于指示模块之间存在循环依赖。可选的,所述编译序号确定模块,还用于在发出所述警告信息之后,结束循环遍历未确定编译序号的模块。可选的,所述编译模快,还用于对编译顺序相邻且所属Maven项目相同的模块的编译顺序进行合并。本专利技术实施例提供的Maven项目编译方法,首先确定业务系统中所有Maven项目的每一个模块的系统内部依赖模块,然后循环遍历未确定编译序号的模块,将没有系统内部依赖模块的模块的编译序号确定为1、将有系统内部依赖模块且系统内部依赖模块的编译序号已确定的模块的编译序号确定为当前最大编译序号加1,直至所有模块的编译序号均已确定,再然后由编译序号2至最大编译序号依次遍历所述业务系统中所有Maven项目,对于任一Maven项目,若该Maven项目的目标模块只依赖该项目中编码顺序为当前遍历的编译序号减1的模块,则将该Ma本文档来自技高网
...

【技术保护点】
1.一种Maven项目编译方法,其特征在于,包括:/n确定业务系统中所有Maven项目的每一个模块的系统内部依赖模块;/n循环遍历未确定编译序号的模块,将没有系统内部依赖模块的模块的编译序号确定为1、将有系统内部依赖模块且系统内部依赖模块的编译序号已确定的模块的编译序号确定为当前最大编译序号加1,直至所有模块的编译序号均已确定;/n由编译序号2至最大编译序号依次遍历所述业务系统中所有Maven项目,对于任一Maven项目,若该Maven项目的目标模块只依赖该项目中编码顺序为当前遍历的编译序号减1的模块,则将该Maven项目的目标模块追加至该Maven项目中编码顺序为当前遍历的编译序号减1的模块之后;以任意编译序号遍历所述业务系统中所有Maven项目时,若所有Maven项目的目标模块均为空集,则将编译序号大于当前编译序号的所有模块的编译序号减1,任一Maven项目的目标模块为该Maven项目中编译序号与当前遍历的编译序号相同的模块;/n按照各Maven项目的模块的编译序号最大值从小到大对各Maven项目进行排序;/n根据各模块的编译序号以及各模块所属Maven项目的排序对各模块进行编译。/n...

【技术特征摘要】
1.一种Maven项目编译方法,其特征在于,包括:
确定业务系统中所有Maven项目的每一个模块的系统内部依赖模块;
循环遍历未确定编译序号的模块,将没有系统内部依赖模块的模块的编译序号确定为1、将有系统内部依赖模块且系统内部依赖模块的编译序号已确定的模块的编译序号确定为当前最大编译序号加1,直至所有模块的编译序号均已确定;
由编译序号2至最大编译序号依次遍历所述业务系统中所有Maven项目,对于任一Maven项目,若该Maven项目的目标模块只依赖该项目中编码顺序为当前遍历的编译序号减1的模块,则将该Maven项目的目标模块追加至该Maven项目中编码顺序为当前遍历的编译序号减1的模块之后;以任意编译序号遍历所述业务系统中所有Maven项目时,若所有Maven项目的目标模块均为空集,则将编译序号大于当前编译序号的所有模块的编译序号减1,任一Maven项目的目标模块为该Maven项目中编译序号与当前遍历的编译序号相同的模块;
按照各Maven项目的模块的编译序号最大值从小到大对各Maven项目进行排序;
根据各模块的编译序号以及各模块所属Maven项目的排序对各模块进行编译。


2.根据权利要求1所述的Maven项目编译方法,其特征在于,所述根据各模块的编译序号以及各模块所属Maven项目的排序对各模块进行编译,包括:
根据各模块的编译序号,由小到大依次对各模块进行编译,以及根据各模块所属Maven项目的排序,由先到后依次对编译序号相同的模块进行编译。


3.根据权利要求1所述的Maven项目编译方法,其特征在于,所述方法还包括:
判断第一模块集合是否与第二模块集合相同;所述第一模块集合为第n次遍历未确定编译序号的模块之后,未确定编译序号的模块组成的集合,所述第二模块集合为第n+1次遍历未确定编译序号的模块之后,未确定编译序号的模块组成的集合,n为正整数;
若所述第一模块集合与所述第二模块集合相同,则发出警告信息;所述警告信息用于指示模块之间存在循环依赖。


4.根据权利要求3所述的Maven项目编译方法,其特征在于,在发出所述警告信息之后,所述方法还包括:
结束循环遍历未确定编译序号的模块。


5.根据权利要求1-4任一项所述的Maven项目编译方法,其特征在于,在根据各模块的编译序号以及各模块所属Maven项目的排序对各模块进行编译之前,所述方法还包括:
对编译顺序相邻且所属Maven项目相同的模块...

【专利技术属性】
技术研发人员:张世伟李文
申请(专利权)人:迈普通信技术股份有限公司
类型:发明
国别省市:四川;51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1