CN108228229A - 一种Maven依赖的管理方法以及系统 - Google Patents

一种Maven依赖的管理方法以及系统 Download PDF

Info

Publication number
CN108228229A
CN108228229A CN201611178026.0A CN201611178026A CN108228229A CN 108228229 A CN108228229 A CN 108228229A CN 201611178026 A CN201611178026 A CN 201611178026A CN 108228229 A CN108228229 A CN 108228229A
Authority
CN
China
Prior art keywords
version
maven
file
dependent file
dependent
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.)
Granted
Application number
CN201611178026.0A
Other languages
English (en)
Other versions
CN108228229B (zh
Inventor
郑先斌
李晓义
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SHENZHEN YETUOXUN COMMUNICATION TECHNOLOGY Co Ltd
Original Assignee
SHENZHEN YETUOXUN COMMUNICATION TECHNOLOGY Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by SHENZHEN YETUOXUN COMMUNICATION TECHNOLOGY Co Ltd filed Critical SHENZHEN YETUOXUN COMMUNICATION TECHNOLOGY Co Ltd
Priority to CN201611178026.0A priority Critical patent/CN108228229B/zh
Publication of CN108228229A publication Critical patent/CN108228229A/zh
Application granted granted Critical
Publication of CN108228229B publication Critical patent/CN108228229B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种Maven依赖的管理方法以及系统,方法包括:S1、在Maven项目进行构建操作时,触发项目中的检查客户端请求检查服务端检查项目的Maven依赖是否存在问题;S2、检查服务端根据存储的Maven状态信息生成检查结果并反馈给检查客户端;S3、检查客户端解析接收的检查结果,并做出相关的处理。本发明基于检查客户端、检查服务端可以实现对项目的Maven依赖的统一检查和更新的管理,提高了Maven项目打包时依赖的文件的版本质量;避免了存在问题的Maven依赖对商用环境造成的不可预知的影响;降低了查找和更新Maven依赖的复杂程度,节省了人力和时间成本。

Description

一种Maven依赖的管理方法以及系统
技术领域
本发明涉及计算机领域,尤其涉及一种Maven依赖的管理方法以及系统。
背景技术
Maven是一个项目管理工具,它包含了一个项目对象模型(Project ObjectModel,简称POM),一组标准集合,一个项目生命周期,一个依赖管理系统和用来运行定义在生命周期阶段中插件目标的逻辑。当使用Maven的时候,用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
其中,POM是在实体上表现为xml格式的文件pom.xml,是Maven工作的基础,每个Maven项目都包含一个pom.xml,在执行项目时,Maven会去项目的根目录下读取pom.xml,获得需要的配置信息。POM文件中包含了项目的信息和项目所需的配置信息,通常有项目信息(如版本、成员)、项目的依赖、插件和目标项等等。
其中,依赖文件Artifact是一个项目通过Maven生成的最终文件,通常也叫Maven构件,可以是jar文件、源文件、二进制文件或者war文件,甚至是POM文件。每个Artifact都由一组唯一的标识符(由groupId、artifactId、version组成)进行标识。需要被使用(依赖)的Artifact都要放在Maven仓库中。
当一个项目需要引用Maven仓库当中的Artifact时,需要在项目的pom.xml当中定义对Artifact的依赖,同时,这个被引用的Artifact本身和这种被引用的关系,也称为Maven依赖。
在Maven项目中增加依赖时,需要指定Artifact的groupId、artifactId、version,但是在经过了一段时间后,依赖的Artifact因为某种原因进行了修改,例如修复了bug,修改了处理逻辑,这时Artifact的版本会发生变化,通常是版本号升级,例如原先是1.1.1,现在发布了1.1.2,这种被依赖Artifact的版本变化,不会主动的反馈给依赖此Artifact的Maven项目上,通常是由项目的开发维护人员主动(定期不定期的检查依赖的Artifact是否发布了新的版本)或者被动(出现问题时发现依赖的Artifact存在bug)的进行pom.xml当中artifact版本的检查和更新。当一个Artifact被多个Maven项目依赖,或者一个Maven项目依赖多个Artifact,这时Artifact依赖版本变更的检查和更新工作就变得非常复杂和繁琐。
概括来讲,现有技术中,Maven依赖的引入和管理使用过程中,主要存在下述的问题:Maven依赖的版本使用混乱。同一个Maven依赖,有的项目依赖使用的版本低,有的依赖使用的版本高,没有对依赖版本进行统一的检查和监控管理;相同的功能需求,不同的项目引入了不同的Maven依赖。例如需要用到WebService框架,不同的项目分别引入了Axis2和CXF,增加了项目的复杂度;随意使用某个版本的Maven依赖,但是没有经过充分测试和验证,可能导致系统上线运行时出现问题;开发人员在引入Maven依赖时,面临选择合适版本依赖的困境,特别是在面对数量众多的Maven依赖以及同一Artifact的众多版本,如何快速准确的检查Maven依赖的版本是非常困难。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种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依赖的复杂程度,节省了人力和时间成本。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图:
图1是本发明Maven依赖的管理系统的较佳实施例的结构示意图;
图2是本发明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依赖的复杂程度,节省了人力和时间成本。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。

Claims (10)

1.一种Maven依赖的管理方法,其特征在于,包括:
S1、在Maven项目进行构建操作时,触发项目中的检查客户端请求检查服务端检查项目的Maven依赖是否存在问题;
S2、检查服务端根据存储的Maven状态信息生成检查结果并反馈给检查客户端;
S3、检查客户端解析接收的检查结果,并做出相关的处理。
2.根据权利要求1所述的Maven依赖的管理方法,其特征在于,所述步骤S1之前包括:编辑Maven项目的项目对象模型文件,添加作为检查客户端的Maven插件,以及在持久层存储Maven依赖信息;其中,所述持久层设置有接口以供用户编辑存储的Maven依赖信息。
3.根据权利要求1所述的Maven依赖的管理方法,其特征在于,
所述步骤S1包括:
S10、Maven项目进行构建操作触发项目中的检查客户端;
S11、获取当前项目依赖的所有依赖文件,生成依赖文件列表;
S12、将依赖文件列表转化成JSON格式后通过HTTP请求发送给检查服务端。
4.根据权利要求1所述的Maven依赖的管理方法,其特征在于,所述步骤S2包括:
S21、接收检查客户端发起的请求,将请求的JSON格式的内容转换成依赖文件列表;
S22、遍历依赖文件列表,针对依赖文件列表中的每一个依赖文件均执行步骤S23;
S23、从持久层获取依赖文件,检查依赖文件的状态:如果依赖文件的状态为不推荐使用或者是禁用,查找推荐的其他依赖文件,将该依赖文件放入到检查结果列表当中;如果依赖文件的状态为未知或者可用,检查依赖文件的版本状态,如果依赖文件的版本状态为不推荐使用或者是禁用,查找推荐的其他依赖文件,将该依赖文件放入到检查结果列表当中;
S24、遍历完成后将检查结果列表转化成JSON格式的响应消息返回给检查客户端。
5.根据权利要求4所述的Maven依赖的管理方法,其特征在于,每个依赖文件由组合ID和版本唯一确定,检查客户端上传的依赖文件列表中包含各个依赖文件的组合ID和版本,持久层中的Maven依赖信息通过依赖文件信息表、依赖文件版本信息表关联存储;依赖文件信息表包括以下字段:作为主键的主键ID字段、表示依赖文件的组合ID的组合ID字段、表示依赖文件的状态的状态字段、关联依赖文件版本信息表的主键且表示推荐使用的版本的推荐字段;依赖文件版本信息表包括以下字段:作为主键的主键ID字段、作为外键关联依赖文件信息表的主键ID字段的关联字段、表示依赖文件的状态的状态字段、表示版本的版本字段、取值为依赖文件版本信息表的某个版本表记录的主键且表示推荐使用的版本的推荐字段。
6.根据权利要求5所述的Maven依赖的管理方法,其特征在于,步骤S23中所述的检查依赖文件的状态包括:
S231、基于当前依赖文件的组合ID,从依赖文件信息表查找相应的信息表记录,如果不存在信息表记录,则将当前依赖文件的组合ID字段添加到依赖文件信息表中产生一条新的信息表记录,并将当前依赖文件的版本和新的信息表记录的主键作为一条新的版本表记录添加到依赖文件版本信息表中,结束;如果存在信息表记录,则进入步骤S232;
S232、如果信息表记录中的状态字段为未知或者可用,则进入步骤S233,如果信息表记录中的状态字段为不推荐使用或者是禁用,则将其设置为当前依赖文件的状态,将信息表记录中的推荐字段的版本设置为当前依赖文件的推荐版本,并将当前依赖文件添加到检查结果列表当中,结束;
S233、基于信息表记录中的主键和依赖文件的版本,从依赖文件版本信息表中查找相应的版本表记录,如果不存在版本表记录,则将当前依赖文件的版本和其在信息表记录中的主键作为一条新的版本表记录添加到依赖文件版本信息表中,结束;如果存在版本表记录,则进入步骤S234;
S234、如果版本表记录中的状态字段为不推荐使用或者是禁用则将其设置为当前依赖文件的状态,且将版本表记录中的推荐字段的版本设置为当前依赖文件的推荐版本,并将当前依赖文件添加到检查结果列表当中。
7.根据权利要求6所述的Maven依赖的管理方法,其特征在于,步骤S232以及步骤S234中所述的将推荐字段的版本设置为当前依赖文件的推荐版本包括:
S23A、如果推荐字段为空,则表示不存在推荐版本,如果推荐字段为空,则将推荐字段的取值作为主键从依赖文件版本信息表中查找相应的版本表记录,并基于该版本表记录的关联字段获取依赖文件信息表的信息表记录;
S23B、如果信息表记录的状态为不推荐使用或者是禁用,则将信息表记录的推荐字段作为步骤S23A中的推荐字段再次执行步骤S23,否则进入步骤S23C;
S23C、如果版本表记录的状态为不推荐使用或者是禁用,则将版本表记录的推荐字段作为步骤S23A中的推荐字段再次执行步骤S23,否则进入步骤S23D;
S23D、将信息表记录的组合ID字段的取值作为推荐版本的组合ID,将版本表记录的版本字段作为推荐版本的版本。
8.根据权利要求1所述的Maven依赖的管理方法,其特征在于,所述步骤S3包括:
S31、检查客户端接收检查服务端的JSON格式的响应消息并解析得到检查结果列表;
S32、处理检查结果列表,根据每个依赖文件的状态进行相应的处理,处理包括:输出依赖文件的相关信息给用户和/或更新项目对象模型文件中对应的依赖文件的版本。
9.一种Maven依赖的管理系统,其特征在于,包括:检查服务端和位于Maven项目中的检查客户端;
检查客户端用于在Maven项目在进行构建操作时被触发并请求检查服务端检查项目的Maven依赖是否存在问题;检查服务端用于根据存储的Maven状态信息生成检查结果并反馈给检查客户端;检查客户端还用于解析接收的检查结果,并做出相关的处理。
10.根据权利要求6所述的Maven依赖的管理系统,其特征在于,所述检查客户端为通过编辑Maven项目的项目对象模型文件添加的Maven插件;所述管理系统还包括存储Maven依赖信息的持久层,且所述持久层设置有接口以供用户编辑存储的Maven依赖信息;
所述检查客户端包括:
依赖文件列表生成单元,用于获取当前项目依赖的所有依赖文件,生成依赖文件列表;
请求单元,用于将依赖文件列表转化成JSON格式后通过HTTP请求发送给检查服务端;
响应接收单元,用于检查客户端接收检查服务端的JSON格式的响应消息并解析得到检查结果列表;
响应执行单元,用于处理检查结果列表,根据每个依赖文件的状态进行相应的处理,处理包括:输出依赖文件的相关信息给用户和/或更新项目对象模型文件中对应的依赖文件的版本;
所述检查服务端包括:
请求接收单元,用于接收检查客户端发起的请求,将请求的JSON格式的内容转换成依赖文件列表;
请求处理单元,用于遍历依赖文件列表,针对依赖文件列表中的每一个依赖文件均执行以下操作:从持久层获取依赖文件,检查依赖文件的状态,如果依赖文件的状态为不推荐使用或者是禁用,查找推荐的其他依赖文件,将该依赖文件放入到检查结果列表当中;如果依赖文件的状态为未知或者可用,检查依赖文件的版本状态,如果依赖文件的版本状态为不推荐使用或者是禁用,查找推荐的其他依赖文件,将该依赖文件放入到检查结果列表当中;
响应发送单元,用于在遍历完成后将检查结果列表转化成JSON格式的响应消息返回给检查客户端。
CN201611178026.0A 2016-12-19 2016-12-19 一种Maven依赖的管理方法以及系统 Active CN108228229B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611178026.0A CN108228229B (zh) 2016-12-19 2016-12-19 一种Maven依赖的管理方法以及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611178026.0A CN108228229B (zh) 2016-12-19 2016-12-19 一种Maven依赖的管理方法以及系统

Publications (2)

Publication Number Publication Date
CN108228229A true CN108228229A (zh) 2018-06-29
CN108228229B CN108228229B (zh) 2021-04-13

Family

ID=62650752

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611178026.0A Active CN108228229B (zh) 2016-12-19 2016-12-19 一种Maven依赖的管理方法以及系统

Country Status (1)

Country Link
CN (1) CN108228229B (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108984416A (zh) * 2018-08-07 2018-12-11 东北大学 一种评估Maven环境中依赖冲突危险级别的方法
CN109101236A (zh) * 2018-07-06 2018-12-28 政采云有限公司 基于规则引擎和maven插件实现的项目依赖管理方法及系统
CN110618931A (zh) * 2019-08-14 2019-12-27 重庆金融资产交易所有限责任公司 依赖关系检测方法、装置、计算机设备及可读存储介质
CN110989985A (zh) * 2019-11-29 2020-04-10 深圳前海环融联易信息科技服务有限公司 基于Maven的依赖包的管理方法、装置、计算机设备及存储介质
CN111475422A (zh) * 2020-06-28 2020-07-31 四川新网银行股份有限公司 一种基于Jenkins工具的依赖检查方法
CN111783103A (zh) * 2020-07-03 2020-10-16 Oppo广东移动通信有限公司 基于Maven的依赖管理方法、装置、电子装置及存储介质
CN113377342A (zh) * 2020-02-25 2021-09-10 武汉斗鱼鱼乐网络科技有限公司 一种项目构建方法、装置、电子设备及存储介质
CN114760355A (zh) * 2022-03-18 2022-07-15 麒麟软件有限公司 一种Node.js依赖离线管理方法
CN116541307A (zh) * 2023-06-29 2023-08-04 云筑信息科技(成都)有限公司 一种对比pom版本的数据处理方法
CN111783103B (zh) * 2020-07-03 2024-06-04 Oppo广东移动通信有限公司 基于Maven的依赖管理方法、装置、电子装置及存储介质

Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102253999A (zh) * 2011-07-12 2011-11-23 北京新媒传信科技有限公司 一种服务依赖性的验证方法
CN102325153A (zh) * 2011-07-12 2012-01-18 北京新媒传信科技有限公司 一种服务开发方法和系统
CN102393845A (zh) * 2011-06-30 2012-03-28 北京新媒传信科技有限公司 一种共享库管理方法和系统
US20130232469A1 (en) * 2012-03-02 2013-09-05 Oracle International Corporation System and method for automatically resolving dependencies of java archive files for use with maven
US20130297973A1 (en) * 2012-05-04 2013-11-07 Aegis.Net, Inc. Automated Conformance and Interoperability Test Lab
CN104809071A (zh) * 2015-05-14 2015-07-29 北京润科通用技术有限公司 一种代码测试方法及装置
CN104834528A (zh) * 2015-05-25 2015-08-12 北京京东尚科信息技术有限公司 依赖版本处理插件及采用其对依赖版本进行处理的方法
US20150269243A1 (en) * 2014-03-19 2015-09-24 Fujitsu Limited Computer product, software dividing apparatus, and software dividing method
CN104951339A (zh) * 2015-06-05 2015-09-30 烽火通信科技股份有限公司 一种基于Bundle依赖关系的自动搜索安装系统及方法
CN104965760A (zh) * 2015-06-29 2015-10-07 广州酷狗计算机科技有限公司 一种管理软件功能模块生命周期的方法和装置
CN105335185A (zh) * 2014-08-11 2016-02-17 龙芯中科技术有限公司 红帽源码包管理srpm包的处理方法及装置
CN105528464A (zh) * 2016-01-28 2016-04-27 北京宇航系统工程研究所 一种自动判断关联数据技术状态一致性的版本管理系统
CN105630463A (zh) * 2014-10-28 2016-06-01 阿里巴巴集团控股有限公司 用于检测jar包冲突的方法及装置
CN106033336A (zh) * 2015-03-12 2016-10-19 阿里巴巴集团控股有限公司 解决Maven依赖冲突的方法、装置和系统
CN106155724A (zh) * 2015-04-14 2016-11-23 阿里巴巴集团控股有限公司 一种升级方法及装置

Patent Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102393845A (zh) * 2011-06-30 2012-03-28 北京新媒传信科技有限公司 一种共享库管理方法和系统
CN102325153A (zh) * 2011-07-12 2012-01-18 北京新媒传信科技有限公司 一种服务开发方法和系统
CN102253999A (zh) * 2011-07-12 2011-11-23 北京新媒传信科技有限公司 一种服务依赖性的验证方法
US20130232469A1 (en) * 2012-03-02 2013-09-05 Oracle International Corporation System and method for automatically resolving dependencies of java archive files for use with maven
US20130297973A1 (en) * 2012-05-04 2013-11-07 Aegis.Net, Inc. Automated Conformance and Interoperability Test Lab
US20150269243A1 (en) * 2014-03-19 2015-09-24 Fujitsu Limited Computer product, software dividing apparatus, and software dividing method
CN105335185A (zh) * 2014-08-11 2016-02-17 龙芯中科技术有限公司 红帽源码包管理srpm包的处理方法及装置
CN105630463A (zh) * 2014-10-28 2016-06-01 阿里巴巴集团控股有限公司 用于检测jar包冲突的方法及装置
CN106033336A (zh) * 2015-03-12 2016-10-19 阿里巴巴集团控股有限公司 解决Maven依赖冲突的方法、装置和系统
CN106155724A (zh) * 2015-04-14 2016-11-23 阿里巴巴集团控股有限公司 一种升级方法及装置
CN104809071A (zh) * 2015-05-14 2015-07-29 北京润科通用技术有限公司 一种代码测试方法及装置
CN104834528A (zh) * 2015-05-25 2015-08-12 北京京东尚科信息技术有限公司 依赖版本处理插件及采用其对依赖版本进行处理的方法
CN104951339A (zh) * 2015-06-05 2015-09-30 烽火通信科技股份有限公司 一种基于Bundle依赖关系的自动搜索安装系统及方法
CN104965760A (zh) * 2015-06-29 2015-10-07 广州酷狗计算机科技有限公司 一种管理软件功能模块生命周期的方法和装置
CN105528464A (zh) * 2016-01-28 2016-04-27 北京宇航系统工程研究所 一种自动判断关联数据技术状态一致性的版本管理系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
ADOLFMC: "maven 检查依赖冲突和版本冲突", 《HTTPS://WWW.CNBLOGS.COM/ADOLFMC/P/6069983.HTML》 *
傅腾 等: "Web工程中基于不变性的元数据检查和测试", 《计算机科学》 *

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109101236A (zh) * 2018-07-06 2018-12-28 政采云有限公司 基于规则引擎和maven插件实现的项目依赖管理方法及系统
CN108984416A (zh) * 2018-08-07 2018-12-11 东北大学 一种评估Maven环境中依赖冲突危险级别的方法
CN110618931A (zh) * 2019-08-14 2019-12-27 重庆金融资产交易所有限责任公司 依赖关系检测方法、装置、计算机设备及可读存储介质
CN110618931B (zh) * 2019-08-14 2024-06-07 重庆金融资产交易所有限责任公司 依赖关系检测方法、装置、计算机设备及可读存储介质
CN110989985A (zh) * 2019-11-29 2020-04-10 深圳前海环融联易信息科技服务有限公司 基于Maven的依赖包的管理方法、装置、计算机设备及存储介质
CN110989985B (zh) * 2019-11-29 2024-01-23 深圳前海环融联易信息科技服务有限公司 基于Maven的依赖包的管理方法、装置、计算机设备及存储介质
CN113377342A (zh) * 2020-02-25 2021-09-10 武汉斗鱼鱼乐网络科技有限公司 一种项目构建方法、装置、电子设备及存储介质
CN113377342B (zh) * 2020-02-25 2024-01-19 南昌节点汇智科技有限公司 一种项目构建方法、装置、电子设备及存储介质
CN111475422A (zh) * 2020-06-28 2020-07-31 四川新网银行股份有限公司 一种基于Jenkins工具的依赖检查方法
CN111783103A (zh) * 2020-07-03 2020-10-16 Oppo广东移动通信有限公司 基于Maven的依赖管理方法、装置、电子装置及存储介质
CN111783103B (zh) * 2020-07-03 2024-06-04 Oppo广东移动通信有限公司 基于Maven的依赖管理方法、装置、电子装置及存储介质
CN114760355A (zh) * 2022-03-18 2022-07-15 麒麟软件有限公司 一种Node.js依赖离线管理方法
CN114760355B (zh) * 2022-03-18 2023-09-26 麒麟软件有限公司 一种Node.js依赖离线管理方法
CN116541307A (zh) * 2023-06-29 2023-08-04 云筑信息科技(成都)有限公司 一种对比pom版本的数据处理方法
CN116541307B (zh) * 2023-06-29 2023-10-20 云筑信息科技(成都)有限公司 一种对比pom版本的数据处理方法

Also Published As

Publication number Publication date
CN108228229B (zh) 2021-04-13

Similar Documents

Publication Publication Date Title
CN108228229A (zh) 一种Maven依赖的管理方法以及系统
CA2977042C (en) System and method for generating an effective test data set for testing big data applications
US9177021B2 (en) Relational query planning for non-relational data sources
US20210174006A1 (en) System and method for facilitating complex document drafting and management
US8244768B2 (en) Implementing service oriented architecture industry model repository using semantic web technologies
US20140280287A1 (en) Assisted query formation, validation, and result previewing in a database having a complex schema
US9305176B2 (en) Database generation from a spreadsheet
US11720631B2 (en) Tool to build and store a data model and queries for a graph database
CN108228817A (zh) 数据处理方法、装置和系统
US20160224594A1 (en) Schema Definition Tool
US20140082033A1 (en) Methods and systems for managing files in an on-demand system
US11461333B2 (en) Vertical union of feature-based datasets
US20170154123A1 (en) System and method for processing metadata to determine an object sequence
US9990403B2 (en) System and a method for reasoning and running continuous queries over data streams
US9442718B1 (en) System for assisting in locating changes in source code version control system
Frommhold et al. Towards versioning of arbitrary RDF data
EP3701387A1 (en) System and method for data management
CN115017182A (zh) 一种可视化的数据分析方法及设备
US10949423B2 (en) Operation management device, operation management method, and operation management system
Perot et al. LMDX: Language Model-based Document Information Extraction and Localization
CN113343036B (zh) 基于关键拓扑结构分析的数据血缘关系解析方法和系统
CN115168474A (zh) 一种基于大数据模型的物联中台系统搭建方法
Pandey Investigating community, reliability and usability of cfengine, chef and puppet
US20220050851A1 (en) Enabling dynamic data capture with database objects
CN110309144A (zh) 一种运用redis构建树形数据结构的方法及装置

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
GR01 Patent grant
GR01 Patent grant
PE01 Entry into force of the registration of the contract for pledge of patent right
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: Maven dependent management method and system

Effective date of registration: 20220330

Granted publication date: 20210413

Pledgee: Industrial and Commercial Bank of China Limited Shenzhen Xinian sub branch

Pledgor: SHENZHEN YETUOXUN COMMUNICATION TECHNOLOGY Co.,Ltd.

Registration number: Y2022980003567

PC01 Cancellation of the registration of the contract for pledge of patent right
PC01 Cancellation of the registration of the contract for pledge of patent right

Date of cancellation: 20231106

Granted publication date: 20210413

Pledgee: Industrial and Commercial Bank of China Limited Shenzhen Xinian sub branch

Pledgor: SHENZHEN YETUOXUN COMMUNICATION TECHNOLOGY Co.,Ltd.

Registration number: Y2022980003567