CN116414774A - 文件迁移方法、装置、设备及存储介质 - Google Patents
文件迁移方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN116414774A CN116414774A CN202310408783.6A CN202310408783A CN116414774A CN 116414774 A CN116414774 A CN 116414774A CN 202310408783 A CN202310408783 A CN 202310408783A CN 116414774 A CN116414774 A CN 116414774A
- Authority
- CN
- China
- Prior art keywords
- class
- migrated
- file
- target
- item
- 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
- 238000000034 method Methods 0.000 title claims description 74
- 238000013508 migration Methods 0.000 title claims description 72
- 230000005012 migration Effects 0.000 title claims description 72
- 238000010586 diagram Methods 0.000 claims abstract description 70
- 238000013507 mapping Methods 0.000 claims abstract description 38
- 230000001419 dependent effect Effects 0.000 claims description 59
- 238000012545 processing Methods 0.000 claims description 50
- 238000004590 computer program Methods 0.000 claims description 14
- GNFTZDOKVXKIBK-UHFFFAOYSA-N 3-(2-methoxyethoxy)benzohydrazide Chemical compound COCCOC1=CC=CC(C(=O)NN)=C1 GNFTZDOKVXKIBK-UHFFFAOYSA-N 0.000 claims description 6
- 238000004806 packaging method and process Methods 0.000 claims description 6
- YTAHJIFKAKIKAV-XNMGPUDCSA-N [(1R)-3-morpholin-4-yl-1-phenylpropyl] N-[(3S)-2-oxo-5-phenyl-1,3-dihydro-1,4-benzodiazepin-3-yl]carbamate Chemical compound O=C1[C@H](N=C(C2=C(N1)C=CC=C2)C1=CC=CC=C1)NC(O[C@H](CCN1CCOCC1)C1=CC=CC=C1)=O YTAHJIFKAKIKAV-XNMGPUDCSA-N 0.000 claims description 3
- 230000014509 gene expression Effects 0.000 description 14
- 230000008569 process Effects 0.000 description 11
- 238000013461 design Methods 0.000 description 7
- 238000011161 development Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000008676 import Effects 0.000 description 4
- 241000762562 Ernodes Species 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000010276 construction Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000012856 packing Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/11—File system administration, e.g. details of archiving or snapshots
- G06F16/119—Details of migration of file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0643—Management of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/4492—Inheritance
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本申请提供一种文件迁移方法、装置、设备及存储介质,电子设备获取待迁移项目的第一待迁移类,根据待迁移项目的多个配置文件标识以及包含的配置参数,生成映射关系,根据待迁移项目的类型,将第一待迁移类转换成反编译文件,根据第一待迁移类,构建待迁移项目的E‑R图,根据E‑R图以及第一待迁移类对应的反编译文件,确定第一待迁移类依赖的第二待迁移类、目标配置参数以及目标注解文件标识,根据待迁移项目的类型以及映射关系,将第一待迁移类、第二待迁移类、目标注解文件标识对应的目标注解文件、以及目标配置参数对应的目标配置文件迁移至目标项目的存储路径,技术方案提高了文件迁移的完整性和精确度。
Description
技术领域
本申请涉及数据处理技术领域,尤其涉及一种文件迁移方法、装置、设备及存储介质。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(Fintech)转变,原本需要线下处理的金融业务现在可以通过业务系统实现。随着业务需求的不断迭代,业务系统变得越来越庞大,功能也变得越来越复杂。为了保证业务系统的正常使用,对其进行维护和优化是非常有必要的。
目前,为了减小业务系统的复杂度,通常是将业务系统按照功能模块拆分成多个独立的子系统,各子系统间通过超文本传输协议(Hyper Text Transfer Protocol,HTTP)请求或者消息服务总线进行通讯。其中,划分过程涉及代码文件的迁移,主要是电子设备获取开发人员导入的待迁移文件列表中的代码文件,并确定各代码文件依赖的类列表1,将类列表1中的类添加至待迁移文件列表中。进一步的,针对上述类列表1,执行与待迁移文件列表相同的处理,即确定类列表1中的每个类依赖的类列表11,将类列表11中的类添加至待迁移文件列表中,重复执行上述步骤,直到类列表中的类不存在依赖的类或依赖的类也被遍历完时停止,并将待迁移文件列表中的文件迁移至目标项目中。
然而,现有技术存在文件迁移不完整和不精确的问题。
发明内容
本申请提供一种文件迁移方法、装置、设备及存储介质,以解决现有技术存在的文件迁移不完整和不精确的问题。
第一方面,本申请实施例提供一种文件迁移方法,包括:
获取待迁移项目的第一待迁移类;
根据所述待迁移项目的多个配置文件标识以及包含的配置参数,生成映射关系,所述映射关系用于表示配置参数与配置文件标识之间的对应关系;
根据所述待迁移项目的类型,将所述第一待迁移类转换成反编译文件;
根据所述第一待迁移类,构建所述待迁移项目的实体-联系E-R图;其中,所述E-R图包括多个节点,每个节点对应一个类,存在依赖关系的节点相连接,每个节点包括注解列表,所述注解列表包含注解文件标识;
根据所述E-R图以及所述第一待迁移类对应的反编译文件,确定所述第一待迁移类依赖的第二待迁移类,以及编写在所述第一待迁移类对应的反编译文件以及所述第二待迁移类对应的反编译文件中的目标配置参数以及目标注解文件标识;
根据所述待迁移项目的类型以及所述映射关系,将所述第一待迁移类、所述第二待迁移类、所述目标注解文件标识对应的目标注解文件、以及所述目标配置参数对应的目标配置文件迁移至目标项目的存储路径。
在一种具体实施方式中,所述根据所述第一待迁移类,构建所述待迁移项目的E-R图,包括:
步骤a、将第一待迁移类确定为第一待处理类;
步骤b、若所述E-R图中未存在所述第一待处理类对应的节点,则在所述E-R图中建立对应的节点;
步骤c、将所述第一待处理类在所述E-R图中的节点与依赖所述节点的子节点进行连接;
步骤d、根据所述第一待处理类,获取对应的注解列表以及依赖的父类标识;
步骤e、将所述父类标识对应的父类确定为新的第一待处理类;
重复执行步骤b至步骤e,直至每个第一待处理类的父类均在所述E-R图中存在对应的节点,得到所述E-R图。
可选的,所述步骤d,包括:
从所述第一待处理类中提取依赖的父类标识以及注解文件标识;
根据提取的注解文件标识,生成所述注解列表。
可选的,所述E-R图中的节点还包括子类列表和父类列表,所述子类列表包括依赖所述节点的子节点对应的子类标识,所述父类列表包括所述节点依赖的父节点对应的父类标识;
相应的,所述方法还包括:
根据所述E-R图中各节点的连接关系,对各节点对应的父类列表以及子类列表进行更新。
在一种具体实施方式中,所述根据所述E-R图以及所述第一待迁移类对应的反编译文件,确定所述第一待迁移类依赖的第二待迁移类,以及编写在所述第一待迁移类对应的反编译文件以及所述第二待迁移类对应的反编译文件中的目标配置参数以及目标注解文件标识,包括:
步骤f、将第一待迁移类确定为第二待处理类;
步骤g、根据所述E-R图对所述第二待处理类对应的反编译文件进行解析处理,获取依赖的第二待迁移类;
步骤h、对所述第二待处理类对应的反编译文件进行解析处理,获取编写在所述第一待迁移类对应的反编译文件中的目标配置参数以及目标注解文件标识;
步骤i、若所述第二待迁移类属于所述迁移项目,则将所述第二待迁移类确定为新的第二待处理类;
步骤j、根据所述E-R图确定所述第二待处理类对应的父类,将所述父类确定为新的第二待处理类;
重复步骤g至步骤j,直到所有第二待处理类均被解析处理。
可选的,所述步骤h,包括:
对所述第二待处理类对应的反编译文件进行解析处理,获取常量池,所述常量池中包括目标配置参数以及初始标注文件标识;
若通过所述E-R图确定所述第二待处理类对应的标注列表存在与所述初始标注文件标识一致的标识,则将所述初始标注文件标识确定为目标注解文件标识。
在一种具体实施方式中,所述根据所述待迁移项目的类型,将所述第一待迁移类转换成反编译文件,包括:
根据所述待迁移项目的类型,将所述第一待迁移类转换成class文件;
对所述class文件进行反编译,获取对应的反编译文件。
可选的,所述根据所述待迁移项目的类型,将所述第一待迁移类转换成class文件,包括:
若所述第一待迁移类的类型为maven或gradle,则将所述第一待迁移类进行编译、打包及解压处理,获取对应的class文件;
若所述第一待迁移类的类型为java Web,则将所述第一待迁移类进行编译,获取对应的class文件。
可选的,在所述获取待迁移项目的第一待迁移类之后,所述方法还包括:
若所述待迁移项目的类型为maven或gradle,则确定对应的管理文件,所述管理文件包括所述待迁移项目依赖的第一jar包;
对所述管理文件进行解析,确定所述第一jar包对应的第一jar包标识。
可选的,所述步骤g,包括:
根据所述E-R图对所述第二待处理类对应的反编译文件进行解析处理,获取依赖的类;
若所述依赖的类为所述迁移项目中的类,则将所述依赖的类确定为所述第二待迁移类;
若所述依赖的类属于所述第一jar包,则将所述第一jar包确定为待迁移的jar包。
可选的,所述根据所述待迁移项目的类型以及所述映射关系,将所述第一待迁移类、所述第二待迁移类、所述目标注解文件标识对应的目标注解文件、以及所述目标配置参数对应的目标配置文件迁移至目标项目的存储路径,包括:
将所述第一待迁移类和所述第二待迁移类迁移至所述目标项目的存储路径;
根据所述映射关系,将所述目标配置参数对应的目标配置文件迁移至所述目标项目的存储路径;
将所述目标注解文件迁移至所述目标项目的存储路径;
若所述待迁移项目的类型为java Web,则将所述待迁移的jar包迁移至所述目标项目的存储路径;
反之,则根据待迁移的jar包对应的待迁移的jar包标识、第一jar包标识以及jar包依赖树,确定目标jar包,所述目标jar包为所述待迁移项目依赖的jar包,所述jar包依赖树包括多个节点,每个节点对应一个jar包,存在依赖关系的节点相连接;
将所述目标jar包迁移至所述目标项目的存储路径。
可选的,所述根据待迁移的jar包对应的待迁移的jar包标识、第一jar包标识以及jar包依赖树,确定目标jar包,包括:
将所述待迁移的jar包标识与所述第一jar包标识进行匹配;
若匹配成功,则将所述待迁移的jar包确定为所述目标jar包;
反之,则根据所述待迁移的jar包在所述jar包依赖树中确定对应的第一节点;
根据所述第一jar包标识在所述jar包依赖树中确定对应的第二节点;
确定所述jar包依赖树中处于所述第一节点和所述第二节点之间的节点对应的第二jar包;
将所述待迁移的jar包、所述第一jar包以及所述第二jar包,确定为目标jar包。
第二方面,本申请实施例提供一种文件迁移装置,包括:
获取模块,用于获取待迁移项目的第一待迁移类;
第一处理模块,用于根据所述待迁移项目的多个配置文件标识以及包含的配置参数,生成映射关系,所述映射关系用于表示配置参数与配置文件标识之间的对应关系;
第二处理模块,用于根据所述待迁移项目的类型,将所述第一待迁移类转换成反编译文件;
第三处理模块,用于根据所述第一待迁移类,构建所述待迁移项目的E-R图;其中,所述E-R图包括多个节点,每个节点对应一个类,存在依赖关系的节点相连接,每个节点包括注解列表,所述注解列表包含注解文件标识;
第四处理模块,用于根据所述E-R图以及所述第一待迁移类对应的反编译文件,确定所述第一待迁移类依赖的第二待迁移类,以及编写在所述第一待迁移类对应的反编译文件以及所述第二待迁移类对应的反编译文件中的目标配置参数以及目标注解文件标识;
迁移模块,用于根据所述待迁移项目的类型以及所述映射关系,将所述第一待迁移类、所述第二待迁移类、所述目标注解文件标识对应的目标注解文件、以及所述目标配置参数对应的目标配置文件迁移至目标项目的存储路径。
在一种具体实施方式中,所述第三处理模块,具体用于:
步骤a、将第一待迁移类确定为第一待处理类;
步骤b、若所述E-R图中未存在所述第一待处理类对应的节点,则在所述E-R图中建立对应的节点;
步骤c、将所述第一待处理类在所述E-R图中的节点与依赖所述节点的子节点进行连接;
步骤d、根据所述第一待处理类,获取对应的注解列表以及依赖的父类标识;
步骤e、将所述父类标识对应的父类确定为新的第一待处理类;
重复执行步骤b至步骤e,直至每个第一待处理类的父类均在所述E-R图中存在对应的节点,得到所述E-R图。
可选的,所述第三处理模块,具体用于:
从所述第一待处理类中提取依赖的父类标识以及注解文件标识;
根据提取的注解文件标识,生成所述注解列表。
可选的,所述E-R图中的节点还包括子类列表和父类列表,所述子类列表包括依赖所述节点的子节点对应的子类标识,所述父类列表包括所述节点依赖的父节点对应的父类标识;
相应的,所述装置还包括:
第五处理模块,用于根据所述E-R图中各节点的连接关系,对各节点对应的父类列表以及子类列表进行更新。
在一种具体实施方式中,所述第四处理模块,具体用于:
步骤f、将第一待迁移类确定为第二待处理类;
步骤g、根据所述E-R图对所述第二待处理类对应的反编译文件进行解析处理,获取依赖的第二待迁移类;
步骤h、对所述第二待处理类对应的反编译文件进行解析处理,获取编写在所述第一待迁移类对应的反编译文件中的目标配置参数以及目标注解文件标识;
步骤i、若所述第二待迁移类属于所述迁移项目,则将所述第二待迁移类确定为新的第二待处理类;
步骤j、根据所述E-R图确定所述第二待处理类对应的父类,将所述父类确定为新的第二待处理类;
重复步骤g至步骤j,直到所有第二待处理类均被解析处理。
可选的,所述第四处理模块,具体用于:
对所述第二待处理类对应的反编译文件进行解析处理,获取常量池,所述常量池中包括目标配置参数以及初始标注文件标识;
若通过所述E-R图确定所述第二待处理类对应的标注列表存在与所述初始标注文件标识一致的标识,则将所述初始标注文件标识确定为目标注解文件标识。
在一种具体实施方式中,所述第二处理模块,具体用于:
根据所述待迁移项目的类型,将所述第一待迁移类转换成class文件;
对所述class文件进行反编译,获取对应的反编译文件。
可选的,所述第二处理模块,具体用于:
若所述第一待迁移类的类型为maven或gradle,则将所述第一待迁移类进行编译、打包及解压处理,获取对应的class文件;
若所述第一待迁移类的类型为java Web,则将所述第一待迁移类进行编译,获取对应的class文件。
可选的,在所述获取待迁移项目的第一待迁移类之后,所述装置还包括:
第六处理模块,用于若所述待迁移项目的类型为maven或gradle,则确定对应的管理文件,所述管理文件包括所述待迁移项目依赖的第一jar包;
第七处理模块,用于对所述管理文件进行解析,确定所述第一jar包对应的第一jar包标识。
可选的,所述第四处理模块,具体用于:
根据所述E-R图对所述第二待处理类对应的反编译文件进行解析处理,获取依赖的类;
若所述依赖的类为所述迁移项目中的类,则将所述依赖的类确定为所述第二待迁移类;
若所述依赖的类属于所述第一jar包,则将所述第一jar包确定为待迁移的jar包。
可选的,所述迁移模块,具体用于:
将所述第一待迁移类和所述第二待迁移类迁移至所述目标项目的存储路径;
根据所述映射关系,将所述目标配置参数对应的目标配置文件迁移至所述目标项目的存储路径;
将所述目标注解文件迁移至所述目标项目的存储路径;
若所述待迁移项目的类型为java Web,则将所述待迁移的jar包迁移至所述目标项目的存储路径;
反之,则根据待迁移的jar包对应的待迁移的jar包标识、第一jar包标识以及jar包依赖树,确定目标jar包,所述目标jar包为所述待迁移项目依赖的jar包,所述jar包依赖树包括多个节点,每个节点对应一个jar包,存在依赖关系的节点相连接;
将所述目标jar包迁移至所述目标项目的存储路径。
可选的,所述迁移模块,具体用于:
将所述待迁移的jar包标识与所述第一jar包标识进行匹配;
若匹配成功,则将所述待迁移的jar包确定为所述目标jar包;
反之,则根据所述待迁移的jar包在所述jar包依赖树中确定对应的第一节点;
根据所述第一jar包标识在所述jar包依赖树中确定对应的第二节点;
确定所述jar包依赖树中处于所述第一节点和所述第二节点之间的节点对应的第二jar包;
将所述待迁移的jar包、所述第一jar包以及所述第二jar包,确定为目标jar包。
第三方面,本申请实施例提供一种电子设备,包括:处理器、存储器及存储在所述存储器上并可在处理器上运行的计算机程序指令,所述处理器执行所述计算机程序指令时用于实现第一方面以及各可能设计提供的方法。
第四方面,本申请实施例可提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现第一方面以及各可能设计提供的方法。
第五方面,本申请实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时用于实现第一方面以及各可能设计提供的方法。
本申请实施例提供的文件迁移方法、装置、设备及存储介质,电子设备获取待迁移项目的第一待迁移类,根据待迁移项目的多个配置文件标识以及包含的配置参数,生成映射关系,根据待迁移项目的类型,将第一待迁移类转换成反编译文件,根据第一待迁移类,构建待迁移项目的E-R图,根据E-R图以及第一待迁移类对应的反编译文件,确定第一待迁移类依赖的第二待迁移类,以及编写在第一待迁移类对应的反编译文件以及第二待迁移类对应的反编译文件中的目标配置参数以及目标注解文件标识,根据待迁移项目的类型以及映射关系,将第一待迁移类、第二待迁移类、目标注解文件标识对应的目标注解文件、以及目标配置参数对应的目标配置文件迁移至目标项目的存储路径。本技术方案通过对第一待迁移类进行简单语法分析,确定待迁移项目中各类的继承关系,之后解析第一待迁移类的反编译文件,从而确定出所有的待迁移类(第一待迁移类和第二待迁移类)以及用于实现项目的相关属性,提高了文件迁移的完整性和精确度。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请实施例提供的文件迁移方法实施例一的流程示意图;
图2为本申请实施例提供的文件迁移方法实施例二的流程示意图;
图3为本申请实施例提供的文件迁移方法实施例三的流程示意图;
图4为本申请实施例提供的文件迁移方法实施例四的流程示意图;
图5为本申请实施例提供的文件迁移方法实施例五的流程示意图;
图6为本申请实施例提供的weabs-bpmcore目录的结构示意图;
图7为本申请实施例提供的E-R图的结构示意图;
图8为本申请实施例提供的文件迁移装置的结构示意图;
图9为本申请实施例提供的电子设备的结构示意图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在介绍本申请的实施例之前,首先对本申请实施例涉及的名词进行解释:
Java虚拟机(Java Virtual Machine,JVM):一种抽象的计算机,与真正的计算机一样,它有一个指令集并在运行时操纵各种内存区域。
maven:项目管理工具,可以对Java项目进行自动化的构建和依赖管理。
gradle:基于JVM的构建工具,是一款通用灵活的构建工具,支持maven,Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。
Java开发工具包(Java Development Kit,JDK):是使用Java编程语言构建应用程序等的开发环境。
class文件:由Java虚拟机执行的编译代码使用独立于硬件和操作系统的二进制格式表示,通常(但不一定)存储在文件中,称为class文件格式。class文件中包含Java虚拟机指令(或字节码)和符号表,以及其他辅助信息。
反编译:是指将可执行的(准备运行的)程序代码(也称为目标代码)转换为某种形式的高级编程语言,使其具有更易读的格式,本申请所指的反编译为对class文件进行转换。
jar包:将Java工程的.java文件编译为.class文件后,将.class文件及其他配置文件压缩为后缀为.jar的压缩包,可在其他Java工程中直接使用相关代码的功能。
war包:与jar包的格式类似,但war包通常用于Web项目,其中通常还包含Web项目中使用的超文本标记语言(Hyper Text Markup Language,HTML)等静态资源文件,可在Java Servlet容器中进行部署并提供Web服务功能。
Mybatis:一种持久层框架,支持定制化结构化查询语言(Structured QueryLanguage,SQL)、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的可扩展标记语言(Extensible MarkupLanguage,XML)或注解来配置和映射原生信息,将接口和普通的Java对象(Plain OrdinaryJava Object,POJOs)映射成数据库中的记录。
接下来,对本申请实施例的应用背景进行解释:
随着业务需求的不断迭代,业务系统变得越来越庞大,功能变得越来越复杂。复杂的业务系统不利于维护与优化,业界对此的做法是将业务系统按功能模块划分,拆分成多个独立的子系统,通过HTTP请求或者消息服务总线进行子系统间的通讯。拆分的过程中涉及代码文件的迁移,目前已有的代码文件迁移工具操作流程如下:
步骤1、开发人员导入待迁移文件列表中的代码文件。
步骤2、通过正则表达式匹配^[import](.*;)确定各代码文件依赖的类列表1,将类列表1中的类添加至待迁移文件列表中。
步骤3、针对上述类列表1,执行与待迁移文件列表相同的处理,即通过正则表达式匹配^[import](.*;)确定类列表1中的每个类依赖的类列表11,将类列表11中的类添加至待迁移文件列表中。
重复执行上述步骤,即通过正则表达式匹配^[import](.*;)确定类列表11中的每个类依赖的类列表111,将类列表111中的类添加至待迁移文件列表中;通过正则表达式匹配^[import](.*;)确定类列表111中的每个类依赖的类列表1111,将类列表1111中的类添加至待迁移文件列表中。直到类列表中的类不存在依赖的类或依赖的类也被遍历完时停止,并将待迁移文件列表中的文件迁移至目标项目中。
然而,现有技术存在以下技术问题:
1、对开发人员代码编写规范依赖性强,在特殊情况下无法做到精准迁移具体的类,比如当出现import com.test.dto.*时,工具无法识别具体引用的类,会将dto包下所有的类一起迁移,导致迁移列表出现冗余。
2、无法迁移项目相关的配置。
3、对目前java的主流框架不支持,比如Mybatis框架,当项目引入了Mybatis框架,迁移代码时需要对Mybatis的相关配置文件一起迁移。
综上所述,现有技术存在文件迁移不完整和不精确的问题。
基于上述技术问题,本申请的发明构思如下:
通过对第一待迁移类做语法分析,得到类的继承关系以及类的相关属性(例如注解文件标识等),来构建实体-联系(Entity-Relationship,E-R)图。之后,解析第一待迁移类对应的反编译文件,得到依赖的第二待迁移类。由于反编译文件格式固定,因此对比解析源文件会更高效和准确,通过将对第一待迁移类做语法分析与解析第一待迁移类对应的反编译文件进行结合,替换原有工具正则表达式的解析方案,能够做到迁移的完整性和准确性。同时,考虑到类的某些字段值可能是引用某个配置文件的配置参数,如果仅仅对第一待迁移类以及第二待迁移类进行迁移,新项目会出现因缺少依赖而无法正常启动。本申请将第一待迁移类以及第二待迁移类中的目标配置参数对应的目标配置文件一起进行迁移,进一步的增加了迁移的完整性和准确性。
下面,通过具体实施例对本申请的技术方案进行详细说明。
需要说明的是,下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
图1为本申请实施例提供的文件迁移方法实施例一的流程示意图。如图1所示,该文件迁移方法应用于电子设备,该电子设备可以为终端设备,也可以为服务器。该文件迁移方法可以包括如下步骤:
S101、获取待迁移项目的第一待迁移类。
在本步骤中,在将业务系统按照功能模块进行拆分时,是以项目为单位进行的。也就是说,需要先确定需要迁移的项目(也就是待迁移项目),从而确定待迁移项目中的第一待迁移类。其中,第一待迁移类即为待迁移的代码文件。
在一种可能的实现方式中,电子设备通过显示器为用户显示各项目所在的目录以及各项目包含的类。在实际应用中,用户可以根据实际需求通过上述显示器选择待迁移项目以及该待迁移项目中的第一待迁移类。相应的,电子设备则响应用户的操作,获取待迁移项目的第一待迁移类。
可选的,第一待迁移类包括全限定类名。
S102、根据待迁移项目的多个配置文件标识以及包含的配置参数,生成映射关系。
在本步骤中,由于后续需要根据类中的配置参数,确定该类引用的配置文件,因此需要建立配置参数与配置文件标识之间的对应关系,从而根据配置文件标识确定对应的配置文件。
其中,映射关系用于表示配置参数与配置文件标识之间的对应关系。
在一种可能的实现方式中,配置文件可以为properties文件、yml文件、xml文件,电子设备读取待迁移项目目录下的配置文件,利用JDK的Properties类或者XML解析类将上述配置文件加载到内存中,从而获取上述映射关系。这样,在后续解析反编译文件的过程中遇到类似${xxx.filepath}格式的字段值时,可以去上述映射关系中确定其对应的配置文件标识,从而确定该配置文件标识对应的配置文件,以便后续在迁移时将该配置文件一并迁移,保证项目的正常启动。
S103、根据待迁移项目的类型,将第一待迁移类转换成反编译文件。
在本步骤中,由于java编程语言的特性,无法通过父类找到其子类,因此只有解析项目中的所有java类才能确定与其相关联的类。而直接对第一待迁移类进行全文语法分析时,需要对每一行java代码进行语法分析,效率极低。而反编译文件格式固定,无需进行语法分析,只需要解析反编译文件中“constant pool”部分代码,代码行数少,能够大幅提升效率。因此,需要将第一待迁移类转换成反编译文件。
在一种可能的实现方式中,可以根据待迁移项目的类型,将第一待迁移类转换成class文件,之后对class文件进行反编译,获取对应的反编译文件。
应理解,本步骤的实现原理和过程可以参照图2所示实施例,此处不再赘述。
S104、根据第一待迁移类,构建待迁移项目的E-R图。
在本步骤中,在第一待迁移类较少的场景中,需要解析待迁移项目中所有的反编译文件,来获取第一待迁移类依赖的第二待迁移类以及相关配置,存在解析冗余的问题。在解析反编译文件之前,可利用简单的语法分析确定待迁移项目类中各类的父子关系,构建待迁移项目的E-R图,以使后续只需要根据该E-R图确定与第一待迁移类存在依赖关系的类,只对该类的反编译文件进行解析即可,有效的提高了处理效率。也就是说,需要对第一待迁移类进行简单的语法分析,从而构建待迁移项目的E-R图。
其中,E-R图包括多个节点,每个节点对应一个类,存在依赖关系的节点相连接,每个节点包括注解列表,注解列表包含注解文件标识。
在一种可能的实现方式中,S104可以通过下述步骤a至步骤e实现:
步骤a、将第一待迁移类确定为第一待处理类。
步骤b、若E-R图中未存在第一待处理类对应的节点,则在E-R图中建立对应的节点。
步骤c、将第一待处理类在E-R图中的节点与依赖节点的子节点进行连接。
步骤d、根据第一待处理类,获取对应的注解列表以及依赖的父类标识。
其中,电子设备从第一待处理类中提取依赖的父类标识以及注解文件标识,根据提取的注解文件标识,生成注解列表,以使后续可以快速定位与类相关的注解文件。
步骤e、将父类标识对应的父类确定为新的第一待处理类。
重复执行步骤b至步骤e,直至每个第一待处理类的父类均在E-R图中存在对应的节点,得到E-R图。
可选的,E-R图中的节点还包括子类列表和父类列表,子类列表包括依赖节点的子节点对应的子类标识,父类列表包括节点依赖的父节点对应的父类标识。在构建待迁移项目的E-R图时,还可以根据E-R图中各节点的连接关系,对各节点对应的父类列表以及子类列表进行更新,以便于后续根据父类列表确定该类依赖的类,以及根据子类列表确定依赖该类的类,无需去E-R图中进行遍历,从而提高处理效率。
在该实现方式中,通过对第一待迁移类进行简单的语法分析从而构建E-R图,以便后续只需要对第一待迁移类存在依赖关系的类的反编译文件进行解析即可,有效的提高了处理效率。
S105、根据E-R图以及第一待迁移类对应的反编译文件,确定第一待迁移类依赖的第二待迁移类,以及编写在第一待迁移类对应的反编译文件以及第二待迁移类对应的反编译文件中的目标配置参数以及目标注解文件标识。
在本步骤中,在得到E-R图后,可以利用该E-R图表示的待迁移项目中各类的继承关系,确定第一待迁移类依赖的第二待迁移类。之后,读取第一待迁移类对应的反编译文件以及第二待迁移类对应的反编译文件中“constant pool”部分代码,从而获取目标配置参数以及目标注解文件标识。
在一种可能的实现方式中,S105可以通过一下步骤f至步骤j实现:
步骤f、将第一待迁移类确定为第二待处理类。
步骤g、根据E-R图对第二待处理类对应的反编译文件进行解析处理,获取依赖的第二待迁移类。
步骤h、对第二待处理类对应的反编译文件进行解析处理,获取编写在第一待迁移类对应的反编译文件中的目标配置参数以及目标注解文件标识。
其中,对第二待处理类对应的反编译文件进行解析处理,获取常量池(constantpool),常量池中包括目标配置参数以及初始标注文件标识。若通过E-R图确定第二待处理类对应的标注列表存在与初始标注文件标识一致的标识,则将初始标注文件标识确定为目标注解文件标识,从而确定第二待处理类引入的注解文件,提高迁移的完整性。
步骤i、若第二待迁移类属于迁移项目,则将第二待迁移类确定为新的第二待处理类。
步骤j、根据E-R图确定第二待处理类对应的父类,将父类确定为新的第二待处理类。
重复步骤g至步骤j,直到所有第二待处理类均被解析处理。
在上述实现方式中,只需要解析反编译文件中“constant pool”部分代码,即可确定第一待迁移类依赖的第二待迁移类,以及待迁移项目相关的配置,有效提高了处理效率。
S106、根据待迁移项目的类型以及映射关系,将第一待迁移类、第二待迁移类、目标注解文件标识对应的目标注解文件、以及目标配置参数对应的目标配置文件迁移至目标项目的存储路径。
在本步骤中,在确定出第一待迁移类、第二待迁移类、目标配置参数以及目标注解文件标识后,需要根据目标配置参数以及上述映射关系,确定目标配置参数对应的目标配置文件。同时,根据目标注解文件标识确定对应的目标注解文件,最后待迁移项目的类型,将第一待迁移类、第二待迁移类、目标配置文件和目标注解文件迁移至目标项目的存储路径。
应理解,本步骤的实现原理和方式可以参照图4所示实施例,此处不再赘述。
本申请实施例提供的文件迁移方法,电子设备获取待迁移项目的第一待迁移类,根据待迁移项目的多个配置文件标识以及包含的配置参数,生成映射关系,根据待迁移项目的类型,将第一待迁移类转换成反编译文件,根据第一待迁移类,构建待迁移项目的实体-联系E-R图,根据E-R图以及第一待迁移类对应的反编译文件,确定第一待迁移类依赖的第二待迁移类,以及编写在第一待迁移类对应的反编译文件以及第二待迁移类对应的反编译文件中的目标配置参数以及目标注解文件标识,根据待迁移项目的类型以及映射关系,将第一待迁移类、第二待迁移类、目标注解文件标识对应的目标注解文件、以及目标配置参数对应的目标配置文件迁移至目标项目的存储路径。本技术方案通过对第一待迁移类进行简单语法分析,确定待迁移项目中各类的继承关系,之后解析第一待迁移类的反编译文件,从而确定出所有的待迁移类(第一待迁移类和第二待迁移类)以及用于实现项目的相关属性,提高了文件迁移的完整性和精确度。
在图1所示实施例的基础上,图2为本申请实施例提供的文件迁移方法实施例二的流程示意图。如图2所示,该文件迁移方法可以包括如下步骤:
S201、根据待迁移项目的类型,将第一待迁移类转换成class文件。
在本步骤中,不同类型的项目转化成class文件的方式不同,因此需要先确定待迁移项目的类型,根据该类型确定将待迁移项目转换成class文件的处理语句,执行该处理语句将待迁移项目中的第一待迁移类转换成class文件。
在一种可能的实现方式中,若第一待迁移类的类型为maven或gradle,则将第一待迁移类进行编译、打包及解压处理,获取对应的class文件。若第一待迁移类的类型为javaWeb,则将第一待迁移类进行编译,获取对应的class文件。
示例性的,maven项目执行mvn package命令将第一待迁移类编译并打成一个war包,打包完成后对war包进行解压,获取对应的class文件;gradle项目执行gradle war命令将第一待迁移类编译并打成一个war包,打包完成后对war包进行解压,获取对应的class文件;javaWeb项目执行“javac src\com\*.java–d\WEB-INF\classes–encoding utf-8”命令将第一待迁移类编译进行编译,获取对应的class文件。可选的,在编译得到class文件后,还可以将编译得到的class文件输出到\WEB-INF\classes目录下。
S202、对class文件进行反编译,获取对应的反编译文件。
在本步骤中,在获取第一待迁移类对应的class文件后,需要对其进行反编译从而获取对应的反编译文件。
示例性的,进入\WEB-INF\classes目录,对目录下的class的文件执行反编译语句“javap–v–p xxx.class>xxx.txt”,得到class对应的反编译文件。
在上述实施例中,将第一待迁移类转换成反编译文件,为后续根据反编译文件确定第二待迁移类、目标配置参数以及目标注解文件标识奠定了基础。
在图2所示实施例的基础上,图3为本申请实施例提供的文件迁移方法实施例三的流程示意图。如图3所示,在S101之后,该文件迁移方法还可以包括如下步骤:
S301、若待迁移项目的类型为maven或gradle,则确定对应的管理文件。
在本步骤中,在对待迁移项目的相关数据进行迁移时,需要把其依赖的jar包一并迁移,否则项目将会编译失败。由于管理文件中预先写有该项目对应的jar包依赖脚本,也就是说,管理文件包括待迁移项目依赖的第一jar包,且有的项目类型有管理文件,有的项目类型没有管理文件,因此首先需要根据待迁移项目的类型,确定其是否存在对应的管理文件。
示例性的,pom.xml为maven项目的管理文件,build.gradle为gradle项目的管理文件,javaWeb项目无项目管理文件。
S302、对管理文件进行解析,确定第一jar包对应的第一jar包标识。
在本步骤中,由于管理文件包括待迁移项目依赖的第一jar包,因此需要对其进行解析,从而获取第一jar包对应的第一jar包标识。
可选的,该第一jar包标识可以为第一jar包的全限定类名。
示例性的,针对maven项目,解析其对应的pom.xml,逐行读取pom.xml文件内容,先匹配<dependencies>标签,然后再逐一匹配下面的<dependency>标签,直到匹配到</dependencies>标签,文件解析完毕,得到maven项目所依赖的jar包列表。其中,jar包列表中包括第一jar包对应的第一jar包标识。
示例性的,针对gradle项目,解析build.gradle文件,匹配dependencies关键字,逐一读取花括号中依赖包名,得到gradle项目所依赖的jar包列表。其中,jar包列表中包括第一jar包对应的第一jar包标识。
进一步的,在S202之后,还可以对第一jar包进行逐个解压,进入解压后的目录,通过文件夹路径可以得到jar包所属的groupId,通过读取META-INF目录下的MANIFEST.MF文件可以得到jar包的版本号,通过正则表达式匹配jar包文件名可以得到jar包的artifactid,上述groupId、版本号以及artifactid即为第一jar包的jar包信息。
示例性的,第一jar包的jar包信息结构可以如下表示:
public class JarInfo{
/**Jar包名称**/
private String name;
/**groupId**/
private String groupId;
/**artifactid**/
private String artifactId;
/**版本号**/
private String version;
}
在该实施例中,步骤g可以通过以下步骤(1)至步骤(3)实现:
步骤(1)、根据E-R图对第二待处理类对应的反编译文件进行解析处理,获取依赖的类。
步骤(2)、若依赖的类为迁移项目中的类,则将依赖的类确定为第二待迁移类。
步骤(3)、若依赖的类属于第一jar包,则将第一jar包确定为待迁移的jar包。
在上述实施例中,考虑到jar包对项目的重要性,在对项目进行迁移之前,确定项目依赖的jar包,以便后续同时将该项目的jar包进行同步迁移,保证了迁移后的项目的正常编译,进一步提高了迁移的完整性和准确性。
在上述任一实施例的基础上,图4为本申请实施例提供的文件迁移方法实施例四的流程示意图。如图4所示,S106可以包括如下步骤:
S401、将第一待迁移类和第二待迁移类迁移至目标项目的存储路径。
S402、根据映射关系,将目标配置参数对应的目标配置文件迁移至目标项目的存储路径。
在本步骤中,可以根据目标配置参数以及上述映射关系,确定该目标配置参数对应的目标配置文件标识,根据该目标配置文件标识确定对应的目标配置文件,并从该目标配置文件中确定出该目标配置参数相关的配置代码,将该配置代码写入目标项目的存储路径中对应的文件。
S403、将目标注解文件迁移至目标项目的存储路径。
S4041、若待迁移项目的类型为java Web,则将待迁移的jar包迁移至目标项目的存储路径。
S4042、反之,则根据待迁移的jar包对应的待迁移的jar包标识、第一jar包标识以及jar包依赖树,确定目标jar包。
在本步骤中,将待迁移的jar包标识与第一jar包标识进行匹配,若二者相同,则说明待迁移的jar包是项目所需的jar包,将该引入代码确定为目标jar包,并根据不同的项目属性生成该待迁移的jar包的引入代码。反之,若二者不同,则说明待迁移的jar包被其他jar包所依赖,需要执行“mvn dependency:tree”命令获取该待迁移项目的jar包依赖树,找到待迁移的jar包在依赖树中节点,并向上找到其父节点,直到确定出终止节点,该终止节点为jar包依赖树的根节点或者父节点为第一jar包对应的节点,将待迁移的jar对应的节点至终止节点之间的节点对应的jar包确定为目标jar包。
其中,目标jar包为待迁移项目依赖的jar包,jar包依赖树包括多个节点,每个节点对应一个jar包,存在依赖关系的节点相连接。
在一种可能的实现方式中,S4042可以通过以下步骤(4)至步骤(9)实现:
步骤(4)、将待迁移的jar包标识与第一jar包标识进行匹配。
步骤(5)、若匹配成功,则将待迁移的jar包确定为目标jar包。
步骤(6)、反之,则根据待迁移的jar包在jar包依赖树中确定对应的第一节点。
步骤(7)、根据第一jar包标识在jar包依赖树中确定对应的第二节点。
步骤(8)、确定jar包依赖树中处于第一节点和第二节点之间的节点对应的第二jar包。
步骤(9)、将待迁移的jar包、第一jar包以及第二jar包,确定为目标jar包。
S4052、将目标jar包迁移至目标项目的存储路径。
在上述实施例中,将第一待迁移类、该第一待迁移类依赖的第二待迁移类、以及待迁移项目依赖的配置文件、注解文件以及jar包迁移至目标项目的存储路径。
可选的,在迁移结束之后,还可以删除第一待迁移类,并从E-R图中确定第一待迁移类的节点,遍历其父类列表,将父类对应的节点的入度减1。当入度为0,表示该类没有被任何类所依赖,则从原项目中将该类删除。
基于上述任一实施例所示的文件迁移方法,接下来通过三个具体的示例,分别对本申请进行举例解释说明。
示例一、基于图2所示实施例,图5为本申请实施例提供的文件迁移方法实施例五的流程示意图。如图5所示,该文件迁移方法包括如下步骤:
对第一待迁移类进行简单的语法分析,先查找是否已在E-R中创建节点,若没有,则根据该第一待迁移类的全限定类名创建节点。进一步的,逐行读取第一待迁移类,利用正则表达式匹配^[import](.*;),得到依赖的类列表。当遇到以“@”符号开头时,利用正则表达式^[@][A-Za-z]+[\(|\n]截取第一待迁移类的注解名称(也就是注解文件标识),并添加到注解列表。当注解匹配完后,继续按行读取,查找是否存在当前文件名,若能找到,匹配文件名后的非空字符。如果匹配到“extend”关键字,后面接着的便是该第一待迁移类继承的父类,得到父类名后去依赖的类列表中查找,若找到则将父类的全限定类名确定为父类标识,并添加到依赖的父类列表中;若找不到则说明父类与该第一待迁移类在同一个包下,将该第一待迁移类的路径加父类名称作为父类标识,并添加到依赖的父类列表中。继续向后匹配,如果匹配到“implement”关键字,截取从“implement”关键字后的第一个字符到“{”之间的字符串,用逗号分隔截取的字符串得到字符串数组,然后遍历字符串数组,与父类匹配全限定类名方式一样,将类名添加到父类列表中。继续往下读取第一待迁移类,通过正则表达式[@][A-Za-z]+匹配第一待迁移类中的注解文件标识,将匹配到的注解文件标识添加到注解列表中,通过正则表达式[@][A-Za-z]+匹配类中的注解文件标识,将匹配到的注解文件标识添加到注解列表中,至此,第一待迁移类解析完毕。
进一步的,遍历父类列表,针对父类列表中的任一父类标识对应的父类,将该父类确定为第一待处理类,判断E-R图中是否存在对应的节点,若没有则先建立对应的节点,并将第一待迁移类的标识添加至该节点的子类列表中。对第一待处理类重复执行对第一待迁移类执行的操作,直到每个第一待处理类的父类均在E-R图中存在对应的节点,从而构建完成E-R图。
应理解,本申请实施例的依赖的类列表在构建完E-R图后就失效了。
可选的,E-R图的节点结构可以通过如下表示:
public class ERNode{
/**节点名称**/
private String nodeName;
/**父类列表**/
private List<ERNode>parentNodeList;
/**子类列表**/
private List<ERNode>childNodeList;
/**依赖的类列表**/
private List<String>refList;
/**注解列表**/
private List<String>annotationList;
/**入度**/
private Integer inCount;
/**出度**/
private Integer outCount;
}
示例二、基于图1所示实施例,S105可以包括如下步骤:
逐行读取第一待迁移类的反编译文件,当读取到“Constant pool:”关键字时,表示这是该第一待迁移类的常量池,接下来的是该第一待迁移类所依赖的类、常量、方法等。继续往下读取,当读取到“Class”时,表示这是该第一待迁移类所依赖的类,截取“//”后的字符串,得到了依赖类的全限定类名。根据依赖类的全限定类名进行判断,当路径是以“java”开头的,说明这是JDK中的类,不作处理;当路径是项目路径开头的,说明这是项目中类,将其确定为第一待迁移类依赖的第二待迁移类,添加至依赖类列表,去E-R图中找到对应的节点,将其入度加1;若不属于以上两种情况,说明该类为jar包中的类,去\WEB-INF\lib目录下找到类路径一致的class文件,找到后将该jar包确定为待迁移的jar包。当读取到“#1047=Utf8${xxx.filepath}”格式的行数据时,代表引入了配置文件的配置参数,将该配置参数确定为目标配置参数。当读取到“#628=Utf8 Lorg/springframework/web/bind/annotation/RestController;”格式的行数据时,截取最后一个“/”后面的字符,与第一待迁移类的注解列表进行匹配,匹配成功说明为该第一待迁移类所引入的注解文件标识,截取字符“L”后面的字符作为注解文件全限定类名,其处理方式如上面处理依赖类一样。当读取到某行数据不是以“#数字”开头的,表示常量池遍历结束,该反编译解析也随之结束。
接着是遍历该第一待迁移类的父类列表和依赖类列表,解析其对应的反编译文件,具体解析过程可以参考第一待迁移类的解析过程。当某类为抽象或接口时,解析完该类的反编译后,还需找到E-R图中该类对应的节点,解析其子类列表的反编译文件,并将该子类确定为第三待迁移类,若该类为接口且子类列表为空,遍历项目的xml文件,查找是否存在包含“<mapper namespace="全限定类名">”字符串的xml文件,找到则表示该接口为Mybatis框架接口,同时将该xml文件确定为待迁移xml文件中。若不存在这样的xml文件,说明使用了JDK动态代理,无需特殊处理。
应理解,第三待迁移类以及待迁移xml文件后续均需要跟随待迁移项目的其他相关数据(例如第一待迁移类、第二待迁移类、目标配置文件、目标jar包、目标注解文件等)同步迁移。
应理解,本实施例中的依赖类列表与图5所示实施例中的依赖的类列表不为同一个,图5中涉及的依赖的类列表在构建完E-R图后就失效了,本实施例的过程是在构建完E-R图后进行的。
本申请实施例中,由于反编译文件格式固定,因此解析效率极高。同时,在解析反编译文件时,梳理了类的继承关系,在第一待迁移类或第二待迁移类是接口或抽象类时,对其实现类也一并迁移;假设第一待迁移类或第二待迁移类是子类,对其父类也一并迁移,进一步提高了迁移的准确性和完整性。
示例三、WEABS-BPMCORE项目代码迁移到WEABS-ADMIN项目。
1、获取待迁移项目的第一待迁移类,待迁移项目的第一待迁移类的全限定类名为cn.webank.abs.adm.controller.AssetPoolController。
2、待迁移项目的管理文件为项目根目录下的build.gradle文件,因此WEABS-BPMCORE项目为gradle项目。
3、解析build.gradle文件的dependencies标签,得到项目所依赖的第一jar包。
4、加载项目配置文件,利用JDK的Properties类或者XML解析类加载项目中的application.properties文件、applicationContext.xml文件、rmb-client.propertis文件、weup-client.properties文件、sso-client.properties文件等,得到配置参数与配置文件标识之间的映射关系。如“thread.corePoolSize”该配置项对应的文件是application.properties,当后续迁移文件列表中存在使用该参数的文件时,将application.properties文件中该参数的内容一并迁移到WEABS-ADMIN项目中。
5、对待迁移项目的第一待迁移类进行编译和打包,获取class文件。由于WEABS-BPMCORE是gradle项目,因此执行gradle war命令将项目编译并打成一个war包得到weabs-bpmcore.war文件(也就是class文件),对weabs-bpmcore.war进行解压,得到weabs-bpmcore目录。
示例性的,weabs-bpmcore目录可以如图6所示。图6为本申请实施例提供的weabs-bpmcore目录的结构示意图。如图6所示,weabs-bpmcore目录包括config、css、js、lib和WEB-INF,WEB-INF目录下包括class、ftl以及lib。
6、对class文件进行编译,获取第一待迁移类对应的反编译文件。进入WEB-INF\class目录,对目录下的所有class文件执行反编译语句“javap–v–p xxx.class>xxx.txt”,得到class文件对应的反编译文件。反编译完成后,进入\WEB-INF\lib目录,对目录下的所有jar包(也就是第一jar包)逐个解压,进入解压后的目录,通过文件夹路径可以得到jar包所属的groupId,通过读取META-INF目录下的MANIFEST.MF文件可以得到jar包的版本号,通过正则表达式匹配jar包文件名可以得到jar包的artifactid,上述groupId、版本号以及artifactid即为第一jar包的jar包信息。
7、对WEABS-BPMCORE项目中的所有java文件(也就是第一jar包)做简单的语法分析,构建weabs-bpmcore项目的E-R图。以AssetPoolController.java文件举例,先查找是否已在E-R中创建节点,没有则以全限定类名创建节点。接着逐行读取AssetPoolController.java文件,利用正则表达式匹配^[import](.*;),得到依赖的类列表,依赖的类包括:cn.webank.abs.adm.service.AbsAssetsPoolService、cn.webank.abs.adm.base.AbsException、cn.webank.abs.adm.base.ConstantCode、cn.webank.abs.adm.controller.base.BaseController等。当遇到以“@”符号开头时,利用正则表达式^[@][A-Za-z]+[\(|\n]截取类的注解名称(也就是注解文件标识),AssetPoolController中的类注解名称包括RestController、RequestMapping。当注解匹配完后,继续按行读取,下一行中的包含“AssetPoolController”,匹配“AssetPoolController”后面的非空字符。匹配到“extend”关键字,后面接着的便是该类继承的父类“BaseController”,得到父类名后去依赖的类列表中查找,发现父类名存在于依赖的类列表中,则将父类的全限定类名添加到依赖的父类列表中,并从依赖的类列表中删除。继续往下读取文件,通过正则表达式[@][A-Za-z]+匹配类中的注解文件标识,将匹配到的注解文件表标识添加到注解列表中。
图7为本申请实施例提供的E-R图的结构示意图。如图7所示,该E-R图包括4个节点,分别为节点1、节点2、节点3、节点4,每个节点均包含节点名称、父类列表、依赖的类列表以及入度。
其中,依赖的类列表在构建好E-R图后失效。
8、解析WEB-INF\classes目录的AssetpoolController的反编译文件。读取“Constant pool”后面的代码,当读取到“#2=Class#631//java/util/ArrayList”该行时,表示这是该类所依赖的类,截取“//”后的字符串,得到了依赖类的全限定类名“java/util/ArrayList”。根据类名进行判断,路径是以“java”开头的,说明这是JDK中的类,不作处理;当读取到“#16=Class#647//cn/webank/abs/adm/dto/base/BaseResponse”路径是项目路径开头的,说明这是项目中类,添加到依赖类列表,并确定为第二待迁移类,去E-R图中找到对应的节点,将其入度加1。当读取到“#194=Class#848//tk/mybatis/mapper/entity/Example”时,依赖类的全限定类名“tk/mybatis/mapper/entity/Example”不属于以上两种情况,说明该类为jar包中的类,去\WEB-INF\lib目录下找到类路径一致的class文件,找到后将该jar包确定为待迁移jar包。当读取到某行数据不是以“#数字”开头的,表示常量池遍历结束,该反编译解析也随之结束。接着是遍历该类的父类列表和第二待迁移类,解析其对应的反编译文件。当解析到AssetpoolController依赖类列表中的“AbsAssetsPoolDTOMapper”类时,发现该类为接口且子类列表为空,遍历项目的xml文件,找到AbsAssetsPoolDTOMapper.xml文件包含“<mapper namespace="cn.webank.abs.adm.dao.AbsAssetsPoolDTOMapper">”字符串,表示该接口为Mybatis框架接口,同时将AbsAssetsPoolDTOMapper.xml文件确定为目标xml文件。
9、将第一待迁移类、第二待迁移类逐个迁移到weabs-admin项目中,将目标参数配置对应的参数代码写入weabs-admin项目同名的配置文件中。根据待迁移的jar包的jar包信息生成对应的代码,写入weabs-admin项目中的build.gradle文件中。
10、遍历待迁移项目的第一待迁移类,找到其对应E-R图节点,删除入度为0的文件,至此weabs-bpmcore的代码迁移已完成。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
图8为本申请实施例提供的文件迁移装置的结构示意图。如图8所示,该文件迁移装置800包括:
获取模块801,用于获取待迁移项目的第一待迁移类。
第一处理模块802,用于根据待迁移项目的多个配置文件标识以及包含的配置参数,生成映射关系,映射关系用于表示配置参数与配置文件标识之间的对应关系。
第二处理模块803,用于根据待迁移项目的类型,将第一待迁移类转换成反编译文件。
第三处理模块804,用于根据第一待迁移类,构建待迁移项目的E-R图。其中,E-R图包括多个节点,每个节点对应一个类,存在依赖关系的节点相连接,每个节点包括注解列表,注解列表包含注解文件标识。
第四处理模块805,用于根据E-R图以及第一待迁移类对应的反编译文件,确定第一待迁移类依赖的第二待迁移类,以及编写在第一待迁移类对应的反编译文件以及第二待迁移类对应的反编译文件中的目标配置参数以及目标注解文件标识。
迁移模块806,用于根据待迁移项目的类型以及映射关系,将第一待迁移类、第二待迁移类、目标注解文件标识对应的目标注解文件、以及目标配置参数对应的目标配置文件迁移至目标项目的存储路径。
在本申请实施例的一种可能设计中,第三处理模块804,具体用于:
步骤a、将第一待迁移类确定为第一待处理类。
步骤b、若E-R图中未存在第一待处理类对应的节点,则在E-R图中建立对应的节点。
步骤c、将第一待处理类在E-R图中的节点与依赖节点的子节点进行连接。
步骤d、根据第一待处理类,获取对应的注解列表以及依赖的父类标识。
步骤e、将父类标识对应的父类确定为新的第一待处理类。
重复执行步骤b至步骤e,直至每个第一待处理类的父类均在E-R图中存在对应的节点,得到E-R图。
在本申请实施例的一种可能设计中,第三处理模块804,具体用于:
从第一待处理类中提取依赖的父类标识以及注解文件标识。
根据提取的注解文件标识,生成注解列表。
可选的,E-R图中的节点还包括子类列表和父类列表,子类列表包括依赖节点的子节点对应的子类标识,父类列表包括节点依赖的父节点对应的父类标识。
相应的,该文件迁移装置800还包括:
第五处理模块,用于根据E-R图中各节点的连接关系,对各节点对应的父类列表以及子类列表进行更新。
在本申请实施例的一种可能设计中,第四处理模块805,具体用于:
步骤f、将第一待迁移类确定为第二待处理类。
步骤g、根据E-R图对第二待处理类对应的反编译文件进行解析处理,获取依赖的第二待迁移类。
步骤h、对第二待处理类对应的反编译文件进行解析处理,获取编写在第一待迁移类对应的反编译文件中的目标配置参数以及目标注解文件标识。
步骤i、若第二待迁移类属于迁移项目,则将第二待迁移类确定为新的第二待处理类。
步骤j、根据E-R图确定第二待处理类对应的父类,将父类确定为新的第二待处理类。
重复步骤g至步骤j,直到所有第二待处理类均被解析处理。
可选的,第四处理模块805,具体用于:
对第二待处理类对应的反编译文件进行解析处理,获取常量池,常量池中包括目标配置参数以及初始标注文件标识。
若通过E-R图确定第二待处理类对应的标注列表存在与初始标注文件标识一致的标识,则将初始标注文件标识确定为目标注解文件标识。
在本申请实施例的一种可能设计中,第二处理模块803,具体用于:
根据待迁移项目的类型,将第一待迁移类转换成class文件。
对class文件进行反编译,获取对应的反编译文件。
可选的,第二处理模块803,具体用于:
若第一待迁移类的类型为maven或gradle,则将第一待迁移类进行编译、打包及解压处理,获取对应的class文件。
若第一待迁移类的类型为java Web,则将第一待迁移类进行编译,获取对应的class文件。
可选的,在获取待迁移项目的第一待迁移类之后,该文件迁移装置800还包括:
第六处理模块,用于若待迁移项目的类型为maven或gradle,则确定对应的管理文件,管理文件包括待迁移项目依赖的第一jar包。
第七处理模块,用于对管理文件进行解析,确定第一jar包对应的第一jar包标识。
可选的,第四处理模块805,具体用于:
根据E-R图对第二待处理类对应的反编译文件进行解析处理,获取依赖的类。
若依赖的类为迁移项目中的类,则将依赖的类确定为第二待迁移类。
若依赖的类属于第一jar包,则将第一jar包确定为待迁移的jar包。
可选的,迁移模块806,具体用于:
将第一待迁移类和第二待迁移类迁移至目标项目的存储路径。
根据映射关系,将目标配置参数对应的目标配置文件迁移至目标项目的存储路径。
将目标注解文件迁移至目标项目的存储路径。
若待迁移项目的类型为java Web,则将待迁移的jar包迁移至目标项目的存储路径。
反之,则根据待迁移的jar包对应的待迁移的jar包标识、第一jar包标识以及jar包依赖树,确定目标jar包,目标jar包为待迁移项目依赖的jar包,jar包依赖树包括多个节点,每个节点对应一个jar包,存在依赖关系的节点相连接。
将目标jar包迁移至目标项目的存储路径。
可选的,迁移模块806,具体用于:
将待迁移的jar包标识与第一jar包标识进行匹配。
若匹配成功,则将待迁移的jar包确定为目标jar包。
反之,则根据待迁移的jar包在jar包依赖树中确定对应的第一节点。
根据第一jar包标识在jar包依赖树中确定对应的第二节点。
确定jar包依赖树中处于第一节点和第二节点之间的节点对应的第二jar包。
将待迁移的jar包、第一jar包以及第二jar包,确定为目标jar包。
本申请实施例提供的文件迁移装置,可用于执行上述任一实施例中的文件迁移方法,其实现原理和技术效果类似,在此不再赘述。
需要说明的是,应理解以上装置的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。此外,这些模块全部或部分可以集成在一起,也可以独立实现。这里所述的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。
图9为本申请实施例提供的电子设备的结构示意图。如图9所示,该电子设备900可以包括:处理器901、存储器902及存储在所述存储器902上并可在处理器901上运行的计算机程序指令,所述处理器901执行所述计算机程序指令时实现前述任一实施例提供的文件迁移方法。
可选的,该电子设备900的上述各个器件之间可以通过系统总线连接。
存储器902可以是单独的存储单元,也可以是集成在处理器中的存储单元。处理器的数量为一个或者多个。
可选的,电子设备900还可以包括与其他设备进行交互的接口。
应理解,处理器901可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
系统总线可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。系统总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。存储器可能包括随机存取存储器(randomaccess memory,RAM),也可能还包括非易失性存储器(non-volatile memory,NVM),例如至少一个磁盘存储器。
实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一可读取存储器中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储器(存储介质)包括:只读存储器(read-only memory,ROM)、RAM、快闪存储器、硬盘、固态硬盘、磁带(magnetic tape)、软盘(floppy disk)、光盘(optical disc)及其任意组合。
本申请实施例提供的电子设备,可用于执行上述任一方法实施例提供的文件迁移方法,其实现原理和技术效果类似,在此不再赘述。
本申请实施例提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机执行指令,当该计算机执行指令在计算机上运行时,使得计算机执行上述文件迁移方法。
上述的计算机可读存储介质,上述可读存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器,电可擦除可编程只读存储器,可擦除可编程只读存储器,可编程只读存储器,只读存储器,磁存储器,快闪存储器,磁盘或光盘。可读存储介质可以是通用或专用计算机能够存取的任何可用介质。
可选的,将可读存储介质耦合至处理器,从而使处理器能够从该可读存储介质读取信息,且可向该可读存储介质写入信息。当然,可读存储介质也可以是处理器的组成部分。处理器和可读存储介质可以位于专用集成电路(Application Specific IntegratedCircuits,ASIC)中。当然,处理器和可读存储介质也可以作为分立组件存在于设备中。
本申请实施例还提供一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中,至少一个处理器可以从该计算机可读存储介质中读取该计算机程序,所述至少一个处理器执行所述计算机程序时可实现上述文件迁移方法。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求书来限制。
Claims (15)
1.一种文件迁移方法,其特征在于,包括:
获取待迁移项目的第一待迁移类;
根据所述待迁移项目的多个配置文件标识以及包含的配置参数,生成映射关系,所述映射关系用于表示配置参数与配置文件标识之间的对应关系;
根据所述待迁移项目的类型,将所述第一待迁移类转换成反编译文件;
根据所述第一待迁移类,构建所述待迁移项目的实体-联系E-R图;其中,所述E-R图包括多个节点,每个节点对应一个类,存在依赖关系的节点相连接,每个节点包括注解列表,所述注解列表包含注解文件标识;
根据所述E-R图以及所述第一待迁移类对应的反编译文件,确定所述第一待迁移类依赖的第二待迁移类,以及编写在所述第一待迁移类对应的反编译文件以及所述第二待迁移类对应的反编译文件中的目标配置参数以及目标注解文件标识;
根据所述待迁移项目的类型以及所述映射关系,将所述第一待迁移类、所述第二待迁移类、所述目标注解文件标识对应的目标注解文件、以及所述目标配置参数对应的目标配置文件迁移至目标项目的存储路径。
2.根据权利要求1所述的方法,其特征在于,所述根据所述第一待迁移类,构建所述待迁移项目的E-R图,包括:
步骤a、将第一待迁移类确定为第一待处理类;
步骤b、若所述E-R图中未存在所述第一待处理类对应的节点,则在所述E-R图中建立对应的节点;
步骤c、将所述第一待处理类在所述E-R图中的节点与依赖所述节点的子节点进行连接;
步骤d、根据所述第一待处理类,获取对应的注解列表以及依赖的父类标识;
步骤e、将所述父类标识对应的父类确定为新的第一待处理类;
重复执行步骤b至步骤e,直至每个第一待处理类的父类均在所述E-R图中存在对应的节点,得到所述E-R图。
3.根据权利要求2所述的方法,其特征在于,所述步骤d,包括:
从所述第一待处理类中提取依赖的父类标识以及注解文件标识;
根据提取的注解文件标识,生成所述注解列表。
4.根据权利要求2所述的方法,其特征在于,所述E-R图中的节点还包括子类列表和父类列表,所述子类列表包括依赖所述节点的子节点对应的子类标识,所述父类列表包括所述节点依赖的父节点对应的父类标识;
相应的,所述方法还包括:
根据所述E-R图中各节点的连接关系,对各节点对应的父类列表以及子类列表进行更新。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述根据所述E-R图以及所述第一待迁移类对应的反编译文件,确定所述第一待迁移类依赖的第二待迁移类,以及编写在所述第一待迁移类对应的反编译文件以及所述第二待迁移类对应的反编译文件中的目标配置参数以及目标注解文件标识,包括:
步骤f、将第一待迁移类确定为第二待处理类;
步骤g、根据所述E-R图对所述第二待处理类对应的反编译文件进行解析处理,获取依赖的第二待迁移类;
步骤h、对所述第二待处理类对应的反编译文件进行解析处理,获取编写在所述第一待迁移类对应的反编译文件中的目标配置参数以及目标注解文件标识;
步骤i、若所述第二待迁移类属于所述迁移项目,则将所述第二待迁移类确定为新的第二待处理类;
步骤j、根据所述E-R图确定所述第二待处理类对应的父类,将所述父类确定为新的第二待处理类;
重复步骤g至步骤j,直到所有第二待处理类均被解析处理。
6.根据权利要求5所述的方法,其特征在于,所述步骤h,包括:
对所述第二待处理类对应的反编译文件进行解析处理,获取常量池,所述常量池中包括目标配置参数以及初始标注文件标识;
若通过所述E-R图确定所述第二待处理类对应的标注列表存在与所述初始标注文件标识一致的标识,则将所述初始标注文件标识确定为目标注解文件标识。
7.根据权利要求1至4任一项所述的方法,其特征在于,所述根据所述待迁移项目的类型,将所述第一待迁移类转换成反编译文件,包括:
根据所述待迁移项目的类型,将所述第一待迁移类转换成class文件;
对所述class文件进行反编译,获取对应的反编译文件。
8.根据权利要求7所述的方法,其特征在于,所述根据所述待迁移项目的类型,将所述第一待迁移类转换成class文件,包括:
若所述第一待迁移类的类型为maven或gradle,则将所述第一待迁移类进行编译、打包及解压处理,获取对应的class文件;
若所述第一待迁移类的类型为java Web,则将所述第一待迁移类进行编译,获取对应的class文件。
9.根据权利要求5所述的方法,其特征在于,在所述获取待迁移项目的第一待迁移类之后,所述方法还包括:
若所述待迁移项目的类型为maven或gradle,则确定对应的管理文件,所述管理文件包括所述待迁移项目依赖的第一jar包;
对所述管理文件进行解析,确定所述第一jar包对应的第一jar包标识。
10.根据权利要求9所述的方法,其特征在于,所述步骤g,包括:
根据所述E-R图对所述第二待处理类对应的反编译文件进行解析处理,获取依赖的类;
若所述依赖的类为所述迁移项目中的类,则将所述依赖的类确定为所述第二待迁移类;
若所述依赖的类属于所述第一jar包,则将所述第一jar包确定为待迁移的jar包。
11.根据权利要求10所述的方法,其特征在于,所述根据所述待迁移项目的类型以及所述映射关系,将所述第一待迁移类、所述第二待迁移类、所述目标注解文件标识对应的目标注解文件、以及所述目标配置参数对应的目标配置文件迁移至目标项目的存储路径,包括:
将所述第一待迁移类和所述第二待迁移类迁移至所述目标项目的存储路径;
根据所述映射关系,将所述目标配置参数对应的目标配置文件迁移至所述目标项目的存储路径;
将所述目标注解文件迁移至所述目标项目的存储路径;
若所述待迁移项目的类型为java Web,则将所述待迁移的jar包迁移至所述目标项目的存储路径;
反之,则根据待迁移的jar包对应的待迁移的jar包标识、第一jar包标识以及jar包依赖树,确定目标jar包,所述目标jar包为所述待迁移项目依赖的jar包,所述jar包依赖树包括多个节点,每个节点对应一个jar包,存在依赖关系的节点相连接;
将所述目标jar包迁移至所述目标项目的存储路径。
12.根据权利要求11所述的方法,其特征在于,所述根据待迁移的jar包对应的待迁移的jar包标识、第一jar包标识以及jar包依赖树,确定目标jar包,包括:
将所述待迁移的jar包标识与所述第一jar包标识进行匹配;
若匹配成功,则将所述待迁移的jar包确定为所述目标jar包;
反之,则根据所述待迁移的jar包在所述jar包依赖树中确定对应的第一节点;
根据所述第一jar包标识在所述jar包依赖树中确定对应的第二节点;
确定所述jar包依赖树中处于所述第一节点和所述第二节点之间的节点对应的第二jar包;
将所述待迁移的jar包、所述第一jar包以及所述第二jar包,确定为目标jar包。
13.一种文件迁移装置,其特征在于,包括:
获取模块,用于获取待迁移项目的第一待迁移类;
第一处理模块,用于根据所述待迁移项目的多个配置文件标识以及包含的配置参数,生成映射关系,所述映射关系用于表示配置参数与配置文件标识之间的对应关系;
第二处理模块,用于根据所述待迁移项目的类型,将所述第一待迁移类转换成反编译文件;
第三处理模块,用于根据所述第一待迁移类,构建所述待迁移项目的实体-联系E-R图;其中,所述E-R图包括多个节点,每个节点对应一个类,存在依赖关系的节点相连接,每个节点包括注解列表,所述注解列表包含注解文件标识;
第四处理模块,用于根据所述E-R图以及所述第一待迁移类对应的反编译文件,确定所述第一待迁移类依赖的第二待迁移类,以及编写在所述第一待迁移类对应的反编译文件以及所述第二待迁移类对应的反编译文件中的目标配置参数以及目标注解文件标识;
迁移模块,用于根据所述待迁移项目的类型以及所述映射关系,将所述第一待迁移类、所述第二待迁移类、所述目标注解文件标识对应的目标注解文件、以及所述目标配置参数对应的目标配置文件迁移至目标项目的存储路径。
14.一种电子设备,包括:处理器、存储器及存储在所述存储器上并可在处理器上运行的计算机程序指令,其特征在于,所述处理器执行所述计算机程序指令时用于实现如权利要求1至12任一项所述的文件迁移方法。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1至12任一项所述的文件迁移方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310408783.6A CN116414774A (zh) | 2023-04-13 | 2023-04-13 | 文件迁移方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310408783.6A CN116414774A (zh) | 2023-04-13 | 2023-04-13 | 文件迁移方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116414774A true CN116414774A (zh) | 2023-07-11 |
Family
ID=87049358
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310408783.6A Pending CN116414774A (zh) | 2023-04-13 | 2023-04-13 | 文件迁移方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116414774A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117331887A (zh) * | 2023-10-31 | 2024-01-02 | 中国人民解放军32039部队 | 一种航天测控系统配置文件自动迁移方法和装置 |
-
2023
- 2023-04-13 CN CN202310408783.6A patent/CN116414774A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117331887A (zh) * | 2023-10-31 | 2024-01-02 | 中国人民解放军32039部队 | 一种航天测控系统配置文件自动迁移方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9965259B2 (en) | System for translating diverse programming languages | |
US20140157243A1 (en) | System for Translating Diverse Programming Languages | |
US9043757B2 (en) | Identifying differences between source codes of different versions of a software when each source code is organized using incorporated files | |
US10838743B2 (en) | Systems and methods for processing extensible markup language data during runtime | |
US20090031291A1 (en) | Method and apparatus for a cross-platform translator from VB.net to java | |
CN112394942B (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
CN109032631B (zh) | 应用程序补丁包获取方法、装置、计算机设备及存储介质 | |
CN112769706B (zh) | 组件化路由方法及系统 | |
US20230259358A1 (en) | Documentation enforcement during compilation | |
CN111460241B (zh) | 一种数据查询方法、装置、电子设备及存储介质 | |
CN116414774A (zh) | 文件迁移方法、装置、设备及存储介质 | |
CN113901083A (zh) | 基于多解析器的异构数据源操作资源解析定位方法和设备 | |
CN113434175A (zh) | 数据处理方法、装置、存储介质及设备 | |
CN115599386A (zh) | 代码生成方法、装置、设备及存储介质 | |
CN116755713A (zh) | 应用程序的生成方法、装置、设备及存储介质 | |
CN114780109A (zh) | Python项目第三方库依赖自动化解析与安装方法 | |
CN111352631B (zh) | 一种接口兼容性检测方法及装置 | |
US10606569B2 (en) | Declarative configuration elements | |
CN111488144A (zh) | 一种数据处理方法以及设备 | |
CN115964054A (zh) | 应用服务部署方法和装置 | |
CN115729590A (zh) | 服务部署方法、装置、设备和计算机可读存储介质 | |
CN112486990B (zh) | 一种根据模型描述同步数据库表结构的方法及设备 | |
CN112947956B (zh) | 一种应用软件升级方法 | |
CN114924742A (zh) | 用于虚拟机模拟软件的热补丁制作和应用方法、装置 | |
Le Zou et al. | On synchronizing with web service evolution |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |