发明内容
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种Maven依赖的管理方法以及系统。
本发明解决其技术问题所采用的技术方案是:构造一种Maven依赖的管理方法,包括:
S1、在Maven项目进行构建操作时,触发项目中的检查客户端请求检查服务端检查项目的Maven依赖是否存在问题;
S2、检查服务端根据存储的Maven状态信息生成检查结果并反馈给检查客户端;
S3、检查客户端解析接收的检查结果,并做出相关的处理。
在本发明所述的Maven依赖的管理方法中,所述步骤S1之前包括:编辑Maven项目的项目对象模型文件,添加作为检查客户端的Maven插件,以及在持久层存储Maven依赖信息;其中,所述持久层设置有接口以供用户编辑存储的Maven依赖信息。
在本发明所述的Maven依赖的管理方法中,所述步骤S1包括:
S10、Maven项目进行构建操作触发项目中的检查客户端;
S11、获取当前项目依赖的所有依赖文件,生成依赖文件列表;
S12、将依赖文件列表转化成JSON格式后通过HTTP请求发送给检查服务端。
在本发明所述的Maven依赖的管理方法中,所述步骤S2包括:
S21、接收检查客户端发起的请求,将请求的JSON格式的内容转换成依赖文件列表;
S22、遍历依赖文件列表,针对依赖文件列表中的每一个依赖文件均执行步骤S23;
S23、从持久层获取依赖文件,检查依赖文件的状态,如果依赖文件的状态为不推荐使用或者是禁用,查找推荐的其他依赖文件,将该依赖文件放入到检查结果列表当中;如果依赖文件的状态为未知或者可用,检查依赖文件的版本状态,如果依赖文件的版本状态为不推荐使用或者是禁用,查找推荐的其他依赖文件,将该依赖文件放入到检查结果列表当中;
S24、遍历完成后将检查结果列表转化成JSON格式的响应消息返回给客户端。
在本发明所述的Maven依赖的管理方法中,每个依赖文件由组合ID和版本唯一确定,检查客户端上传的依赖文件列表中包含各个依赖文件的组合ID和版本,持久层中的Maven依赖信息通过依赖文件信息表、依赖文件版本信息表关联存储;依赖文件信息表包括以下字段:作为主键的主键ID字段、表示依赖文件的组合ID的组合ID字段、表示依赖文件的状态的状态字段、关联依赖文件版本信息表的主键且表示推荐使用的版本的推荐字段;依赖文件版本信息表包括以下字段:作为主键的主键ID字段、作为外键关联依赖文件信息表的主键ID字段的关联字段、表示依赖文件的状态的状态字段、表示版本的版本字段、取值为依赖文件版本信息表的某个版本表记录的主键且表示推荐使用的版本的推荐字段。
在本发明所述的Maven依赖的管理方法中,步骤S23中所述的检查依赖文件的状态包括:
S231、基于当前依赖文件的组合ID,从依赖文件信息表查找相应的信息表记录,如果不存在信息表记录,则将当前依赖文件的组合ID字段添加到依赖文件信息表中产生一条新的信息表记录,并将当前依赖文件的版本和新的信息表记录的主键作为一条新的版本表记录添加到依赖文件版本信息表中,结束;如果存在信息表记录,则进入步骤S232;
S232、如果信息表记录中的状态字段为未知或者可用,则进入步骤S233,如果信息表记录中的状态字段为不推荐使用或者是禁用,则将其设置为当前依赖文件的状态,将信息表记录中的推荐字段的版本设置为当前依赖文件的推荐版本,并将当前依赖文件添加到检查结果列表当中,结束;
S233、基于信息表记录中的主键和依赖文件的版本,从依赖文件版本信息表中查找相应的版本表记录,如果不存在版本表记录,则将当前依赖文件的版本和其在信息表记录中的主键作为一条新的版本表记录添加到依赖文件版本信息表中,结束;如果存在版本表记录,则进入步骤S234;
S234、如果版本表记录中的状态字段为不推荐使用或者是禁用则将其设置为当前依赖文件的状态,且将版本表记录中的推荐字段的版本设置为当前依赖文件的推荐版本,并将当前依赖文件添加到检查结果列表当中。
在本发明所述的Maven依赖的管理方法中,步骤S232以及步骤S234中所述的将推荐字段的版本设置为当前依赖文件的推荐版本包括:
S23A、如果推荐字段为空,则表示不存在推荐版本,如果推荐字段为空,则将推荐字段的取值作为主键从依赖文件版本信息表中查找相应的版本表记录,并基于该版本表记录的关联字段获取依赖文件信息表的信息表记录;
S23B、如果信息表记录的状态为不推荐使用或者是禁用,则将信息表记录的推荐字段作为步骤S23A中的推荐字段再次执行步骤S23,否则进入步骤S23C;
S23C、如果版本表记录的状态为不推荐使用或者是禁用,则将版本表记录的推荐字段作为步骤S23A中的推荐字段再次执行步骤S23,否则进入步骤S23D;
S23D、将信息表记录的组合ID字段的取值作为推荐版本的组合ID,将版本表记录的版本字段作为推荐版本的版本。
在本发明所述的Maven依赖的管理方法中,所述步骤S3包括:
S31、检查客户端接收检查服务端的JSON格式的响应消息并解析得到检查结果列表;
S32、处理检查结果列表,根据每个依赖文件的状态进行相应的处理,处理包括:输出依赖文件的相关信息给用户和/或更新项目对象模型文件中对应的依赖文件的版本。
本发明还公开了一种Maven依赖的管理系统,包括:检查服务端和位于Maven项目中的检查客户端;
检查客户端用于在Maven项目在进行构建操作时被触发并请求检查服务端检查项目的Maven依赖是否存在问题;检查服务端用于根据存储的Maven状态信息生成检查结果并反馈给检查客户端;检查客户端还用于解析接收的检查结果,并做出相关的处理。
在本发明所述的Maven依赖的管理系统中,所述检查客户端为通过编辑Maven项目的项目对象模型文件添加的Maven插件;所述管理系统还包括存储Maven依赖信息的持久层,且所述持久层设置有接口以供用户编辑存储的Maven依赖信息。
在本发明所述的Maven依赖的管理系统中,所述检查客户端包括:
依赖文件列表生成单元,用于获取当前项目依赖的所有依赖文件,生成依赖文件列表;
请求单元,用于将依赖文件列表转化成JSON格式后通过HTTP请求发送给检查服务端;
响应接收单元,用于检查客户端接收检查服务端的JSON格式的响应消息并解析得到检查结果列表;
响应执行单元,用于处理检查结果列表,根据每个依赖文件的状态进行相应的处理,处理包括:输出依赖文件的相关信息给用户和/或更新项目对象模型文件中对应的依赖文件的版本。
在本发明所述的Maven依赖的管理系统中,所述检查服务端包括:
请求接收单元,用于接收检查客户端发起的请求,将请求的JSON格式的内容转换成依赖文件列表;
请求处理单元,用于遍历依赖文件列表,针对依赖文件列表中的每一个依赖文件均执行以下操作:从持久层获取依赖文件,检查依赖文件的状态,如果依赖文件的状态为不推荐使用或者是禁用,查找推荐的其他依赖文件,将该依赖文件放入到检查结果列表当中;如果依赖文件的状态为未知或者可用,检查依赖文件的版本状态,如果依赖文件的版本状态为不推荐使用或者是禁用,查找推荐的其他依赖文件,将该依赖文件放入到检查结果列表当中;
响应发送单元,用于在遍历完成后将检查结果列表转化成JSON格式的响应消息返回给检查客户端。
实施本发明的Maven依赖的管理方法以及系统,具有以下有益效果:本发明基于检查客户端、检查服务端可以实现对项目的Maven依赖的统一检查和更新的管理,提高了Maven项目打包时依赖的文件的版本质量;避免了存在问题的Maven依赖对商用环境造成的不可预知的影响;降低了查找和更新Maven依赖的复杂程度,节省了人力和时间成本。
具体实施方式
在本发明实施例中,在Maven项目进行构建操作时,触发项目中的检查客户端请求检查服务端检查项目的Maven依赖是否存在问题;检查服务端根据存储的Maven状态信息生成检查结果并反馈给检查客户端;检查客户端解析接收的检查结果,并做出相关的处理。如此,可以实现对项目的Maven依赖的统一检查和更新的管理,提高了Maven项目打包时依赖的文件的版本质量;避免了存在问题的Maven依赖对商用环境造成的不可预知的影响;降低了查找和更新Maven依赖的复杂程度,节省了人力和时间成本。
为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明,应当理解本发明实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互组合。
参考图1,是本发明Maven依赖的管理系统的较佳实施例的结构示意图。
Maven仓库,就是放置所有依赖文件(JAR,WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖文件。此外,由于Maven仓库中所有的依赖文件都有其自己的坐标(GAV,即groupId、artifactId、version),该坐标告诉Maven每个依赖文件Artifact的groupId、artifactId、version,以及打包方式等等,因此Maven项目可以方便的进行依赖版本管理。
由于拥有相同groupId和artifactId但是version不同的两个artifact被认为是同一个Artifact的两个不同版本。因此,使用groupId和artifactId即可对Artifact进行分类管理。本发明中每个依赖文件由组合ID(groupId和artifactId)和版本唯一确定,检查客户端上传的依赖文件列表中包含各个依赖文件的组合ID(groupId和artifactId)和版本。
持久层,存储Maven依赖信息,且所述持久层设置有接口以供用户编辑存储的Maven依赖信息。Maven依赖信息以数据库或者XML文件格式进行存储,但不限于上述的技术,只要能实现数据持久化的需求的技术均可,本发明所举例子以数据库作为持久层的实例进行说明。
较佳实施例中,Maven依赖信息主要基于以下三种数据表:Artifact信息表、Artifact分类表、Artifact版本信息表,表名分别对应记为artifact_info、artifact_category、artifact_version_info。
持久层中的Maven依赖信息主要是通过依赖文件信息表、依赖文件版本信息表关联存储,依赖文件分类表仅仅是将依赖文件信息表中的分类的数值映射为具体的名称而已。
其中,依赖文件信息表包括以下字段:作为主键的主键ID字段、表示依赖文件的组合ID的组合ID字段、表示依赖文件的状态的状态字段、关联依赖文件版本信息表的主键且表示推荐使用的版本的推荐字段、等等。
其中,依赖文件版本信息表包括以下字段:作为主键的主键ID字段、作为外键关联依赖文件信息表的主键ID字段的关联字段、表示依赖文件的状态的状态字段、表示版本的版本字段、取值为依赖文件版本信息表的某个版本表记录的主键且表示推荐使用的版本的推荐字段、等等。
参考下面的表1-3,分别示意出了artifact_info、artifact_category、artifact_version_info三种表的具体的结构定义。
表1:Artifact信息表(artifact_info)的结构定义
表2:Artifact分类表(artifact_category)的结构定义
表3:Artifact版本信息表(artifact_version_info)的结构定义
其中,Artifact信息表中的groupId和artifactId唯一确定一个依赖文件信息。Artifact信息表和Artifact版本信息表共同确定一个依赖文件的完整信息。而Artifact分类表仅仅是就分类的数值和名称进行映射而已,具体的,Artifact信息表中的category_id字段的仅给出了分类的数值,需根据此数值从Artifact分类表中查询到具体的分类名称。
需要注意的是,Artifact信息表和Artifact版本信息表均包括代表依赖文件状态的status字段,但是Artifact版本信息表的status字段的优先级低于Artifact信息表的status字段。例如,如果某个依赖文件Artifact在Artifact信息表中的status字段被设置为不推荐或者禁用,则表示该依赖文件Artifact的所有版本都不推荐或者禁用。
为了保证Artifact等相关的数据进行管理和维护,例如修改Artifact的状态,增加推荐的Artifact等,需要提供界面供管理人员对Artifact等数据进行操作,主要是数据的增删改查,因为功能实现不存在技术问题,下面仅对需要注意的地方进行说明:
artifact_info数据的编辑:
新增:category_id字段提供下拉菜单选择并且可多选,关联artifact_category表的pk_id。
修改:pk_id、group_id、artifact_id不可修改,仅允许修改name、desc、category_id、artifact_recommended字段值,artifact_recommended可提供列表供管理人员选择;
删除:根据pk_id删除记录,同时需要级联删除artifact_version_info表artifact_pk为pk_id的记录;
查询:查询条件包含group_id、artifact_id、name、category_id;
列表显示时分类需要artifact_category的name字段,推荐使用的其他Artifact需要显示其他Artifact的名称,没有配置名称的,显示group_id、artifact_id、version。
如果一个Artifact或者某个Version被置为不推荐或者禁用,则其他Artifact推荐的Artifact是该Artifact的将被置为空,避免推荐无效
artifact_version_Info数据的编辑:
通过artifact_info表列表页面可以对某个artifact的版本信息进行管理,点击artifact_info列表右侧的“版本信息”来对某个artifact的版本进行管理。
新增:新增页面自动传递隐藏参数artifact_pk,关联artifact_info表pk_id字段。status字段提供下拉菜单供用户选择。
修改:仅可修改status、desc、version_recommended字段
artifact_category数据的编辑:
新增:直接添加新的记录即可。
修改:只允许修改name;
删除:因为artifact_info表有关联,所以不允许删除记录;
查询:可以根据name查询分类信息。
最后,关于artifact_info和artifact_version_Info的状态更新,当确定了某个Artifact或者某个Version(后统一简称Artifact)存在问题时,需要通过上面的数据管理界面对Artifact进行状态更新,修改状态、描述、推荐的版本等。
检查客户端,其为通过编辑Maven项目的项目对象模型文件pom.xml添加的Maven插件,所述检查客户端包括:依赖文件列表生成单元,用于获取当前项目依赖的所有依赖文件,生成依赖文件列表,依赖文件列表中包含各个依赖文件的groupId、artifactId、version;请求单元,用于将依赖文件列表转化成JSON格式后通过HTTP请求发送给检查服务端;响应接收单元,用于检查客户端接收检查服务端的JSON格式的响应消息并解析得到检查结果列表;响应执行单元,用于处理检查结果列表,根据每个依赖文件的状态进行相应的处理,例如输出日志,修改pom.xml文件当中的依赖文件的信息等。
检查服务端,在接收到客户端发送的依赖文件列表后,从持久层获取依赖文件的相关信息,对于依赖文件的状态进行判定和处理,例如不推荐,禁用,标记依赖文件的状态,查找是否有其他推荐的依赖文件,最终将依赖文件的检查的结果集合返回给客户端。具体包括:请求接收单元,用于接收检查客户端发起的请求,将请求的JSON格式的内容转换成依赖文件列表;请求处理单元,用于遍历依赖文件列表,针对依赖文件列表中的每一个依赖文件均执行以下操作:从持久层获取依赖文件,检查依赖文件的状态,如果依赖文件的状态为不推荐使用或者是禁用,查找推荐的其他依赖文件,将该依赖文件放入到检查结果列表当中;如果依赖文件的状态为未知或者可用,检查依赖文件的版本状态,如果依赖文件的版本状态为不推荐使用或者是禁用,查找推荐的其他依赖文件,将该依赖文件放入到检查结果列表当中;响应发送单元,用于在遍历完成后将检查结果列表转化成JSON格式的响应消息返回给检查客户端。
其中,检查服务端返回的检查结果列表包括groupId、artifactId、version、status、desc,如果有推荐的版本,则还包括推荐版本的groupId、artifactId、version。
传输层,检查客户端和检查服务端的数据传输通道,较佳实施例中,检查客户端和检查服务端通过HTTP、JSON进行数据交互。可以理解的是,检查客户端和检查服务端交互(数据传输)采用HTTP、JSON等协议规范,仅仅是一个示例,本发明实际上不限于上述的技术,只要能实现数据传输和交互需求的技术在本发明的保护范围之内。
本发明将Maven依赖加入依赖检查和更新服务端的时机包括:开发人员在软件的开发、测试、上线和实际商用过程中,发现某个Maven Artifact依赖存在问题,影响业务系统的正常运行,通过使用其他版本,或者使用其他Artifact来解决问题;研发系统的管理维护人员通过Maven依赖的官网、社区、知名论坛或者其他渠道得知某个Maven依赖存在问题,需要替换版本。
参考图2,本发明还提供了一种Maven依赖的管理方法,包括:
S1、在Maven项目进行构建操作时,触发项目中的检查客户端请求检查服务端检查项目的Maven依赖是否存在问题;
S2、检查服务端根据存储的Maven状态信息生成检查结果并反馈给检查客户端;
S3、检查客户端解析接收的检查结果,并做出相关的处理。
其中,所述步骤S1之前包括:编辑Maven项目的项目对象模型文件,添加作为检查客户端的Maven插件,以及在持久层存储Maven依赖信息;其中,所述持久层设置有接口以供用户编辑存储的Maven依赖信息。持久层中的Maven依赖信息通过以下三种数据表关联存储:依赖文件信息表、依赖文件分类表、依赖文件版本信息表。具体详见上述关于管理系统的阐述,此处不再赘述。
具体的,所述步骤S1包括:
S10、Maven项目进行构建操作触发项目中的检查客户端;
S11、获取当前项目依赖的所有依赖文件,生成依赖文件列表;
S12、将依赖文件列表转化成JSON格式后通过HTTP请求发送给检查服务端。
具体的,所述步骤S2包括:
S21、接收检查客户端发起的请求,将请求的JSON格式的内容转换成依赖文件列表;
S22、遍历依赖文件列表,针对依赖文件列表中的每一个依赖文件均执行步骤S23;
S23、从持久层获取依赖文件,检查依赖文件的状态,如果依赖文件的状态为不推荐使用或者是禁用,查找推荐的其他依赖文件,将该依赖文件放入到检查结果列表当中;如果依赖文件的状态为未知或者可用,检查依赖文件的版本状态,如果依赖文件的版本状态为不推荐使用或者是禁用,查找推荐的其他依赖文件,将该依赖文件放入到检查结果列表当中;
S24、遍历完成后将检查结果列表转化成JSON格式的响应消息返回给客户端。
具体的,所述步骤S3包括:
S31、检查客户端接收检查服务端的JSON格式的响应消息并解析得到检查结果列表;
S32、处理检查结果列表,根据每个依赖文件的状态进行相应的处理,处理包括:输出依赖文件的相关信息给用户和/或更新项目对象模型文件中对应的依赖文件的版本。
具体的,步骤S23中所述的检查依赖文件的状态包括:
S231、基于当前依赖文件的组合ID,从依赖文件信息表查找相应的信息表记录,如果不存在信息表记录,则将当前依赖文件的组合ID字段添加到依赖文件信息表中产生一条新的信息表记录,并将当前依赖文件的版本和新的信息表记录的主键作为一条新的版本表记录添加到依赖文件版本信息表中,结束;如果存在信息表记录,则进入步骤S232;
S232、如果信息表记录中的状态字段为未知或者可用,则进入步骤S233,如果信息表记录中的状态字段为不推荐使用或者是禁用,则将其设置为当前依赖文件的状态,将信息表记录中的推荐字段的版本设置为当前依赖文件的推荐版本,并将当前依赖文件添加到检查结果列表当中,结束;
S233、基于信息表记录中的主键和依赖文件的版本,从依赖文件版本信息表中查找相应的版本表记录,如果不存在版本表记录,则将当前依赖文件的版本和其在信息表记录中的主键作为一条新的版本表记录添加到依赖文件版本信息表中,结束;如果存在版本表记录,则进入步骤S234;
S234、如果版本表记录中的状态字段为不推荐使用或者是禁用则将其设置为当前依赖文件的状态,且将版本表记录中的推荐字段的版本设置为当前依赖文件的推荐版本,并将当前依赖文件添加到检查结果列表当中。
进一步具体的,步骤S232以及步骤S234中所述的将推荐字段的版本设置为当前依赖文件的推荐版本包括:
S23A、如果推荐字段为空,则表示不存在推荐版本,如果推荐字段为空,则将推荐字段的取值作为主键从依赖文件版本信息表中查找相应的版本表记录,并基于该版本表记录的关联字段获取依赖文件信息表的信息表记录;
S23B、如果信息表记录的状态为不推荐使用或者是禁用,则将信息表记录的推荐字段作为步骤S23A中的推荐字段再次执行步骤S23,否则进入步骤S23C;
S23C、如果版本表记录的状态为不推荐使用或者是禁用,则将版本表记录的推荐字段作为步骤S23A中的推荐字段再次执行步骤S23,否则进入步骤S23D;
S23D、将信息表记录的组合ID字段的取值作为推荐版本的组合ID,将版本表记录的版本字段作为推荐版本的版本。
综上所述,本发明基于检查客户端、检查服务端可以实现对项目的Maven依赖的统一检查和更新的管理,提高了Maven项目打包时依赖的文件的版本质量;避免了存在问题的Maven依赖对商用环境造成的不可预知的影响;降低了查找和更新Maven依赖的复杂程度,节省了人力和时间成本。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。