CN116991491A - 程序插件加载方法、装置、计算机设备及计算机程序 - Google Patents

程序插件加载方法、装置、计算机设备及计算机程序 Download PDF

Info

Publication number
CN116991491A
CN116991491A CN202210741427.1A CN202210741427A CN116991491A CN 116991491 A CN116991491 A CN 116991491A CN 202210741427 A CN202210741427 A CN 202210741427A CN 116991491 A CN116991491 A CN 116991491A
Authority
CN
China
Prior art keywords
plug
program
package
loading
module
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
Application number
CN202210741427.1A
Other languages
English (en)
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.)
Chongqing Communications Construction Co Ltd
Original Assignee
Chongqing Communications Construction 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 Chongqing Communications Construction Co Ltd filed Critical Chongqing Communications Construction Co Ltd
Priority to CN202210741427.1A priority Critical patent/CN116991491A/zh
Publication of CN116991491A publication Critical patent/CN116991491A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • G06F9/44526Plug-ins; Add-ons
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供了一种程序插件加载方法、装置、计算机设备及计算机程序,其中,加载方法包括:S1:定义一种应用程序的插件包和依赖包;S2:完成插件包和依赖包的部署;S3:建立插件和对应依赖包之间的依赖链接;S4:在每个插件位置下建立插件描述文件,插件描述文件中包含插件描述信息;S5:将所述插件描述信息上传到元数据库中;S6:在应用程序运行时,使用自定义的类加载器对目标插件进行按需加载。本发明解决了现有技术中JAVA插件加载过程中容易出现依赖包冲突的问题,并能够有效的节省磁盘空间。

Description

程序插件加载方法、装置、计算机设备及计算机程序
技术领域
本发明涉及计算机技术领域,尤其涉及一种程序插件加载方法、装置、计算机设备及计算机程序。
背景技术
传统程序的插件加载方法使用基于双亲委派模型的加载方式,往往存在一些问题,比如当程序的不同插件模块或者不同版本出现了对应某一程序包的特定版本的依赖,而此时若将同一插件的相同版本包都使用双亲委派机制加载时,可能会出现包冲突的问题,这时候插件之间反而希望有一个独立的加载器去加载到自己需要的包,因此出现了打破双亲委派机制的加载方式,由自己先加载并查找需要用到的包,找不到再向上查找,以保证插件的稳定性与多种插件或多版本插件的共容性。
但这也引发了一些新的问题,比如插件之间的依赖关系彼此独立,当部分插件都有相通的依赖包时,重复的依赖包将占用大量的空间,这个问题也会随着插件的增多越来越明显。
本发明的目的在于提供一种办法,在程序安装时对插件包依赖进行统一压缩合并管理,并实现基于打破双亲委派的类加载方式,在插件使用时按需加载,实现插件包依赖加载的高效性与内存占用的平衡,减小软件安装占用体积。
发明内容
针对现有技术中所存在的不足,根据本发明的实施例,提供了一种程序插件加载方法、装置、计算机设备及计算机程序,其解决了现有技术中存在的在插件加载过程中相通的依赖将占用大量的内存空间的问题。
根据本发明的实施例,第一个方面,提出来一种程序插件加载方法,其特征在于,包括:
S1:定义一种应用程序的插件包和依赖包;
所述插件包包含若干插件,每个插件中又包含若干第一程序包;
S2:完成插件包和依赖包的部署;
S21:对插件包中所有的第一程序包以自身的文件储存校验码信息重命名,生成第二程序包;
S22:将第二程序包移动到依赖包所在目录,并在出现重复文件名的文件时进行替换;
S3:建立插件和对应依赖包之间的依赖链接;
S4:在每个插件位置下建立插件描述文件,插件描述文件中包含插件描述信息;
S5:将所述插件描述信息上传到元数据库中;
S6:在应用程序运行时,使用自定义的类加载器对目标插件进行按需加载。
在一个实施例中,所述步骤S3包括:
S31:在插件的第一程序包原始位置上建立指向所生成的第二程序包的链接文件;
S32:对链接文件以第一程序包的原始名称进行重命名。
在一个实施例中,所述插件描述信息包括插件名称、插件图标、插件类别、插件位置信息和/或插件版本。
在一个实施例中,所述步骤S6包括:
S61:通过元数据库找到待加载的目标插件;
S62:将目标插件的插件描述信息加载到应用程序的内存中;
S63:获取目标插件的插件位置信息;
S64:通过自定义的类加载器加载目标插件位置下的链接文件所指向的第二程序包。
在一个实施例中,所述步骤S6之前还包括:
通过显示界面显示所有可供使用的插件的插件描述信息。
第二个方面,在一个实施例中,提出来一种程序插件加载装置,包括:插件安装模块、元数据库和插件装载及运行模块;
所述插件安装模块用于在应用程序安装时,对目标插件的插件包及对应的依赖包进行分析处理,实现对目标插件的压缩、储存和安装;
所述插件装载及运行模块用于在应用程序调用目标插件时,使用自定义的类加载器对目标插件进行按需加载。
在一个实施例中,所述插件安装模块包括:
定义模块,用于定义一种应用程序的插件包和依赖包;
部署模块,用于完成插件包和依赖包的部署;
所述部署模块包括重命名单元和移动单元;
所述重命名单元用于对插件包中所有的第一程序包以文件储存校验码信息重命名,生成第二程序包;所述移动单元用于将第二程序包移动到依赖包所在目录,并在出现重复文件名的文件时进行替换;
链接关系建立模块,用于建立插件和对应依赖包之间的依赖链接;
所述链接关系建立模块包括链接文件建立模块和链接文件重命名模块;
所述链接文件建立模块用于在插件的第一程序包原始位置上建立指向所生成的第二程序包的链接文件;所述链接文件重命名模块用于对链接文件以第一程序包的原始名称进行重命名;
插件描述文件建立模块,用于在每个插件位置下建立插件描述文件,插件描述文件中包含插件描述信息;
数据上传模块,用于将所述插件描述信息上传到元数据库中。
在一个实施例中,所述插件装载及运行模块包括:
插件寻找模块,用于通过元数据库找到待加载的目标插件;
插件信息加载模块,用于将目标插件的插件描述信息加载到应用程序的内存中;
插件位置信息获取模块,用于获取目标插件的插件位置信息;
插件加载模块,用于通过自定义的类加载器加载目标插件位置下的连接文件所指向的第二程序包。
第三个方面,提出来一种计算机设备,包括:存储器和处理器,所述存储器中存储有计算机程序,所述处理器用于调用所述计算机程序,以执行权利要求1-5中任一项所述的程序插件加载方法中的操作步骤。
第四个方面,提出来一种计算机程序,其特征在于,当所述程序被调用时,用于执行如权利要求1-5中任一项所述的程序插件加载方法中的操作步骤。
相比于现有技术,本发明具有如下有益效果:
1、在插件加载前,使用文件储存校验码信息对插件中的程序包进行重命名,并将重命名后的程序包迁移至依赖包区域,并在出现重复文件名的文件时进行替换,能够防止出现依赖包冲突的情况,由于相同的程序包最终只保留一份,还能够有效地节省磁盘空间。
2、在插件加载前,建立插件和对应的依赖包之间的依赖链接,并在插件需要加载时使用自定义的类加载器对依赖链接和磁盘中对应的依赖包进行按需加载,提高了插件加载的效率,减小了插件安装时内存占用空间。
附图说明
图1为本发明实施例的程序插件加载方法的基本流程图。
图2为本发明实施例的步骤S3的基本流程图。
图3为本发明实施例的步骤S6的基本流程图。
图4为本发明另一实施例的程序插件加载装置的结构图。
具体实施方式
下面结合附图及实施例对本发明中的技术方案进一步说明。
如图1所示,根据本发明的实施例,第一个方面,提出来一种程序插件加载方法,其特征在于,包括:
S1:定义一种应用程序的插件包和依赖包;
所述插件包包含若干插件,每个插件中又包含若干第一程序包;
S2:完成插件包和依赖包的部署;
建立一个插件安装目录,插件安装目录包括依赖包存储子目录和插件目录,插件目录中又包括依赖目录,当应用程序接收到用户的插件安装指令请求时,将目标插件解压到临时目录中;
S21:对插件包中所有的第一程序包以自身的文件储存校验码信息重命名,生成第二程序包;
S22:将第二程序包移动到依赖包所在目录,并在出现重复文件名的文件时进行替换;
具体地,读取插件安装目录里面的插件和所有的第一程序包,获取每一个第一程序包包的MD5信息,并将每一个获取了MD5信息的第一程序包都以md5信息重命名并移动到插件安装主目录内依赖包存储子目录中;若目标目录中存在同名文件则替换该文件;
S3:建立插件和对应依赖包之间的依赖链接;
S4:在每个插件位置下建立插件描述文件,插件描述文件中包含插件描述信息;
S5:将所述插件描述信息上传到元数据库中;
S6:在应用程序运行时,使用自定义的类加载器对目标插件进行按需加载。
在上述实施例中,在插件加载前,使用文件储存校验码信息对插件中的程序包进行重命名,并将重命名后的程序包迁移至依赖包区域,并在出现重复文件名的文件时进行替换,能够防止出现依赖包冲突的情况,由于相同的程序包最终只保留一份,即使不断安装新的具有相同依赖的插件,也不会占用机器过多空间。
此外,当插件应用需要卸载时,也可通过元数据查询判断当前插件应用的依赖文件是否被其他插件所依赖,最后作为删除真实依赖文件或是只是删除插件目录的逻辑判断决策。
在一个实施例中,所述步骤S3包括:
S31:在插件的第一程序包原始位置上建立指向所生成的第二程序包的链接文件;
S32:对链接文件以第一程序包的原始名称进行重命名。
具体地,在插件包新的存储位置对应的依赖目录内创建新的链接文件,文件名为第一程序包原名全称,文件后缀为link,文件内信息为依赖包的md5信息值。
在一个实施例中,所述插件描述信息包括插件名称、插件图标、插件类别、插件位置信息和/或插件版本。
在一个实施例中,所述步骤S6包括:
S61:通过元数据库找到待加载的目标插件;
S62:将目标插件的插件描述信息加载到应用程序的内存中;
当应用程序启动,或者安装完插件需要加载时,首先从元数据库读取到要加载的目标插件,将插件安装时存储的插件的插件描述信息加载到应用程序内存中,此时插件及其依赖包并没有被真正加载到内存中。
S63:获取目标插件的插件位置信息;
S64:通过自定义的类加载器加载目标插件位置下的链接文件所指向的第二程序包。应用程序将使用自定义的类加载器依次去加载插件及其依赖包,当加载完插件开始加载依赖包时此类加载器会先进行后缀信息判断,识别到依赖目录和link后缀文件时将直接读取link文件中的md5信息加上设定的依赖存储路径作为新的路径并放入类加载器中进行加载,这样插件应用即可加载成功。
在上述实施例中,在插件加载前,建立插件和对应的依赖包之间的依赖链接,并在插件需要加载时使用自定义的类加载器对依赖链接和磁盘中的依赖包进行按需加载,能够减小插件安装时内存占用空间。
在一个实施例中,所述步骤S6之前还包括:
通过显示界面显示所有可供使用的插件的插件描述信息。
第二个方面,在一个实施例中,提出来一种程序插件加载装置,包括:插件安装模块、元数据库和插件装载及运行模块;
所述插件安装模块用于在应用程序安装时,对目标插件的插件包及对应的依赖包进行分析处理,实现对目标插件的压缩、储存和安装;
所述插件装载及运行模块用于在应用程序调用目标插件时,使用自定义的类加载器对目标插件进行按需加载。
在一个实施例中,所述插件安装模块包括:
定义模块,用于定义一种应用程序的插件包和依赖包;
部署模块,用于完成插件包和依赖包的部署;
所述部署模块包括重命名单元和移动单元;
所述重命名单元用于对插件包中所有的第一程序包以文件储存校验码信息重命名,生成第二程序包;所述移动单元用于将第二程序包移动到依赖包所在目录,并在出现重复文件名的文件时进行替换;
链接关系建立模块,用于建立插件和对应依赖包之间的依赖链接;
所述链接关系建立模块包括链接文件建立模块和链接文件重命名模块;
所述链接文件建立模块用于在插件的第一程序包原始位置上建立指向所生成的第二程序包的链接文件;所述链接文件重命名模块用于对链接文件以第一程序包的原始名称进行重命名;
插件描述文件建立模块,用于在每个插件位置下建立插件描述文件,插件描述文件中包含插件描述信息;
数据上传模块,用于将所述插件描述信息上传到元数据库中。
在一个实施例中,所述插件装载及运行模块包括:
插件寻找模块,用于通过元数据库找到待加载的目标插件;
插件信息加载模块,用于将目标插件的插件描述信息加载到应用程序的内存中;
插件位置信息获取模块,用于获取目标插件的插件位置信息;
插件加载模块,用于通过自定义的类加载器加载目标插件位置下的连接文件所指向的第二程序包。
第三个方面,提出来一种计算机设备,包括:存储器和处理器,所述存储器中存储有计算机程序,所述处理器用于调用所述计算机程序,以执行权利要求1-5中任一项所述的程序插件加载方法中的操作步骤。
第四个方面,提出来一种计算机程序,其特征在于,当所述程序被调用时,用于执行如权利要求1-5中任一项所述的程序插件加载方法中的操作步骤。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。

Claims (10)

1.一种程序插件加载方法,其特征在于,所述加载方法包括:
S1:定义一种应用程序的插件包和依赖包;
所述插件包包含若干插件,每个插件中又包含若干第一程序包;
S2:完成插件包和依赖包的部署;
S21:对插件包中所有的第一程序包以自身的文件储存校验码信息重命名,生成第二程序包;
S22:将第二程序包移动到依赖包所在目录,并在出现重复文件名的文件时进行替换;
S3:建立插件和对应依赖包之间的依赖链接;
S4:在每个插件位置下建立插件描述文件,插件描述文件中包含插件描述信息;
S5:将所述插件描述信息上传到元数据库中;
S6:在应用程序运行时,使用自定义的类加载器对目标插件进行按需加载。
2.如权利要求1所述的一种程序插件加载方法,其特征在于,所述步骤S3包括:
S31:在插件的第一程序包原始位置上建立指向所生成的第二程序包的链接文件;
S32:对链接文件以第一程序包的原始名称进行重命名。
3.如权利要求1所述的一种程序插件加载方法,其特征在于,所述插件描述信息包括插件名称、插件图标、插件类别、插件位置信息和/或插件版本。
4.如权利要求1所述的一种程序插件加载方法,其特征在于,所述步骤S6包括:
S61:通过元数据库找到待加载的目标插件;
S62:将目标插件的插件描述信息加载到应用程序的内存中;
S63:获取目标插件的插件位置信息;
S64:通过自定义的类加载器加载目标插件位置下的链接文件所指向的第二程序包。
5.如权利要求1所述的一种程序插件加载方法,其特征在于,所述步骤S6之前还包括:
通过显示界面显示所有可供使用的插件的插件描述信息。
6.一种程序插件加载装置,其特征在于,包括:插件安装模块、元数据库和插件装载及运行模块;
所述插件安装模块用于在应用程序安装时,对目标插件的插件包及对应的依赖包进行分析处理,实现对目标插件的压缩、储存和安装;
所述插件装载及运行模块用于在应用程序调用目标插件时,使用自定义的类加载器对目标插件进行按需加载。
7.如权利要求6所述的一种程序插件加载装置,其特征在于,所述插件安装模块包括:
定义模块,用于定义一种应用程序的插件包和依赖包;
部署模块,用于完成插件包和依赖包的部署;
所述部署模块包括重命名单元和移动单元;
所述重命名单元用于对插件包中所有的第一程序包以文件储存校验码信息重命名,生成第二程序包;所述移动单元用于将第二程序包移动到依赖包所在目录,并在出现重复文件名的文件时进行替换;
链接关系建立模块,用于建立插件和对应依赖包之间的依赖链接;
所述链接关系建立模块包括链接文件建立模块和链接文件重命名模块;
所述链接文件建立模块用于在插件的第一程序包原始位置上建立指向所生成的第二程序包的链接文件;所述链接文件重命名模块用于对链接文件以第一程序包的原始名称进行重命名;
插件描述文件建立模块,用于在每个插件位置下建立插件描述文件,插件描述文件中包含插件描述信息;
数据上传模块,用于将所述插件描述信息上传到元数据库中。
8.如权利要求6所述的一种程序插件加载装置,其特征在于,所述插件装载及运行模块包括:
插件寻找模块,用于通过元数据库找到待加载的目标插件;
插件信息加载模块,用于将目标插件的插件描述信息加载到应用程序的内存中;
插件位置信息获取模块,用于获取目标插件的插件位置信息;
插件加载模块,用于通过自定义的类加载器加载目标插件位置下的连接文件所指向的第二程序包。
9.一种计算机设备,其特征在于,包括:存储器和处理器,所述存储器中存储有计算机程序,所述处理器用于调用所述计算机程序,以执行权利要求1-5中任一项所述的程序插件加载方法中的操作步骤。
10.一种计算机程序,其特征在于,当所述程序被调用时,用于执行如权利要求1-5中任一项所述的程序插件加载方法中的操作步骤。
CN202210741427.1A 2022-06-28 2022-06-28 程序插件加载方法、装置、计算机设备及计算机程序 Pending CN116991491A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210741427.1A CN116991491A (zh) 2022-06-28 2022-06-28 程序插件加载方法、装置、计算机设备及计算机程序

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210741427.1A CN116991491A (zh) 2022-06-28 2022-06-28 程序插件加载方法、装置、计算机设备及计算机程序

Publications (1)

Publication Number Publication Date
CN116991491A true CN116991491A (zh) 2023-11-03

Family

ID=88523781

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210741427.1A Pending CN116991491A (zh) 2022-06-28 2022-06-28 程序插件加载方法、装置、计算机设备及计算机程序

Country Status (1)

Country Link
CN (1) CN116991491A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117270887A (zh) * 2023-11-22 2023-12-22 广州嘉为科技有限公司 一种Spring微服务的管理方法、装置及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101582039A (zh) * 2009-06-18 2009-11-18 深圳市汇海科技开发有限公司 一种节省内存开销的插件加载方法
CN109542445A (zh) * 2017-08-01 2019-03-29 北京京东尚科信息技术有限公司 一种Android插件化开发的方法和装置
CN110308999A (zh) * 2018-03-20 2019-10-08 Tcl集团股份有限公司 一种应用间动态共享依赖包的方法、存储介质及移动终端
WO2021248337A1 (zh) * 2020-06-09 2021-12-16 深圳市欢太科技有限公司 一种应用安装方法、装置、设备及计算机可读存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101582039A (zh) * 2009-06-18 2009-11-18 深圳市汇海科技开发有限公司 一种节省内存开销的插件加载方法
CN109542445A (zh) * 2017-08-01 2019-03-29 北京京东尚科信息技术有限公司 一种Android插件化开发的方法和装置
CN110308999A (zh) * 2018-03-20 2019-10-08 Tcl集团股份有限公司 一种应用间动态共享依赖包的方法、存储介质及移动终端
WO2021248337A1 (zh) * 2020-06-09 2021-12-16 深圳市欢太科技有限公司 一种应用安装方法、装置、设备及计算机可读存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117270887A (zh) * 2023-11-22 2023-12-22 广州嘉为科技有限公司 一种Spring微服务的管理方法、装置及存储介质
CN117270887B (zh) * 2023-11-22 2024-03-19 广州嘉为科技有限公司 一种Spring微服务的管理方法、装置及存储介质

Similar Documents

Publication Publication Date Title
US8332835B2 (en) Method and system for automated code-source indexing in java virtual machine environment
US8050663B2 (en) System and method of providing contents for mobile communication terminal
US8566372B2 (en) Method and device for dynamically loading relocatable file
CN100426235C (zh) 在软件包管理***将用户进程表示为软件包的***和方法
US7913265B2 (en) Method of loading software with an intermediate object oriented language in a portable device
CN1732458A (zh) 用于在移动设备上共享库的方法和设备
CN109032631B (zh) 应用程序补丁包获取方法、装置、计算机设备及存储介质
JP2005182790A (ja) 自己記述型ソフトウェアイメージ更新コンポーネント
US20220188088A1 (en) Repository including exclusion list
CN111258587A (zh) 一种安卓应用插件化的实现方法、装置、设备及存储介质
CN110308999B (zh) 一种应用间动态共享依赖包的方法、存储介质及移动终端
CN110659045B (zh) 一种软件化雷达实时动态更新***
CN104731622A (zh) 一种应用程序的加载方法、装置和移动终端
CN116991491A (zh) 程序插件加载方法、装置、计算机设备及计算机程序
CN113504918A (zh) 设备树配置优化方法、装置、计算机设备和存储介质
CN112882746B (zh) 应用程序的更新方法、装置、存储介质及计算机设备
CN112631621A (zh) 一种依赖包管理方法、装置、服务器及存储介质
CN114490103A (zh) 一种操作***接口调用方法、装置以及电子设备
CN108536444B (zh) 插件编译方法、装置、计算机设备和存储介质
CN112486517B (zh) 应用程序的安装方法、***、电子设备及存储介质
CN114489827B (zh) 动态库加载方法、核部署的调整方法及相关装置
CN110928779B (zh) 文件处理方法、应用程序运行故障定位方法和设备
US7571436B2 (en) Device for increasing the execution speed of a linked program
US20050149270A1 (en) Componentware creating method, apparatus and recording medium
CN1582431A (zh) 已编译程序的安装,尤其是在芯片卡中的安装

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