CN111124526A - 依赖库管理方法、装置、存储介质和计算机设备 - Google Patents
依赖库管理方法、装置、存储介质和计算机设备 Download PDFInfo
- Publication number
- CN111124526A CN111124526A CN201811295196.6A CN201811295196A CN111124526A CN 111124526 A CN111124526 A CN 111124526A CN 201811295196 A CN201811295196 A CN 201811295196A CN 111124526 A CN111124526 A CN 111124526A
- Authority
- CN
- China
- Prior art keywords
- dependency
- library
- loading
- dependent
- 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
Links
- 238000007726 management method Methods 0.000 title claims description 85
- 230000001419 dependent effect Effects 0.000 claims abstract description 106
- 238000000034 method Methods 0.000 claims abstract description 43
- 238000012544 monitoring process Methods 0.000 claims abstract description 32
- 238000004590 computer program Methods 0.000 claims description 5
- 238000012423 maintenance Methods 0.000 abstract description 8
- 230000015654 memory Effects 0.000 description 15
- 238000004891 communication Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 12
- 238000010586 diagram Methods 0.000 description 9
- 238000012545 processing Methods 0.000 description 8
- 238000011161 development Methods 0.000 description 7
- 230000008569 process Effects 0.000 description 5
- 230000001413 cellular effect Effects 0.000 description 3
- 238000010276 construction Methods 0.000 description 3
- 230000005291 magnetic effect Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000009941 weaving Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000005034 decoration Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000010897 surface acoustic wave method Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- 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/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
Abstract
本发明提供一种依赖库管理方法、装置、存储介质和计算机设备,所述依赖库管理方法包括:建立依赖库插件,重写所述依赖库插件中的依赖库入口模块;在所述依赖库入口模块中配置依赖库管理规则;监听预设接口,根据监听的依赖库管理规则重写依赖解析模块,得到依赖关系;根据所述依赖关系加载依赖库。本发明简化了项目接入方SDK的接入复杂度,降低了项目后期维护成本。
Description
技术领域
本发明涉及计算机技术领域,具体而言,本发明涉及一种依赖库管理方法、装置、存储介质和计算机设备。
背景技术
软件开发工具包SDK的全称是Software Development Kit,一般是软件工程师为特定的软件包、软件框架、硬件平台、操作系统等应用软件建立的开发工具的集合。当项目开发者需要接入一个或多个SDK时,则需要在SDK的依赖库里面配置不同的依赖模块,例如如图1所示,开发一个手机应用项目APP时,需要配置用于APM(Application PerformanceManagement)开发的argus-apm-main模块(即图1所示的main)、argus-apm-aop模块(即图1所示的aop)和argus-apm-okhttp模块(即图1所示的okhttp),后续可能还会增加其它模块。这样,将使得SDK的接入方就得配置所接入的每一个依赖模块,再将其应用到依赖库管理插件GradlePlugin中,从而导致接入SDK的复杂度,后面维护成本也较高。
发明内容
本发明针对上述缺点,提出一种依赖库管理方法、装置、存储介质和计算机设备,用以解决SKD接入复杂的问题。
本发明提出的依赖库管理方法包括:
建立依赖库插件,重写所述依赖库插件中的依赖库入口模块;
在所述依赖库入口模块中配置依赖库管理规则;
监听预设接口,根据监听的依赖库管理规则重写依赖解析模块,得到依赖关系;
根据所述依赖关系加载依赖库。
进一步地,所述根据所述依赖关系加载依赖库之后,还包括:
停止监听所述预设接口。
进一步地,所述根据所述依赖关系加载依赖库,包括:
判断所述依赖关系中是否包括用户自定义依赖库配置信息;
若是,则根据所述用户自定义依赖库配置信息加载依赖库;
若否,加载预设的依赖库。
进一步地,所述根据所述用户自定义依赖库配置信息加载依赖库,包括:
若当前依赖库中没有基础依赖库数据,则加载基础依赖库;
若当前依赖库中没有自定义依赖库数据,则加载自定义依赖库。
进一步地,所述根据所述依赖关系加载依赖库,包括:
若所述依赖关系中包括调试库信息,则根据所述调试库信息加载依赖库。
进一步地,所述根据所述依赖关系加载依赖库,包括:
若所述依赖关系中包括调试库信息,则加载全部的依赖库,将加载的全部依赖库发布至本地。
进一步地,所述监听预设接口,根据监听的依赖库管理规则重写依赖解析模块,得到依赖关系,包括:
监听DependencyResolutionListener接口,根据监听的依赖库管理规则重写DependencyResolutionListener接口函数中的beforeResolve模块,得到依赖关系。
进一步地,所述在所述依赖库入口模块中配置依赖库管理规则,包括:
获取软件开发工具包的依赖库;
根据每个依赖库的依赖配置关系,在所述依赖库入口模块中配置依赖库管理规则。
本发明还提出一种依赖库管理装置,该装置包括:
插件建立模块,用于建立依赖库插件,重写所述依赖库插件中的依赖库入口模块;
规则配置模块,用于在所述依赖库入口模块中配置依赖库管理规则;
监听解析模块,用于监听预设接口,根据监听的依赖库管理规则重写依赖解析模块,得到依赖关系;
依赖库加载模块,用于根据所述依赖关系加载依赖库。
进一步地,该装置还包括:
监听停止模块,用于停止监听所述预设接口。
进一步地,所述依赖库加载模块包括:
自定义判断单元,用于判断所述依赖关系中是否包括用户自定义依赖库配置信息;
自定义依赖库加载单元,用于当所述依赖关系中包括用户自定义依赖库配置信息时,根据所述用户自定义依赖库配置信息加载依赖库;
预设依赖库加载单元,用于当所述依赖关系中不包括用户自定义依赖库配置信息时,加载预设的依赖库。
进一步地,所述自定义依赖库加载单元包括:
基础数据加载单元,用于若当前依赖库中没有基础依赖库数据,则加载基础依赖库;
自定义数据加载单元,用于若当前依赖库数据中没有自定义依赖库数据,则加载自定义依赖库。
进一步地,所述依赖库加载模块包括:
调试库加载单元,用于若所述依赖关系中包括调试库信息,则根据所述调试库信息加载依赖库。
进一步地,所述依赖库加载模块包括:
加载发布单元,用于若所述依赖关系中包括调试库信息,则加载全部的依赖库,将加载的全部依赖库发布至本地。
进一步地,所述监听解析模块包括:
DependencyResolutionListener接口单元,用于监听DependencyResolutionListener接口,根据监听的依赖库管理规则重写DependencyResolutionListener接口函数中的beforeResolve模块,得到依赖关系。
本发明还提出一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现前述任意一项所述的依赖库管理方法。
本发明还提出一种计算机设备,所述计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现前述任意一项所述的依赖库管理方法。
本发明具有以下有益效果:
1、本发明简化了项目接入方SDK的接入复杂度,无论接入方SDK提供多少依赖库,都可以由SDK的开发者在插件中实现对依赖库的管理;对SDK项目开发者来说,本发明优化了依赖库的接入方式,方便了SDK项目内部版本的统一维护,既简化了接入的复杂度,又降低了后期维护成本。
2、本发明通过监听API的DependencyResolutionListener接口添加依赖库配置,不仅实现了可根据所述用户自定义依赖库配置信息管理依赖库的方法,还有利于简化开发该依赖库管理插件的难度。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为现有技术中配置依赖模块的示意图;
图2为本发明依赖库管理方法实施例的流程示意图;
图3为应用本发明依赖库管理方法后配置依赖模块的示意图;
图4为本发明依赖库管理方法另一具体实施例的示意图;
图5为本发明计算机设备实施例的结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式,这里使用的“第一”、“第二”仅用于区别同一技术特征,并不对该技术特征的顺序和数量等加以限定。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
本技术领域技术人员可以理解,这里所使用的“终端”、“终端设备”既包括无线信号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件的设备,其具有能够在双向通信链路上,执行双向通信的接收和发射硬件的设备。这种设备可以包括:蜂窝或其他通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备;PCS(Personal Communications Service,个人通信系统),其可以组合语音、数据处理、传真和/或数据通信能力;PDA(Personal Digital Assistant,个人数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、日历和/或GPS(Global Positioning System,全球定位系统)接收器;常规膝上型和/或掌上型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算机或其他设备。这里所使用的“终端”、“终端设备”可以是便携式、可运输、安装在交通工具(航空、海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和/或以分布形式,运行在地球和/或空间的任何其他位置运行。这里所使用的“终端”、“终端设备”还可以是通信终端、上网终端、音乐/视频播放终端,例如可以是PDA、MID(Mobile Internet Device,移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒等设备。
JAVA是一门面向对象的编程语言,功能强大,简单易用,但开发JAVA项目时,项目的编译、测试、运行、打包等步骤的成本都很高。当项目需跨人员或跨部门时,由于项目结构存在不一致的问题,将使得项目成本加倍。在现有技术中,一般通过跨平台项目管理工具maven管理Java平台的项目构建、依赖管理、项目信息管理等。在管理工具maven中,依赖配置是在其pom文件中的配置元素,pom文件中的dependencies文件可包含一个或者多个dependency配置元素。依赖配置中的传递性依赖机制能够简化依赖声明,在大部分情况下,只需要明确项目的直接依赖,而不用考虑所有的直接依赖会引入哪些传递性依赖;但是,出现冲突时,则需要明确传递性依赖是从什么依赖路径引入的,即依赖解析。例如一个项目有两个依赖关系,一个是:A->B->C->X,另一个是A->B->X,则需要明确哪个版本的依赖会被引用。一般会采用如下两个原则进行依赖解析:一个是最短路径优先原则,当该原则出现不确定性时,则采用另一个原则,即第一声明者优先原则。管理工具maven中涉及的定义与规范,以及依赖配置中的依赖解析原则均为现有技术,在此不再赘述。
Plugin(Plug-in,addin,add-in,addon或add-on)是一种计算机应用程序,一般称为插件,它和主应用程序(host application)互相交互,以提供特定的功能,使得第三方开发者有能力扩展主应用程序。Gradle插件一般有三种形式来提供:一是直接在Gradle的build.gradle文件中编写Plugin,但这种方式编写的Plugin无法被其它项目的build.gradle文件引用;另一种是建立一个单独的模型,这个模型的名称必须为buildSrc,同一个项目中的文件够可以引用这个模型,但这个模型是不能被其他项目引用;第三种是在项目中自定义插件,然后上传到远端库,其它项目通过添加依赖模块,来引用这个自定义的插件。但这三种形式中的前两种都无法封装一个SDK插件,以使其它项目可以接入调用其中的依赖模块,其它项目只能和第三种方式一样,需自行定义需要的依赖模块,从而导致一个项目接入其它SDK时的依赖配置复杂度高;而且,当SDK中的依赖模块版本发生变化时,也导致项目的维护成本高,容易出错。
本发明通过监听API的一个接口以重写依赖解析模块,简化接入SDK的依赖配置。下面以开源工具Gradle为例,说明本发明简化接入SDK依赖配置的技术方案。
如图2所示的实施例,本发明提出一种依赖库管理方法,包括如下步骤:
步骤S10:建立依赖库插件,重写所述依赖库插件中的依赖库入口模块。
步骤S20:在所述依赖库入口模块中配置依赖库管理规则。
步骤S30:监听预设接口,根据监听的依赖库管理规则重写依赖解析模块,得到依赖关系。
步骤S40:根据所述依赖关系加载依赖库。
其中,每个步骤具体如下:
步骤S10:建立依赖库插件,重写所述依赖库插件中的依赖库入口模块。
Gradle是基于构建工具Apache Ant和开源软件项目管理工具Apache Maven概念的项目自动化构建开源工具,可用来构建应用程序app,例如构建编译、打包等过程。用户指定构建规则,Gradle则会根据指定的构建规则自动构建应用程序的相关文件,例如生成apk文件。本发明在管理依赖库之前,需先配置依赖库的插件,再重写依赖库接口。当本发明采用依赖库管理插件Gradle Plugin实现依赖库的管理时,可先自定义Gradle Plugin插件,即建立依赖库插件;然后实现其中的Plugin<Project>接口,重写其中的入口方法apply(project:Project),即重写依赖库入口模块,以配置依赖库的入口管理。由于依赖库管理插件Gradle Plugin为现有插件,其中的Plugin<Project>接口实现方法和重写入口方法apply(project:Project)均为该插件中现有的程序模块,其具体代码规则可根据GradlePlugin插件的预设规则确定,在此不再赘述。
步骤S20:在所述依赖库入口模块中配置依赖库管理规则。
所述依赖库管理规则包括自定义用户规则和默认规则。根据Gradle Plugin插件的预设规则重写依赖库管理入口模块中的apply(project:Project)后,可在apply(project:Project)中写入自定义用户规则,作为扩展字段,以方便用户扩展配置自定义依赖库管理规则;当apply(project:Project)中没有写入自定义用户规则时,则采用依赖库管理的默认规则。在部分实施例中,所述默认规则与所述自定义用户规则可结合采用,例如,若检测到自定义用户规则,则在默认规则的基础上增加相应的自定义依赖库管理规则,以简化用户配置过程。
Gradle Plugin插件的运行分为初始化阶段、配置阶段和运行阶段三个阶段。编译应用软件app的apk文件时,先执行初始化阶段和配置阶段,再执行相应的编译Task,而编译Task的运行为运行期。在具体应用中,所述依赖库管理规则的配置可在Gradle Plugin插件的的配置阶段执行,早于apk的编译期;例如,在脚本build.gradle的配置阶段,可通过所述依赖库管理入口模块中的apply(project:Project)增加如下函数实现自定义用户规则:
project.extensions.create(USER_CONFIG,UserConfig::class.java)。
步骤S10为建立依赖库插件,并实现依赖库的入口方法,即apply(project:Project)方法,由于步骤S20的实现需要在apply(project:Project)中写入,故步骤S10为实现步骤S20的前提。若用户在此步骤中不写入自定义用户规则的个性化配置,则根据apply(project:Project)方法中默认的配置规则配置依赖库管理规则。
步骤S30:监听预设接口,根据监听的依赖库管理规则重写依赖解析模块,得到依赖关系。
通过Gradle Plugin插件监听预设接口时,可通过静态编程语言kotlin实现DependencyResolutionListener接口;实现该接口时,重写该接口中的两个方法:
beforeResolve(dependencies:ResolvableDependencies?)
afterResolve(dependencies:ResolvableDependencies?)
其中,beforeResolve方法用于根据监听的所述依赖库管理规则,重写依赖库插件中的依赖解析模块;例如,在一段时期内,监听用户是否有通过DependencyResolutionListener接口输入自定义的依赖库管理规则;若监听到用户输入的自定义依赖库管理规则,则根据自定义的依赖库管理规则重写beforeResolve方法,以得到解析后的依赖关系,并在解析后的依赖关系中实现用户自定义的不同业务逻辑。由于kotlin语法的规则,实现该接口方式时,必须实现里面的所有方法,因此也重写了afterResolve方法,但是该afterResolve方法不做任何处理,只是空实现,以满足kotlin语法的规则。
在重写beforeResolve方法中根据自定义用户规则实现不同的业务逻辑时,可通过如下代码实现:
在上述代码中,仓库mavenLocal主要用于调试本地仓库,即:如果当前的编译为调试模式,则允许用户将依赖库发布到本地,并配置到自定义用户规则里面,以方便测试调试,而不用将调试阶段编译的版本每次都发布到JCenter或者Maven远程仓库里面。故本发明还提出另一实施例:所述根据所述依赖关系加载依赖库,包括:
若所述依赖关系中包括调试库信息,则加载全部的依赖库,将加载的全部依赖库发布至本地。
从上述代码中可看出,本实施例可根据PluginConfig.userConfig().debugDependencies.isEmpty字段来判断当前编译的版本是否有调试库;如果有调试库,则说明用户当前处于调试阶段。由于用户在调试阶段所采用的模块较多或变化较大,如果每次调试时都逐一解析其中的依赖关系,则调试效率较低,故本实施例在调试阶段可跳过解析阶段,直接加载全部的依赖库,并将加载的全部依赖库发布至本地,以节约调试过程中的依赖解析时间,提高工作效率。
本发明还提出另一种实施例:所述根据所述依赖关系加载依赖库,包括:
若所述依赖关系中包括调试库信息,则根据所述调试库信息加载依赖库。
本实施例可根据所述依赖解析模块中是否包括调试库信息来判断所述依赖解析模块中是否包括用户自定义依赖库配置信息,并根据所述调试库信息加载依赖库,简化了用户在调试阶段的自定义依赖库配置信息的判断方法,有利于提高效率。例如若当前的版本中有调试库,则说明用户当前处于调试阶段,当可获取用户用于调试的自定义用户配置规则,亦即用户自定义依赖库配置信息,并根据该自定义用户配置规则重写依赖解析模块,然后得到的依赖关系配置对应的自定义依赖库;如果没有调试库,用户可能需要编译发布正式版,则可采用默认配置规则和依赖库。当然,在部分实施例中,若没有调试库,所述依赖解析模块中亦有可能包括自定义用户配置规则,亦可根据该自定义用户配置规则配置对应的依赖库。
步骤S40:根据所述依赖关系加载依赖库。
当所述依赖解析模块中包括自定义依赖库配置信息时,则根据所述用户自定义依赖库配置信息加载依赖库,以实现不同的依赖管理;当用户不做任何依赖配置的时候,则可加载默认的编译依赖库,以提高编译速度。故,在本发明的一个实施例中,所述根据所述依赖关系加载解析后的依赖库,包括:
判断所述依赖关系中是否包括用户自定义依赖库配置信息;
若是,则根据所述用户自定义依赖库配置信息加载依赖库;
若否,则加载预设的依赖库。
在前述代码中,若用户配置了debugDependencies代码块,则具有所述用户自定义依赖库配置信息,在配置时将添加用户配置的对应Library依赖库。在本发明的其它实施例中,同理,用户也可以以前述代码为例,根据不同需求做不同的依赖库扩展;例如,用户可在应用APP的Gradle脚本中进行配置,即通过步骤S20来实现;使用方法具体是在APP的build.gradle文件里面配置如下规则:
apply plugin:'argusapm'
debugDependencies'com.qihoo360.argusapm:argus-apm-aop:2.0.0.1001'
本发明的依赖库管理方法简化了项目的接入方SDK的接入复杂度,无论接入方SDK提供多少依赖库,都可以由SDK的开发者在插件中实现对依赖库的管理,仅通过GradlePlugin插件中的apply plugin即可实现对SDK内部所有依赖库的管理。本发明相当于为项目开发用户提供了一个箱子,用户只需要向箱子内放入需要的依赖库即可,而不用关心放入的依赖库是如何加载的,加载逻辑则由本插件来实现。本发明所配置的依赖库管理规则最终将在重写的beforeResolve方法中实现不同的业务逻辑,并添加到项目开发用户的应用APP里面。同时,本发明还可降低项目的接入方对SDK的升级和维护成本。
图3为采用本发明的依赖库管理方法之后,SDK项目的开发者管理依赖库的示意图;对比图1,本发明优化了依赖库的接入方式,用户开发APP时,可直接通过实现本发明的插件管理图示的main、aop和okhttp模块,方便了SDK内部版本的统一维护,接入方只需要apply plugin一句代码就可实现各种依赖,既简化了接入的复杂度,又降低了后期维护成本。
本发明的重要之处在于找准合适的时机,向依赖库的仓库添加不同的依赖库,而添加依赖库将涉及Gradle运行的三个阶段:因为用户需要添加依赖库的自定义配置时,是发生在apply插件之后,所以依赖库的添加必须得在所有的配置执行之后才能添加;在配置阶段执行之后,还有一个方法可以添加依赖配置:afterEvaluate,但是在这个代码块里添加Library的依赖,将会不起任何作用。故,在本发明的一个实施例中,所述监听预设接口,根据监听的依赖库管理规则重写依赖解析模块,得到依赖关系,包括:
监听DependencyResolutionListener接口,根据监听的依赖库管理规则重写DependencyResolutionListener接口函数中的beforeResolve模块,得到依赖关系。
本实施例通过监听API的DependencyResolutionListener接口添加依赖库配置,不仅提供了一种根据所述用户自定义依赖库配置信息加载依赖库的方法,还有利于简化开发该依赖库管理插件的难度。
为了避免监听自身接口带来的异常,本发明仅监听所述预设接口的一个时期,即在通过beforeResolve方法重写依赖解析模块之后,便移除该监听。移除监听的方法可通过调用mProject.gradle.removeListener(this)实现。故本发明还提出如下实施例:
所述根据所述依赖关系加载依赖库之后,还包括:
停止监听所述预设接口。
本实施例可在一段时间之内监听DependencyResolutionListener接口,以重写beforeResolve方法中的配置;在重写结束之后即移除所述监听,避免了插件程序的异常。
基于前述实施例,本发明还提出另一实施例:所述根据所述用户自定义依赖库配置信息加载依赖库,包括:
若当前依赖库中没有基础依赖库数据,则加载基础依赖库;
若当前依赖库中没有自定义依赖库数据,则加载自定义依赖库。
在不同的项目开发过程中,项目所需的依赖库可能并不相同,本发明可根据项目开发所需依赖库的频率,将依赖库区分为基础依赖库和自定义依赖库。所述基础依赖库为大部分项目开发所需的依赖库,例如图1中所述的argus-apm-main模块和argus-apm-aop模块;所述自定义依赖库为使用频率稍低的可选依赖库,例如图1中所述的argus-apm-okhttp。本发明可根据当前依赖库中的数据,分层次加载所述基础依赖库和所述自定义依赖库,既可避免依赖库的重复加载,亦可提高部分应用APP的编译发布速度。
结合图4所示,在本发明的另一实施例中,所述依赖库管理方法还包括:
过滤不需要编译的文件;
根据预设织入规则,修改文件缓存池中需要织入的数据;
将织入后的数据输出至指定的目标目录。
图示中的InputSourceCutter模块即用于过滤不需要编译的文件,并可支持并发AJC编译;过滤后的文件通过增量切割后,缓存于文件缓存池中,所述文件缓存池中的地址可为/argus-apm-ajx/variantName。需要AJC织入时,则将所述文件缓存池中需要织入的数据通过AjcWeaverManager进行多线程并发织入;织入后的数据将输出到指定的目标目录。本实施例可在配置依赖库规则的同时进行文件的切割与织入,提高了项目的编译效率。
本发明还提出一种依赖库管理装置,所述装置包括:
插件建立模块,用于建立依赖库插件,重写所述依赖库插件中的依赖库入口模块;
规则配置模块,用于在所述依赖库入口模块中配置依赖库管理规则;
监听解析模块,用于监听预设接口,根据监听的依赖库管理规则重写依赖解析模块,得到依赖关系;
依赖库加载模块,用于根据所述依赖关系加载依赖库。
在本发明依赖库管理装置的另一实施例中,该装置还包括:
监听停止模块,用于停止监听所述预设接口。
在本发明依赖库管理装置的另一实施例中,所述依赖库加载模块包括:
自定义判断单元,用于判断所述依赖关系中是否包括用户自定义依赖库配置信息;
自定义依赖库加载单元,用于当所述依赖关系中包括用户自定义依赖库配置信息时,根据所述用户自定义依赖库配置信息加载依赖库;
预设依赖库加载单元,用于当所述依赖关系中不包括用户自定义依赖库配置信息时,加载预设的依赖库。
在本发明依赖库管理装置的另一实施例中,所述自定义依赖库加载单元包括:
基础数据加载单元,用于若当前依赖库中没有基础依赖库数据,则加载基础依赖库;
自定义数据加载单元,用于若当前依赖库数据中没有自定义依赖库数据,则加载自定义依赖库。
在本发明依赖库管理装置的另一实施例中,所述依赖库加载模块包括:
调试库加载单元,用于若所述依赖关系中包括调试库信息,则根据所述调试库信息加载依赖库。
在本发明依赖库管理装置的另一实施例中,所述依赖库加载模块包括:
加载发布单元,用于若所述依赖关系中包括调试库信息,则加载全部的依赖库,将加载的全部依赖库发布至本地。
在本发明依赖库管理装置的另一实施例中,所述监听解析模块包括:
DependencyResolutionListener接口单元,用于监听DependencyResolutionListener接口,根据监听的依赖库管理规则重写DependencyResolutionListener接口函数中的beforeResolve模块,得到依赖关系。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任意一项所述的依赖库管理方法。其中,所述存储介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random AcceSS Memory,随即存储器)、EPROM(EraSable ProgrammableRead-Only Memory,可擦写可编程只读存储器)、EEPROM(Electrically EraSableProgrammable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,存储介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。可以是只读存储器,磁盘或光盘等。
本发明实施例还提供一种计算机设备,所述计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任意一项所述的依赖库管理方法。
该计算机设备可以为包括笔记本电脑、台式计算机、服务器等任意具备数据处理能力的设备。图5示出了一种本申请计算机设备实施例的一种组成结构示意图。在图5中,计算机设备可以包括:处理器101、存储器102、通信接口103、显示器104、输入单元105和通信总线106等。其中处理器101、存储器102、通信接口103、显示器104、输入单元105均通过通信总线106完成相互间的通信。
可选的,该处理器101中可以包括中央处理器(CPU,Central Processing Unit),其可以实现该计算机设备主要的数据处理操作,当然,该中央处理器还可以被替换为特定应用集成电路(application-specific integrated circuit,ASIC),数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件等。处理器101是计算机设备的控制中心,利用各种接口和线路连接整个计算机设备的各个部分,通过运行或执行存储在存储器102内的软件程序和/或模块,以及调用存储在存储器102内的数据,执行计算机设备的各种功能和处理数据,从而对计算机设备进行整体监控。可选的,处理器101可包括一个或多个处理单元;优选的,处理器101可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器101中。
存储器102可用于存储软件程序以及模块,处理器101通过运行存储在存储器102的软件程序以及模块,从而执行计算机设备的各种功能应用以及数据处理。存储器102可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如软件开发应用程序等)等;存储数据区可存储根据计算机设备的使用所创建的数据(比如程序缓存文件等)等。此外,存储器102可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
该通信接口103可以为通信模块的接口,如GSM模块的接口。
显示单元104可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单。显示单元104可包括显示面板,可选的,可以采用液晶显示器(Liquid CrystalDisplay,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板。进一步的,触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器101以确定触摸事件的类型,随后处理器101根据触摸事件的类型在显示面板上提供相应的视觉输出。
输入单元105可用于接收输入的数字或字符信息,以及产生与手机的用户设置以及功能控制有关的键信号输入。具体地,输入单元105可包括触控面板以及其他输入设备。触控面板也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器101,并能接收处理器101发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板。除了触控面板,输入单元105还可以包括其他输入设备,例如物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
计算机设备还包括给各个部件供电的电源(比如电池);优选的,电源可以通过电源管理系统与处理器101逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管未示出,计算机设备还可以包括传感器、摄像头、无线网络模块等,在此不再赘述。
当然,图5所示的计算机设备结构并不构成对计算机设备的限定,在实际应用中计算机设备可以包括比图5所示的更多或更少的部件,或者组合某些部件。
应该理解的是,在本发明各实施例中的各功能单元可集成在一个处理模块中,也可以各个单元单独物理存在,也可以两个或两个以上单元集成于一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种依赖库管理方法,其特征在于,包括:
建立依赖库插件,重写所述依赖库插件中的依赖库入口模块;
在所述依赖库入口模块中配置依赖库管理规则;
监听预设接口,根据监听的依赖库管理规则重写依赖解析模块,得到依赖关系;
根据所述依赖关系加载依赖库。
2.根据权利要求1所述的方法,其特征在于,所述根据所述依赖关系加载依赖库之后,还包括:
停止监听所述预设接口。
3.根据权利要求1所述的方法,其特征在于,所述根据所述依赖关系加载依赖库,包括:
判断所述依赖关系中是否包括用户自定义依赖库配置信息;
若是,则根据所述用户自定义依赖库配置信息加载依赖库;
若否,加载预设的依赖库。
4.根据权利要求3所述的方法,其特征在于,所述根据所述用户自定义依赖库配置信息加载依赖库,包括:
若当前依赖库中没有基础依赖库数据,则加载基础依赖库;
若当前依赖库中没有自定义依赖库数据,则加载自定义依赖库。
5.根据权利要求1所述的方法,其特征在于,所述根据所述依赖关系加载依赖库,包括:
若所述依赖关系中包括调试库信息,则根据所述调试库信息加载依赖库。
6.根据权利要求1所述的方法,其特征在于,所述根据所述依赖关系加载依赖库,包括:
若所述依赖关系中包括调试库信息,则加载全部的依赖库,将加载的全部依赖库发布至本地。
7.根据权利要求1所述的方法,其特征在于,所述监听预设接口,根据监听的依赖库管理规则重写依赖解析模块,得到依赖关系,包括:
监听DependencyResolutionListener接口,根据监听的依赖库管理规则重写DependencyResolutionListener接口函数中的beforeResolve模块,得到依赖关系。
8.一种依赖库管理装置,其特征在于,该装置包括:
插件建立模块,用于建立依赖库插件,重写所述依赖库插件中的依赖库入口模块;
规则配置模块,用于在所述依赖库入口模块中配置依赖库管理规则;
监听解析模块,用于监听预设接口,根据监听的依赖库管理规则重写依赖解析模块,得到依赖关系;
依赖库加载模块,用于根据所述依赖关系加载依赖库。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至7中任意一项所述的依赖库管理方法。
10.一种计算机设备,其特征在于,所述计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1至7中任意一项所述的依赖库管理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811295196.6A CN111124526A (zh) | 2018-11-01 | 2018-11-01 | 依赖库管理方法、装置、存储介质和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811295196.6A CN111124526A (zh) | 2018-11-01 | 2018-11-01 | 依赖库管理方法、装置、存储介质和计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111124526A true CN111124526A (zh) | 2020-05-08 |
Family
ID=70494878
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811295196.6A Pending CN111124526A (zh) | 2018-11-01 | 2018-11-01 | 依赖库管理方法、装置、存储介质和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111124526A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112068899A (zh) * | 2020-09-01 | 2020-12-11 | 北京五八信息技术有限公司 | 插件加载方法、装置、电子设备及存储介质 |
CN112182199A (zh) * | 2020-09-10 | 2021-01-05 | 中信银行股份有限公司 | 一种依赖包推荐方法、装置、电子设备和可读存储介质 |
CN112667509A (zh) * | 2020-12-28 | 2021-04-16 | 郑州阿帕斯数云信息科技有限公司 | Sdk的接入测试方法及装置 |
CN113419763A (zh) * | 2021-07-16 | 2021-09-21 | 南京炫佳网络科技有限公司 | 一种数据处理方法、装置、设备和存储介质 |
CN113778450A (zh) * | 2020-07-10 | 2021-12-10 | 北京沃东天骏信息技术有限公司 | 依赖冲突的处理方法、装置、设备及存储介质 |
WO2022206259A1 (zh) * | 2021-03-30 | 2022-10-06 | 北京字节跳动网络技术有限公司 | 一种依赖函数的处理方法、装置、设备及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103412818A (zh) * | 2013-08-14 | 2013-11-27 | 迈普通信技术股份有限公司 | 自动化测试方法及系统 |
CN105094849A (zh) * | 2015-08-25 | 2015-11-25 | 百度在线网络技术(北京)有限公司 | 一种插件的资源调用方法和装置 |
CN105893509A (zh) * | 2016-03-30 | 2016-08-24 | 电子科技大学 | 一种大数据分析模型的标记与解释系统及方法 |
CN106371838A (zh) * | 2016-08-31 | 2017-02-01 | 福建联迪商用设备有限公司 | 一种维护软件包依赖关系的方法及系统 |
CN106484471A (zh) * | 2016-09-30 | 2017-03-08 | 宁波方太厨具有限公司 | 一种通讯模块内固化程序的加载方法 |
CN106843857A (zh) * | 2016-12-30 | 2017-06-13 | 北京五八信息技术有限公司 | 基于srp实现代码库转换sdk的方法和装置 |
CN106886394A (zh) * | 2015-12-15 | 2017-06-23 | 五八同城信息技术有限公司 | 应用程序打包方法及装置 |
CN107741851A (zh) * | 2017-10-12 | 2018-02-27 | 北京元心科技有限公司 | 编译系统的编译方法、装置及终端设备 |
CN108052314A (zh) * | 2017-12-26 | 2018-05-18 | 无线生活(杭州)信息科技有限公司 | 一种基于Gradle的插件打包的方法及装置 |
-
2018
- 2018-11-01 CN CN201811295196.6A patent/CN111124526A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103412818A (zh) * | 2013-08-14 | 2013-11-27 | 迈普通信技术股份有限公司 | 自动化测试方法及系统 |
CN105094849A (zh) * | 2015-08-25 | 2015-11-25 | 百度在线网络技术(北京)有限公司 | 一种插件的资源调用方法和装置 |
CN106886394A (zh) * | 2015-12-15 | 2017-06-23 | 五八同城信息技术有限公司 | 应用程序打包方法及装置 |
CN105893509A (zh) * | 2016-03-30 | 2016-08-24 | 电子科技大学 | 一种大数据分析模型的标记与解释系统及方法 |
CN106371838A (zh) * | 2016-08-31 | 2017-02-01 | 福建联迪商用设备有限公司 | 一种维护软件包依赖关系的方法及系统 |
CN106484471A (zh) * | 2016-09-30 | 2017-03-08 | 宁波方太厨具有限公司 | 一种通讯模块内固化程序的加载方法 |
CN106843857A (zh) * | 2016-12-30 | 2017-06-13 | 北京五八信息技术有限公司 | 基于srp实现代码库转换sdk的方法和装置 |
CN107741851A (zh) * | 2017-10-12 | 2018-02-27 | 北京元心科技有限公司 | 编译系统的编译方法、装置及终端设备 |
CN108052314A (zh) * | 2017-12-26 | 2018-05-18 | 无线生活(杭州)信息科技有限公司 | 一种基于Gradle的插件打包的方法及装置 |
Non-Patent Citations (1)
Title |
---|
未知: ""Gradle自定义插件:从扩展对象添加依赖项"", 《HTTPS://WWW.IT1352.COM/830377.HTML》, pages 1 - 7 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113778450A (zh) * | 2020-07-10 | 2021-12-10 | 北京沃东天骏信息技术有限公司 | 依赖冲突的处理方法、装置、设备及存储介质 |
CN112068899A (zh) * | 2020-09-01 | 2020-12-11 | 北京五八信息技术有限公司 | 插件加载方法、装置、电子设备及存储介质 |
CN112182199A (zh) * | 2020-09-10 | 2021-01-05 | 中信银行股份有限公司 | 一种依赖包推荐方法、装置、电子设备和可读存储介质 |
CN112667509A (zh) * | 2020-12-28 | 2021-04-16 | 郑州阿帕斯数云信息科技有限公司 | Sdk的接入测试方法及装置 |
WO2022206259A1 (zh) * | 2021-03-30 | 2022-10-06 | 北京字节跳动网络技术有限公司 | 一种依赖函数的处理方法、装置、设备及存储介质 |
CN113419763A (zh) * | 2021-07-16 | 2021-09-21 | 南京炫佳网络科技有限公司 | 一种数据处理方法、装置、设备和存储介质 |
CN113419763B (zh) * | 2021-07-16 | 2024-03-29 | 南京炫佳网络科技有限公司 | 一种数据处理方法、装置、设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111124526A (zh) | 依赖库管理方法、装置、存储介质和计算机设备 | |
Dunkels et al. | Run-time dynamic linking for reprogramming wireless sensor networks | |
US10860299B2 (en) | Extensible data transformation authoring and validation system | |
US9891939B2 (en) | Application compatibility with library operating systems | |
US9846575B1 (en) | Installation of a technical computing environment customized for a target hardware platform | |
KR102193404B1 (ko) | 상호작용 개발 환경으로부터의 소프트웨어 아티팩트의 점진적 컴파일링 기법 | |
US20110078672A1 (en) | Classloading Technique for an Application Server that Provides Dependency Enforcement | |
US20090164973A1 (en) | Contract programming for code error reduction | |
US20150220308A1 (en) | Model-based development | |
US9459986B2 (en) | Automatic generation of analysis-equivalent application constructs | |
US20150074640A1 (en) | Runtime detection of software configurations and upgrades | |
RU2635891C2 (ru) | Механизм инсталляции и формат пакета для распараллеливаемых надежных инсталляций | |
Sadilek | Prototyping domain-specific languages for wireless sensor networks | |
CN113312046A (zh) | 子应用页面处理方法、装置和计算机设备 | |
CN112631915B (zh) | 一种pcie设备软件仿真的方法、系统、设备及介质 | |
Ginny et al. | Smartphone processor architecture, operations, and functions: current state-of-the-art and future outlook: energy performance trade-off: Energy–performance trade-off for smartphone processors | |
Gray et al. | Model-based hardware generation and programming-the MADES approach | |
WO2004088508A2 (en) | A method of creating software that is portable across different operating systems | |
CN114816475A (zh) | 一种嵌入式操作系统的更新方法、装置、设备和介质 | |
CN114816418A (zh) | 一种嵌入式操作系统的搭建方法、装置、设备和介质 | |
CN114035864A (zh) | 接口处理方法、接口处理装置、电子设备和存储介质 | |
CN101593257B (zh) | 基于.Net虚拟机的软件保护系统和方法 | |
Chandrashekar et al. | Comparative Analysis of Modern Mobile Operating Systems | |
US20240111507A1 (en) | Systems and methods for compile-time dependency injection and lazy service activation framework | |
Mukherjee et al. | Develop once deploy anywhere achieving adaptivity with a runtime linker/loader framework |
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 |