一种增量编译处理方法及装置与流程

文档序号:16665857发布日期:2019-01-18 23:16阅读:265来源:国知局
一种增量编译处理方法及装置与流程

本发明实施例涉及计算机技术领域,尤其涉及一种增量编译处理方法及装置。



背景技术:

随着开发运维一体化(developmentoperations,devops)实践日趋成熟,持续交付在企业中大量应用。持续交付是指通过流水线的对代码进行编译、打包、部署,并获取用户反馈改进该过程,自动化编译是整个持续交付流水线的基础,因此,编译结果的准确性越来越受到关注。

目前流水线主流的编译方式有三种,全量编译、增量编译和人工编译针对一些历史存留的巨石系统,工程代码庞大,模块之间耦合严重,层级关系复杂,若采用全量编译,则耗时过长(持续交付要求整个流水线在5-10分钟内完成,而巨石应用全量编译往往超过30分钟),无法达到持续交付的要求;若采用增量编译,则基于java语言本身编译的特点,如果是删除java文件或修改静态常量,引用该内容的其他java文件不会被重新编译,且引用该内容的class文件不会发生变化,而运行时该部分class文件仍可能被加载,从而导致逻辑错误;若采用人工编译,虽然加快编译发布的速度,但是devops工程师采用文件替换的方式进行人工编译,在这个过程中devops工程师可能会凭借个人经验和业务模块逻辑依赖关系在增量替换文件或目录,同时也存在采用增量编译产生的问题。综上所述,在达到持续交付的要求的前提下,现有技术条件下的编译方法均会大大影响的编译结果的安全性。

因此,如何提出一种方法来提高增量编译的编译结果安全性问题是目前业界亟待解决的重要课题。



技术实现要素:

针对现有技术中的缺陷,本发明实施例提供一种增量编译处理方法及装置。

一方面,本发明实施例提供一种增量编译处理方法,包括:

获取初始编译清单;所述初始编译清单包括删除java文件的文件名称和/或变更java文件的文件名称;

根据所述初始编译清单,获取风险文件清单;所述风险文件清单包括所述删除java文件的文件名称,和/或包括静态常量的变更java文件的文件名称;

根据所述初始编译清单、所述风险文件清单和引用关系缓存列表,获取增量编译清单;

根据所述增量编译清单,进行增量编译处理。

另一方面,本发明实施例提供一种增量编译处理装置,包括:

第一获取单元,用于获取初始编译清单;所述初始编译清单包括删除java文件的文件名称和/或变更java文件的文件名称;

第二获取单元,用于根据所述初始编译清单,获取风险文件清单;所述风险文件清单包括所述删除java文件的文件名称,和/或包括静态常量的变更java文件的文件名称;

第三获取单元,用于根据所述初始编译清单、所述风险文件清单和引用关系缓存列表,获取增量编译清单;

编译单元,用于根据所述增量编译清单,进行增量编译处理。

又一方面,本发明实施例提供一种电子设备,包括处理器、存储器和总线,其中:

所述处理器,通过所述总线与所述存储器进行通信;

所述处理器可以调用存储器中的计算机程序,以执行上述方法的步骤。

再一方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。

本发明实施例提供的增量编译处理方法及装置,通过根据获取到的初始编译清单获取风险文件清单,并根据所述初始编译清单、所述风险文件清单和引用关系缓存列表,获取增量编译清单,从而根据所述增量编译清单进行增量编译处理,提高了编译结果的安全性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的增量编译处理方法的流程示意图;

图2为本发明实施例提供的增量编译处理方法的整体流程示意图;

图3为本发明一实施例提供的增量编译处理装置的结构示意图;

图4为本发明另一实施例提供的增量编译处理装置的结构示意图;

图5为本发明实施例提供的电子设备实体装置结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例提供的增量编译处理方法的流程示意图,如图1所示,本实施例提供一种增量编译处理方法,包括:

s101、获取初始编译清单;所述初始编译清单包括删除java文件的文件名称和/或变更java文件的文件名称;

具体地,增量编译处理装置从源代码管理服务器下载所述初始编译清单,所述初始编译清单包括初始java文件的文件名称,所述初始java文件可以仅包括删除java文件,也可以只包括变更java文件,也可以同时包括所述删除java文件和所述变更java文件,当然,所述初始java文件还可以包括其他类型的java文件,具体可以根据实际情况进行调整,此处不做具体限定。

s102、根据所述初始编译清单,获取风险文件清单;所述风险文件清单包括所述删除java文件的文件名称,和/或包括静态常量的变更java文件的文件名称;

具体地,所述装置对所述初始编译清单进行分析,根据所述初始编译清单包括的初始java文件的文件名称,获取所述初始java文件的操作类型,并根据所述初始java文件的操作类型,获取全部的删除java文件作为风险文件;或者,获取所述变更java文件中包括静态常量的变更java文件作为所述风险文件;或者,获取所述全部的删除java文件和所述变更java文件中包括静态常量的变更java文件作为所述风险文件,并根据所述风险文件生成所述风险文件清单。可以理解的是,所述风险文件也就是可能造成编译业务风险的文件。

s103、根据所述初始编译清单、所述风险文件清单和引用关系缓存列表,获取增量编译清单;

具体地,所述装置根据所述风险文件清单和引用关系缓存列表,获取所述风险文件所引用的java文件作为风险引用java文件,生成风险引用java文件清单,并根据所述风险引用java文件清单与所述初始编译清单,获取增量编译清单。可以理解的是,所述增量编译清单中不仅包括初始java文件的文件名称,而且包括了可能产生业务危险的风险引用java文件的文件名称;所述引用关系缓存列表包括记录各个java文件与其他java文件的应用关系。

s104、根据所述增量编译清单,进行增量编译处理。

具体地,所述装置根据所述增量编译清单中包括的目标java文件的文件名称,获取所述目标java文件,对所述目标java文件进行增量编译,获得目标class文件,并将所述目标class文件进行打包,生成目标jar包,并将所述目标jar包通过流水线部署到应用服务器。

本发明实施例提供的增量编译处理方法,通过根据获取到的初始编译清单获取风险文件清单,并根据所述初始编译清单、所述风险文件清单和引用关系缓存列表,获取增量编译清单,从而根据所述增量编译清单进行增量编译处理,提高了编译结果的安全性。

在上述实施例的基础上,进一步地,所述根据所述增量编译清单,进行增量编译处理,包括:

根据所述增量编译清单获取目标java文件;

对所述目标java文件进行增量编译,获得目标class文件,并将所述目标class文件进行打包,生成目标jar包。

具体地,所述装置根据所述增量编译清单获取其中包括的文件名称,获取所述初始java文件和所述风险引用java文件,作为所述目标java文件,然后,对所述目标java文件进行增量编译,获得所述目标class文件,并将所述目标class文件进行打包,生成目标jar包,并将所述目标jar包通过流水线部署到应用服务器。应当说明的是,所述装置还可以预先设置过滤策略,对所述增量编译清单中包括的所述初始java文件的文件名称和所述风险引用java文件的文件名称按照所述过滤策略进行过滤,将过滤后获得的java文件的文件名称作为所述目标java文件的文件名称;所述过滤规则可以包括路径正则表达式和静态常量判定规则,还可以包括其他过滤规则,具体可以根据实际情况进行调整,此处不做具体限定。

在上述实施例的基础上,进一步地,所述方法还包括:

根据所述目标java文件,获取所述目标java文件对应的目标引用java文件,并根据所述目标java文件和所述目标引用java文件,对所述引用关系缓存列表进行更新;其中,所述目标引用java文件为引用所述目标java文件的java文件;

根据所述目标class文件,获取所述目标class文件对应的目标静态常量,并根据所述目标静态常量对所述静态常量缓存列表进行更新;所述目标静态常量为所述目标class文件包括的静态常量。

具体地,所述装置对所述目标java文件进行解析,通过正则表达式进行过滤,获取引用所述目标java文件的java文件作为所述目标引用java文件,将所述目标java文件与所述目标引用java文件之间的引用关系记录入所述引用关系缓存列表,完成对所述引用关系缓存列表的更新;并且,所述装置对所述目标class文件进行反射处理,获取所述目标class文件包括的静态常量作为所述目标静态常量,并将所述目标静态常量记录入所述静态常量缓存列表,完成对所述静态常量缓存列表的更新。

在上述实施例的基础上,进一步地,所述初始编译清单包括初始java文件的文件名称;相应地,所述根据所述初始编译清单,获取风险文件清单,包括:

根据所述初始java文件的文件名称,获取所述初始java文件的文件操作类型;

根据所述初始java文件的文件操作类型,若判断获知所述初始java文件仅包括所述删除java文件,则将所述删除java文件作为风险文件;

根据所述初始java文件的文件操作类型,若判断获知所述初始java文件仅包括所述变更java文件,则根据所述变更java文件的文件名称和静态常量缓存列表,获取包括静态常量的变更java文件作为所述风险文件;

根据所述初始java文件的文件操作类型,若判断获知所述初始java文件包括所述删除java文件和所述变更java文件,则根据所述变更java文件的文件名称和静态常量缓存列表,获取包括静态常量的变更java文件,并将所述包括静态常量的变更java文件以及所述删除java文件作为所述风险文件;

根据所述风险文件生成风险文件清单。

具体地,所述装置根据所述初始编译清单包括的所述初始java文件的文件名称,获取所述初始java文件的文件操作类型,根据所述初始java文件的文件操作类型,若判断获知所述初始java文件仅包括所述删除java文件,则将全部的所述删除java文件作为风险文件;若判断获知所述初始java文件仅包括所述变更java文件,则根据所述变更java文件的文件名称和静态常量缓存列表,获取包括静态常量的变更java文件作为所述风险文件;若判断获知所述初始java文件同时包括所述删除java文件和所述变更java文件,则根据所述变更java文件的文件名称和静态常量缓存列表,获取包括静态常量的变更java文件,并将所述包括静态常量的变更java文件以及所述删除java文件作为所述风险文件;获取到所述风险文件后,所述装置根据所述风险文件生成风险文件清单。应当说明的是,所述装置在所述静态常量缓存列表中查找所述变更java文件的文件名称,若查找到所述变更java文件的文件名称,则判定所述变更java文件包括所述静态常量,若没有查找到所述变更java文件的文件名称,则判定所述变更java文件不包括所述静态常量。

在上述实施例的基础上,进一步地,所述根据所述初始编译清单、所述风险文件清单和引用关系缓存列表,获取增量编译清单,包括:

根据所述风险文件清单和所述引用关系缓存列表,获取所述风险文件所引用的java文件的文件名称,生成风险引用java文件清单;

将所述初始编译清单与所述风险引用java文件清单进行合并,获得所述增量编译清单。

具体地,所述装置根据所述风险文件清单和所述引用关系缓存列表,通过倒排索引查询所述风险文件所引用的java文件的文件名称,作为所述风险引用java文件的文件名称,并根据所述风险引用java文件的文件名称生成所述风险引用java文件清单,所述装置将所述初始编译清单与所述风险引用java文件清单进行合并,获得所述增量编译清单,也就是说,所述增量编译清单既包括初始java文件的文件名称,也包括了可能产生业务危险的风险引用java文件的文件名称。可以理解的是,所述倒排索引是全文检索情况下某个单词在一个文件或者一组文件中位置关系的映射。

本发明实施例提供的增量编译处理方法,通过根据获取到的初始编译清单获取风险文件清单,并根据所述初始编译清单、所述风险文件清单和引用关系缓存列表,获取增量编译清单,从而根据所述增量编译清单进行增量编译处理,提高了编译结果的安全性。

图2为本发明实施例提供的增量编译处理方法的整体流程示意图,如图2所示,本发明实施例提供的增量编译处理方法具体包括:

s201、获取初始编译清单;所述增量编译处理装置从源代码管理服务器下载所述初始编译清单,所述初始编译清单包括初始java文件的文件名称,所述初始java文件可以仅包括删除java文件,也可以只包括变更java文件,也可以同时包括所述删除java文件和所述变更java文件;然后,执行步骤s202;

s202、获取删除java文件的文件名称;根据所述初始java文件的文件名称获取所述初始java文件的文件操作类型,根据所述初始java文件的文件操作类型,获取删除java文件的文件名称;然后执行步骤s203;

s203、获取变更java文件的文件名称;根据所述初始java文件的文件名称获取所述初始java文件的文件操作类型,根据所述初始java文件的文件操作类型,获取变更java文件的文件名称;然后执行步骤s204;

s204、是否包括静态常量;所述装置在所述静态常量缓存列表中查找所述变更java文件的文件名称,若查找到所述变更java文件的文件名称,则判定所述变更java文件包括所述静态常量,若没有查找到所述变更java文件的文件名称,则判定所述变更java文件不包括所述静态常量;然后执行步骤s205;

s205、获取风险文件清单;所述装置将所述包括静态常量的变更java文件以及所述删除java文件作为所述风险文件,并根据所述风险文件的文件名称生成风险文件清单;然后执行步骤s206;

s206、获取风险引用java文件清单;所述装置根据所述风险文件清单和所述引用关系缓存列表,通过倒排索引查询所述风险文件所引用的java文件的文件名称,作为所述风险引用java文件的文件名称,并根据所述风险引用java文件的文件名称生成所述风险引用java文件清单;然后执行步骤s207;

s207、获取增量编译清单;所述装置将所述初始编译清单与所述风险引用java文件清单进行合并,获得所述增量编译清单;然后执行步骤s208;

s208、进行增量编译处理;所述装置根据所述增量编译清单获取其中包括的所述初始java文件的文件名称和所述风险引用java文件的文件名称,作为所述目标java文件的文件名称,然后,根据所述目标java文件的文件名称获取所述目标java文件,对所述目标java文件进行增量编译,获得所述目标class文件,并将所述目标class文件进行打包,生成目标jar包,并将所述目标jar包通过流水线部署到应用服务器;然后执行步骤s209;

s209、更新引用关系缓存列表;所述装置对所述目标java文件进行解析,通过正则表达式进行过滤,获取引用所述目标java文件的java文件作为所述目标引用java文件,将所述目标java文件与所述目标引用java文件之间的引用关系记录入所述引用关系缓存列表,完成对所述引用关系缓存列表的更新;然后执行步骤s2010;

s2010、更新静态常量缓存列表;所述装置对所述目标class文件进行反射处理,获取所述目标class文件包括的静态常量作为所述目标静态常量,并将所述目标静态常量记录入所述静态常量缓存列表,完成对所述静态常量缓存列表的更新。

本发明实施例提供的增量编译处理方法,通过根据获取到的初始编译清单获取风险文件清单,并根据所述初始编译清单、所述风险文件清单和引用关系缓存列表,获取增量编译清单,从而根据所述增量编译清单进行增量编译处理,提高了编译结果的安全性。

图3为本发明一实施例提供的增量编译处理装置的结构示意图,如图3所示,本发明实施例提供一种增量编译处理装置,包括:第一获取单元301、第二获取单元302、第三获取单元303和编译单元304,其中:

第一获取单元301用于获取初始编译清单;所述初始编译清单包括删除java文件的文件名称和/或变更java文件的文件名称;第二获取单元302用于根据所述初始编译清单,获取风险文件清单;所述风险文件清单包括所述删除java文件的文件名称,和/或包括静态常量的变更java文件的文件名称;第三获取单元303用于根据所述初始编译清单、所述风险文件清单和引用关系缓存列表,获取增量编译清单;编译单元304用于根据所述增量编译清单,进行增量编译处理。

具体地,第一获取单元301从源代码管理服务器下载所述初始编译清单,所述初始编译清单包括初始java文件的文件名称,所述初始java文件可以仅包括删除java文件,也可以只包括变更java文件,也可以同时包括所述删除java文件和所述变更java文件,当然,所述初始java文件还可以包括其他类型的java文件,具体可以根据实际情况进行调整,此处不做具体限定。第二获取单元302对所述初始编译清单进行分析,根据所述初始编译清单包括的初始java文件的文件名称,获取所述初始java文件的操作类型,并根据所述初始java文件的操作类型,获取全部的删除java文件作为风险文件;或者,获取所述变更java文件中包括静态常量的变更java文件作为所述风险文件;或者,获取所述全部的删除java文件和所述变更java文件中包括静态常量的变更java文件作为所述风险文件,并根据所述风险文件生成所述风险文件清单。第三获取单元303根据所述风险文件清单和引用关系缓存列表,获取所述风险文件所引用的java文件作为风险引用java文件,生成风险引用java文件清单,并根据所述风险引用java文件清单与所述初始编译清单,获取增量编译清单。编译单元304根据所述增量编译清单中包括的目标java文件的文件名称,获取所述目标java文件,对所述目标java文件进行增量编译,获得目标class文件,并将所述目标class文件进行打包,生成目标jar包,并将所述目标jar包通过流水线部署到应用服务器。

可以理解的是,所述增量编译清单中不仅包括初始java文件的文件名称,而且包括了可能产生业务危险的风险引用java文件的文件名称;所述引用关系缓存列表包括记录各个java文件与其他java文件的应用关系。可以理解的是,所述风险文件也就是可能造成编译业务风险的文件。

本发明实施例提供的增量编译处理装置,通过根据获取到的初始编译清单获取风险文件清单,并根据所述初始编译清单、所述风险文件清单和引用关系缓存列表,获取增量编译清单,从而根据所述增量编译清单进行增量编译处理,提高了编译结果的安全性。

在上述实施例的基础上,进一步地,编译单元304具体用于:

根据所述增量编译清单获取目标java文件;

对所述目标java文件进行增量编译,获得目标class文件,并将所述目标class文件进行打包,生成目标jar包。

具体地,编译单元304根据所述增量编译清单获取其中包括的文件名称,获取所述初始java文件和所述风险引用java文件,作为所述目标java文件,然后,对所述目标java文件进行增量编译,获得所述目标class文件,并将所述目标class文件进行打包,生成目标jar包,并将所述目标jar包通过流水线部署到应用服务器。应当说明的是,编译单元304还可以预先设置过滤策略,对所述增量编译清单中包括的所述初始java文件的文件名称和所述风险引用java文件的文件名称按照所述过滤策略进行过滤,将过滤后获得的java文件的文件名称作为所述目标java文件的文件名称;所述过滤规则可以包括路径正则表达式和静态常量判定规则,还可以包括其他过滤规则,具体可以根据实际情况进行调整,此处不做具体限定。

在上述实施例的基础上,进一步地,所述初始编译清单包括初始java文件;相应地,图4为本发明另一实施例提供的增量编译处理装置的结构示意图,如图4所示,本发明实施例提供一种增量编译处理装置,所述装置在:第一获取单元401、第二获取单元402、第三获取单元403和编译单元404的基础上,还包括处理单元405,第一获取单元401、第二获取单元402、第三获取单元403和编译单元404与上述实施例中的第一获取单元301、第二获取单元302、第三获取单元303和编译单元304一致,其中,处理单元405用于:

根据所述目标java文件,获取所述目标java文件对应的目标引用java文件,并根据所述目标java文件和所述目标引用java文件,对所述引用关系缓存列表进行更新;其中,所述目标引用java文件为引用所述目标java文件的java文件;

根据所述目标class文件,获取所述目标class文件对应的目标静态常量,并根据所述目标静态常量对所述静态常量缓存列表进行更新;所述目标静态常量为所述目标class文件包括的静态常量。

具体地,处理单元405对所述目标java文件进行解析,通过正则表达式进行过滤,获取引用所述目标java文件的java文件作为所述目标引用java文件,将所述目标java文件与所述目标引用java文件之间的引用关系记录入所述引用关系缓存列表,完成对所述引用关系缓存列表的更新;并且,处理单元405对所述目标class文件进行反射处理,获取所述目标class文件包括的静态常量作为所述目标静态常量,并将所述目标静态常量记录入所述静态常量缓存列表,完成对所述静态常量缓存列表的更新。

本发明实施例提供的增量编译处理装置,通过根据获取到的初始编译清单获取风险文件清单,并根据所述初始编译清单、所述风险文件清单和引用关系缓存列表,获取增量编译清单,从而根据所述增量编译清单进行增量编译处理,提高了编译结果的安全性。

本发明提供的装置的实施例具体可以用于执行上述各方法实施例的处理流程,其功能在此不再赘述,可以参照上述方法实施例的详细描述。

图5为本发明实施例提供的电子设备实体装置结构示意图,如图5所示,该电子设备可以包括:处理器(processor)501、存储器(memory)502和总线503,其中,处理器501,通过总线503与存储器502进行通信。处理器501可以调用存储器502中的计算机程序,以执行如下方法:获取初始编译清单;所述初始编译清单包括删除java文件的文件名称和/或变更java文件的文件名称;根据所述初始编译清单,获取风险文件清单;所述风险文件清单包括所述删除java文件的文件名称,和/或包括静态常量的变更java文件的文件名称;根据所述初始编译清单、所述风险文件清单和引用关系缓存列表,获取增量编译清单;根据所述增量编译清单,进行增量编译处理。

本发明实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:获取初始编译清单;所述初始编译清单包括删除java文件的文件名称和/或变更java文件的文件名称;根据所述初始编译清单,获取风险文件清单;所述风险文件清单包括所述删除java文件的文件名称,和/或包括静态常量的变更java文件的文件名称;根据所述初始编译清单、所述风险文件清单和引用关系缓存列表,获取增量编译清单;根据所述增量编译清单,进行增量编译处理。

本发明实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机程序,所述计算机程序使所述计算机执行上述各方法实施例所提供的方法,例如包括:获取初始编译清单;所述初始编译清单包括删除java文件的文件名称和/或变更java文件的文件名称;根据所述初始编译清单,获取风险文件清单;所述风险文件清单包括所述删除java文件的文件名称,和/或包括静态常量的变更java文件的文件名称;根据所述初始编译清单、所述风险文件清单和引用关系缓存列表,获取增量编译清单;根据所述增量编译清单,进行增量编译处理。

此外,上述的存储器503中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1