CN114924788B - 代码同步方法和装置 - Google Patents
代码同步方法和装置 Download PDFInfo
- Publication number
- CN114924788B CN114924788B CN202210850796.4A CN202210850796A CN114924788B CN 114924788 B CN114924788 B CN 114924788B CN 202210850796 A CN202210850796 A CN 202210850796A CN 114924788 B CN114924788 B CN 114924788B
- Authority
- CN
- China
- Prior art keywords
- module
- modules
- code synchronization
- code
- target 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 136
- 230000008569 process Effects 0.000 claims abstract description 87
- 230000001419 dependent effect Effects 0.000 claims abstract description 75
- 230000004044 response Effects 0.000 claims abstract description 70
- 230000015654 memory Effects 0.000 claims description 9
- 238000011161 development Methods 0.000 abstract description 40
- 230000006870 function Effects 0.000 abstract description 27
- 238000010586 diagram Methods 0.000 description 18
- 238000004590 computer program Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 5
- 230000001960 triggered effect Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本公开关于一种代码同步方法和装置,属于计算机技术领域,代码同步方法包括:响应于代码同步的启动事件,确定选定模块集合中的目标模块;其中,目标模块为待开发模块;将选定模块集合中除目标模块之外的其他模块的源码路径替换为其他模块对应的依赖对象,其中,依赖对象用于获取其他模块的编译文件;提供目标模块的模型信息,其中,模型信息用于完成目标模块的代码同步。本公开解决了加速代码同步过程,但在后续开发过程中待开发模块依赖的其他模块的相关功能不能使用的问题。
Description
技术领域
本公开涉及计算机技术领域,特别涉及一种代码同步方法和装置。
背景技术
对于百万代码以上的大型单仓多模块的工程项目,IDE(Integrated DevelopmentEnvironment,辅助开发计算机程序的应用软件)启动到能正常编写代码,即IDE代码同步完成,可能要等20多分钟,严重影响开发效率。
为了加速IDE的代码同步过程,相关技术中通过将待开发模块之外的其他模块不加载的方式来有效减少IDE需要理解的代码量。
然而,这种实现方式彻底忽略了待开发模块之外的其他模块,导致模块之间的依赖关系全部丢失,虽然加速了IDE的代码同步过程,但是在后续开发过程中待开发模块依赖的其他模块的相关功能不能使用,如无法搜索、不能批量修改、不能参与编译等。
发明内容
本公开提供一种代码同步方法和装置,以至少解决了加速代码同步过程,但在后续开发过程中待开发模块依赖的其他模块的相关功能不能使用的问题。
根据本公开实施例的一方面,提供一种代码同步方法,所述代码同步方法包括:
响应于代码同步的启动事件,确定选定模块集合中的目标模块;其中,所述目标模块为待开发模块;
将所述选定模块集合中除所述目标模块之外的其他模块的源码路径替换为其他模块对应的依赖对象,其中,所述依赖对象用于获取所述其他模块的编译文件;
提供所述目标模块的模型信息,其中,所述模型信息用于完成所述目标模块的代码同步。
在一种可能实施方式中,所述将所述选定模块集合中除所述目标模块之外的其他模块的源码路径替换为所述其他模块对应的依赖对象,包括:
响应于在所述代码同步的过程中针对所述其他模块产生的同步请求,将所述其他模块的源码路径替换为所述其他模块对应的所述依赖对象;
在一种可能实施方式中,所述响应于在所述代码同步的过程中针对所述其他模块产生的同步请求时,所述代码同步方法还包括:
返回空响应,其中,所述空响应用于使所述其他模块在代码同步过程中的模型信息解析过程被跳过。
在一种可能实施方式中,所述响应于代码同步的启动事件,确定选定模块集合中的目标模块,包括:
响应于所述启动事件,获取为所述选定模块集合设定的模块标识;
将所述模块标识在所述选定模块集合中对应的模块确定为所述目标模块。
在一种可能实施方式中,所述代码同步方法还包括:
响应于对所述目标模块的确定完成,获取每个所述其他模块对应的所述依赖对象;
其中,每个所述其他模块的所述编译文件是通过所述依赖对象获取的。
在一种可能实施方式中,所述将所述选定模块集合中除所述目标模块之外的其他模块的源码路径替换为所述其他模块对应的依赖对象,包括:
确定所述其他模块的源码路径的存放区域;
将所述存放区域清空;
将所述其他模块对应的所述依赖对象通过可传递依赖添加到清空后的所述存放区域。
在一种可能实施中,所述提供所述目标模块的模型信息,包括:
响应于在所述代码同步的过程中针对所述目标模块产生的同步请求,返回所述目标模块的所述模型信息。
根据本公开实施例的另一方面,提供一种代码同步装置,所述代码同步装置包括:
确定模块,被配置为执行响应于代码同步的启动事件,确定选定模块集合中的目标模块;其中,所述目标模块为待开发模块;
替换模块,被配置为执行将所述选定模块集合中除所述目标模块之外的其他模块的源码路径替换为所述其他模块对应的依赖对象,其中,所述依赖对象用于获取所述其他模块的编译文件;
提供模块,被配置为执行提供所述目标模块的模型信息,其中,所述模型信息用于完成所述目标模块的代码同步。
根据本公开实施例的另一方面,提供一种电子设备,包括:
处理器;
用于存储所述处理器的可执行指令的存储器;
其中,所述处理器被配置为执行所述可执行指令,以实现上述任一实施方式所述的代码同步方法。
根据本公开实施例的另一方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的至少一条指令被电子设备的处理器执行时,使得所述电子设备能够实现上述任一实施方式所述的代码同步方法。
根据本公开实施例的另一方面,提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现上述任一实施方式所述的代码同步方法。
本公开的实施例提供的技术方案至少带来以下有益效果:
通过将选定模块集合中除目标模块之外的其他模块的源码路径替换为其他模块对应的依赖对象,保留了选定模块集合中的各模块的拓扑结构,使得在后续开发过程中可以通过依赖对象获取编译文件,能够在后续开发过程中使用待开发模块依赖的其他模块的相关功能;并且仅向选定模块集合中的目标模块提供模型信息,用于理解目标模块的相关代码,以完成目标模块的代码同步,大大节省了同步过程中模型信息的解析时间,即节省了代码同步时间;因此,该方案解决了加速代码同步过程,但在后续开发过程中待开发模块依赖的其他模块的相关功能不能使用的问题。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是根据一示例性实施例示出的一种代码同步方法的实施环境示意图;
图2是根据一示意性实施例示出的一种代码同步方法的流程图;
图3是根据一示意性实施例示出的一种基于空壳化和空响应的代码同步方法的流程图;
图4是根据一示例性实施例示出的一种代码同步的架构示意图;
图5是根据一示例性实施例示出的一种代码同步中模型信息获取流程示意图;
图6是根据一示例性实施例示出的一种初始模块依赖示意图;
图7是根据一示例性实施例示出的一种代码同步中的模块依赖关系图;
图8是根据一示意性实施例示出的一种代码同步装置的逻辑结构框图;
图9是本公开实施例提供的一种电子设备的结构示意图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
对于百万行代码以上的大型单仓多模块工程项目,IDE,如IntellijIDEA,AndroidStudio 等,从触发代码同步到代码同步结束,即能正常编写代码可能要等 20多分钟,严重影响开发效率。
并且,如果部署该IDE的开发设备的内存或者 CPU 资源不够充足,甚至会导致IDE 无法完成代码同步,使后续的代码提示、跳转、搜索等功能不能使用,同时造成开发设备卡顿,影响其他操作。
相关技术中为了解决IDE代码同步时间长,且避免开发设备卡顿的问题,通过不加载待开发模块之外的其他模块解决上述问题。由于对其他模块彻底不加载完全忽略的这种实现方式,虽然加快了IDE代码同步过程,但是在后续如果待开发模块开发过程中依赖到其他模块,不能使用其他模块的相关功能,也就是说破坏了模块之间的依赖关系,不能实现有关功能,没有实现真正的IDE代码同步。
由于模块之间的依赖关系比较复杂,也无法在代码同步之前一一配置模块之间的依赖关系,或者需要较大的人力成本来实现模块之间的依赖关系的配置,因此,通过预先获知模块之间的依赖关系来进行代码同步的预处理,需要较高成本来实现。
有鉴于此,本公开实施例提供一种代码同步方法,通过将选定模块集合中除目标模块之外的其他模块的源码路径替换为其他模块对应的依赖对象,保留了选定模块集合中的各模块的拓扑结构,使得在后续开发过程中可以通过依赖对象获取编译文件,能够在后续开发过程中使用待开发模块依赖的其他模块的相关功能;并且仅向选定模块集合中的目标模块提供模型信息,用于理解目标模块的相关代码,以完成目标模块的代码同步,而不向其他模块提供模型信息,使得跳过其他模块的模型信息的解析,大大节省了代码同步过程中的模型信息解析时间,即节省了代码同步时间;因此,该方案能够解决了加速代码同步过程,但在后续开发过程中待开发模块依赖的其他模块的相关功能不能使用的问题。
图1是根据一示例性实施例示出的一种代码同步方法的实施环境示意图,参见图1,在该实施环境中可以包括本地服务器101和远端服务器102,下面进行详述。
在一个可选实施例中,本地服务器101可以是独立的物理服务器,也可以是多个物理服务器组成的服务器集群或者分布式系统。
在一个可选实施例中,以基于Gradle Tooling API的IDE代码同步为例,其中,Gradle Tooling API是Gradle 提供的一个编程 API,允许开发者执行和监视构建,并向Gradle 查询构建的详细信息。若本地服务器101是一个独立的物理服务器上,则一个基于Apache Ant 和 Apache Maven 概念的项目自动化开源构建工具(Gradle)和IDE可以运行在该本地服务器101上;若本地服务器101是多个物理服务器组成的服务器集群或者分布式系统,则Gradle可以运行在本地服务器101中的至少一个物理服务器上,IDE可以运行在本地服务器101中的至少一个上物理服务器上, Gradle和IDE也可以运行在本地服务器101中相同或不同的至少一个物理服务器上。
在一个可选的实施例中,远端服务器102可以存在,也可以不存在,针对不存在的实施环境,目标模块(待开发模块)之外的其他模块的编译文件可以存储在至少一个本地服务器101上;图1以远端服务器102存在为例;远端服务器102可以用于管理编译文件,例如远端服务器102上部署Maven(麦文)系统,用于管理代码编译后的编译文件,编译文件可以为二进制归档文件,但是不限于此,如AAR(或称为aar);其中,AAR(Android Archive)为一个Android 库项目的二进制归档文件。其中,远端服务器102可以是独立的物理服务器,也可以是多个物理服务器否成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(ContentDelivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。
本地服务器101可以通过有线或无线通信方式与服务器102进行直接或间接地连接,本公开实施例对此不进行限定。
本领域技术人员可以知晓,上述本地服务器101对应的物理设备的数量可以更多或更少。本公开实施例对本地服务器101对应的物理设备的数量和设备类型不加以限定。
图2是根据一示意性实施例示出的一种代码同步方法的流程图,参见图2所示,该代码同步方法应用于计算机设备,下面以计算机设备为本地服务器为例进行说明。
在步骤201中,响应于代码同步的启动事件,确定选定模块集合中的目标模块;其中,目标模块为待开发模块。
在一个项目需要进行模块开发时,针对辅助开发计算机程序的应用软件,会通过启动事件触发该应用软件的代码同步,其代码同步完成后,可以进行模块开发。
针对一个项目,会对应选定模块集合,该选定模块集合包括该项目可能用到的所有模块,因为各模块之间存在有依赖关系,依赖关系比较复杂,不易于标记,也就是说,不容易在通过依赖关系来确定完全不使用的模块,只能确定待开发模块,即需要开发的模块。
在步骤202中,将选定模块集合中除目标模块之外的其他模块的源码路径替换为其他模块对应的依赖对象;其中,依赖对象用于获取对应其他模块的编译文件。
本步骤中针对目标模块之外的其他模块执行的操作为将选定模块集合中除目标模块之外的其他模块的源码路径替换为其他模块对应的依赖对象,即将其他模块的SourceSet中的内容替换为依赖对象,这里的依赖对象可以为路径信息。
步骤203,提供目标模块的模型信息;其中,模型信息用于完成目标模块的代码同步。
本实施例中通过将选定模块集合中除目标模块之外的其他模块的源码路径替换为其他模块对应的依赖对象,保留了选定模块集合中的各模块的拓扑结构,使得在后续开发过程中可以通过依赖对象获取编译文件,能够在后续开发过程中使用待开发模块依赖的其他模块的相关功能;并且仅向选定模块集合中的目标模块提供模型信息,用于理解目标模块的相关代码,以完成目标模块的代码同步,大大节省了同步过程中模型信息的解析时间,即节省了代码同步时间;因此,该方案解决了加速代码同步过程,但在后续开发过程中待开发模块依赖的其他模块的相关功能不能使用的问题。
在一些示例中,步骤201中响应于代码同步的启动事件,确定选定模块集合中的目标模块,包括:
响应于启动事件,获取为选定模块集合设定的模块标识;
将模块标识在选定模块集合中对应的模块确定为目标模块。
通过对目标模块进行模块标识,能够快速确定选定模块集合中的目标模块,以及目标模块之外的其他模块。该实现方式不需要考虑代码依赖关系,易于操作。
在一些示例中,步骤203中提供目标模块的模型信息,包括:
响应于在代码同步的过程中针对目标模块产生的同步请求,返回目标模块的模型信息;
将选定模块集合中除目标模块之外的其他模块的源码路径替换为其他模块对应的依赖对象,包括:响应于在代码同步的过程中针对其他模块产生的同步请求,将其他模块的源码路径替换为其他模块对应的依赖对象;
响应于在代码同步的过程中针对其他模块产生的同步请求时,代码同步方法还包括:返回空响应,其中,空响应用于使其他模块在代码同步过程中的模型信息解析过程被跳过。
该示例中给出针对目标模块直接响应模型进行,进行模型信息解析并同步即可;针对其他模块,将源码路径替换为编译文件,不仅保留了模块之间的依赖关系,在后续开发过程中待开发模块依赖的其他模块的相关功能也能够被使用,在响应模型信息时,使用空响应使代码同步过程中其他模块的模型信息解析过程被跳过,大大节省了代码同步时间。
在一些示例中,步骤202中将选定模块集合中除目标模块之外的其他模块的源码路径替换为其他模块对应的依赖对象,包括:
确定其他模块的源码路径的存放区域;
将存放区域清空;
将其他模块对应的依赖对象通过可传递依赖添加到清空后的存放区域。
源码路径存放区域的源码路径不能直接被替换,需要先空壳化操作,再使用可传递依赖API进行依赖对象的添加,实现存放区域内容的替换。
上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。
图3是根据一示意性实施例示出的一种基于空壳化和空响应的代码同步方法的流程图,参见图3所示,该种代码同步方法应用于计算机设备,下面以计算机设备为本地服务器为例进行说明。
在步骤301中,响应于代码同步的启动事件,确定选定模块集合中的目标模块;其中,目标模块为待开发模块。
在一个项目需要进行模块开发时,针对辅助开发计算机程序的应用软件,会通过启动事件触发该应用软件的代码同步,其代码同步完成后,可以进行模块开发。
针对一个项目,会对应选定模块集合,该选定模块集合包括该项目可能用到的所有模块,因为各模块之间存在有依赖关系,依赖关系比较复杂,不易于标记,也就是说,不容易在通过依赖关系来确定完全不使用的模块,只能确定待开发模块,即需要开发的模块。
在步骤302中,响应于对目标模块的确定完成,获取每个其他模块对应的依赖对象。
其中,每个其他模块的编译文件是通过依赖对象获取的。
在确定目标模块之后,获取每个其他模块对应的依赖对象,这里的依赖对象可以为编译文件的路径信息,编译文件可以为AAR。
获取依赖对象时可以从本地服务器获取,也可以从远端服务器获取。
依赖对象对应的编译文件可以从本地服务器获取,也可以从远端服务器获取,本申请实施例中对此不进行限制。
步骤302给出获取其他模块的依赖对象的时机。
在步骤303中,响应于在代码同步的过程中针对目标模块产生的同步请求,返回目标模块的模型信息;其中,模型信息用于完成目标模块的代码同步。结束本流程。
步骤303中,通过响应于在代码同步的过程中针对目标模块产生的同步请求,对每个目标模块返回模型信息,来实现对所有目标模块的模型信息的返回。
在步骤304中,响应于在代码同步的过程中针对其他模块产生的同步请求,将其他模块的源码路径替换为其他模块对应的依赖对象,并返回空响应,其中,空响应用于使其他模块在代码同步过程中的模型信息解析过程被跳过。
步骤304中通过响应于在代码同步的过程中针对其他模块产生的同步请求,对每个其他模块进行源码路径的替换,并返回空响应,来实现对所有其他模块源码路径替换,以及空响应的返回。
在一些示例中,在代码同步的过程中,针对每个目标模块和其他模块会分别产生同步请求,本实施例中针对目标模块和其他模块的同步请求进行了不同的响应,如步骤303和步骤304中的实现。
在一些实例中,针对不同模块产生的同步请求可以通过单线程,或多线程的方式进行同步请求和响应,本申请实施例中对此不进行限制。
本实施例中在代码同步事件启动时,获取目标模块,以及其他模块的依赖对象;并响应于在代码同步的过程中针对其他模块产生的同步请求时,将其他模块的源码路径替换为其他模块对应的依赖对象,并返回空响应,其中,空响应用于使其他模块在代码同步过程中的模型信息解析过程被跳过。通过对其他模块的如上相关处理,能够对每个模块进行单点化处理;使得在后续开发过程中可以通过依赖对象获取编译文件,进而能够在后续开发过程中使用待开发模块依赖的其他模块的相关功能;并且通过空响应使得所有其他模块跳过模型信息的解析,大大节省了代码同步过程中的模型信息的解析时间,即节省了代码同步时间;因此,该方案解决了加速代码同步过程,但在后续开发过程中待开发模块依赖的其他模块的相关功能不能使用的问题。
在一些示例中,步骤301中响应于代码同步的启动事件,确定选定模块集合中的目标模块,包括:
响应于启动事件,获取为选定模块集合设定的模块标识;
将模块标识在选定模块集合中对应的模块确定为目标模块。
通过对目标模块进行模块标识,能够快速确定选定模块集合中的目标模块,以及目标模块之外的其他模块。该实现方式不需要考虑代码依赖关系,易于操作。
在一些示例中,步骤304中将选定模块集合中其他模块的源码路径替换为其他模块对应的依赖对象,包括:
确定其他模块的源码路径的存放区域;
将存放区域清空;
将其他模块对应的依赖对象通过可传递依赖添加到清空后的存放区域。
由于模块间的依赖关系是一个有向无环图,不能使用依赖对象直接替换源码路径,即依赖对象无法指向源码模块,在本申请的一些示例中,先对源码路径的存放区域进行空壳化操作,再使用可传递依赖API进行依赖对象的添加,实现存放区域内容的替换。
上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。
下面给出结合本实施例的代码同步架构图详细说明本实施例实现代码同步的一种的过程。图4是根据一示例性实施例示出的一种代码同步的架构示意图。如图4所示,该示意图中包括本地服务器和远端服务器。该实施例包括以下步骤:
第一步、开始。
在一些示例中在一个项目需要进行模块开发时,针对辅助开发计算机程序的应用软件,会通过启动事件触发该应用软件的代码同步,其代码同步完成后,可以进行模块开发。
本地服务器可以通过开发界面上的某个按钮进行触发,以一种IDE,AndroidStudio开发的Intellij IDEA为例,可以通过界面上的按钮实现:开始SyncProject with Gradle Files。
第二步、本地服务器获取配置信息,确定出选定模块集合中的目标模块和其他模块。
其中,目标模块为待开发模块,其他模块为目标模块之外的模块,即非目标模块。
这里的配置信息可以包括选定模块集合,以及选定模块集合中的目标模块。
针对一个项目,会对应选定模块集合,该选定模块集合包括该项目可能用到的所有模块,因为各模块之间存在有依赖关系,依赖关系比较复杂,不易于标记,也就是说,不容易在通过依赖关系来确定完全不使用的模块,本实施例中只需要选定目标模块即可,不需要预先标记模块之间的依赖关系,能够更容易地实现加速代码同步过程。
具体实现时,可以通过配置文件的方式进行配置,也可以通过提供的界面进行点击选择的方式生成配置信息,基于选定模块集合,以及目标模块可以确定哪个模块是目标模块,哪个模块是目标模块之外的其他模块。
具体实现时,获取为选定模块集合设定的模块标识;
将模块标识在选定模块集合中对应的模块确定为目标模块。
第三步、本地服务器从远端服务器获取确定的每个其他模块对应的依赖对象。
其中,其他模块的依赖对象用于获取该其他模块对应的编译文件,因此,这个依赖对象可以为其他模块的编译文件的路径信息,这里的编译文件可以为AAR。
这里的依赖对象可以从本地服务器获取,也可以远端服务器获取,本实施例以从远端服务器获取为例。
第四步、响应于在代码同步的过程中针对目标模块产生的同步请求,返回目标模块的模型信息;其中,模型信息用于完成目标模块的代码同步。执行第六步。
通过响应于在代码同步的过程中针对每个目标模块产生的同步请求,对每个目标模块返回模型信息,来实现对所有目标模块的模型信息的返回。
第五步、响应于在代码同步的过程中针对其他模块产生的同步请求,将其他模块的源码路径替换为其他模块对应的依赖对象,并返回空响应,其中,空响应用于使其他模块在代码同步过程中的模型信息解析过程被跳过。
通过响应于在代码同步的过程中针对每个其他模块产生的同步请求,对每个其他模块进行源码路径替换,并返回空响应实现对所有其他模块的源码路径的替换,以及内容为空的模型信息的响应。
第六步、基于返回的目标模块的模型信息进行模型信息解析完成目标模块的代码同步;基于其他模块的空响应跳过其他模块的模型信息的解析,完成其他模块的代码同步。
在一些示例中,基于IDE进程和自动化构建开源工具(Gradle)进程的交互,通过同步请求,触发模型信息的获取。
以IDE中的Tooling Api 作为 Gradle 提供的一个编程API,允许开发者执行和监视构建,并向Gradle 查询构建的详细信息,IDE,如Android Studio在同步时和Gradle交互为例。安卓开发环境(Android Studio )同步一个源码模块时通过跨进程通信询问 Gradle进程获取Model 信息来进行后续的源码理解。图5是根据一示例性实施例示出的一种代码同步中模型信息获取流程示意图。
步骤501、Android Studio通过开源工具接口(Gradle Tooling Api)向Gradle发出同步请求(sync)。
步骤502,Gradle返回模型信息(getModel)。
Gradle若确定接收到的同步请求指定的模块是目标模块时,获取同步信息,并向Android Studio返回对应目标模块的模型信息;若确定接收到的同步请求指定的模块是其他模块,则使用获取的该其他模块的依赖对象替换其源码路径,并返回空的模型信息。
由于模块间的依赖关系是一个有向无环图(DAG),因此,依赖对象无法直接指向其他模块,因此,不能使用依赖对象直接替换源码路径,在一个示例中,采用空壳化实现这一替换。
确定其他模块的源码路径的存放区域;
将存放区域清空;
将其他模块对应的依赖对象通过可传递依赖添加到清空后的存放区域。
这里的将存放区域情况,具体指将其他模块的sourceSet置空,通过可传递依赖(API)在置空后的sourceSet中添加其他模块的依赖对象。
图6是根据一示例性实施例示出的一种初始模块依赖示意图。图6中模块C为目标模块,模块A、模块B和模块D为其他模块;由图6中箭头所示,可见模块A依赖模块B和模块C,模块C和模块B均依赖模块D。
相关技术中直接不加载模块A、模块B和模块D,这样的实现会导致模块之间的依赖关系拓扑图未被保留,这个拓扑图对编译影响很大,因此,这个拓扑图应该被保留。
在一些实例中,为了加速IDE代码同步过程,且保留模块之间依赖关系对应的拓扑图采用了上述源码路径替换的实现方式。
图7是根据一示例性实施例示出的一种代码同步中的模块依赖关系图。在实现时,对待开发模块(模块C)的源码路径不进行替换;对其他模块(模块A、模块B和模块D)进行源码路径的替换。
具体实现时,以针对模块A的实现为例:
将模块A中容纳源码 (.java,.kt)的sourceSet 置空,通过可传递依赖(API)将模块A对应的传递对象添加到置空的sourceSet中。
基于此实现,不需要预先获知模块之间的依赖关系,即可保留各模块之间的依赖关系(模块之间的拓扑结构)。
模块中的源码(.java,.kt)过多导致 IDE 卡和慢;在使用到对应的其他模块时,使用编译文件替换源码,既可以使用其他模块的相关功能,又可以极大减轻IDE理解源码所需要的工作,进而起到加速IDE代码同步的效果。
步骤503,Android Studio解析模型信息(resolve model)。
针对目标模块的模型信息采用相关技术中的解析方式进行解析即可;
针对其他模块的模型信息,因为是空的,相当于跳过其他模块的模型信息的解析,也不会进行后续的其他工作。
因此,如上图6中的依赖关系中,IDE仅需要解析目标模块C的模型进行,进而理解目标模块C中的代码,针对其他模块A、B和D中的模型代码会跳过解析,后续也不会进行代码的理解。
第七步、完成。
当所有其他模块和目标模块的代码同步均完成时,完成IDE的代码同步。
当需要使用其他模块的相关功能时,通过依赖对象获取其他模块对应的编译文件,这里的编译文件满足如下条件即可:
编译文件的POM(project object model,项目对象模型)中不用携带模块之间的依赖关系;
编译文件中包括项目源码(.java,.kt),以及编译期生成的源码(apt,buildConfig 等)。
其中的编译文件可以为AAR,该AAR可以发布在远端服务器的Maven上。若AAR是发布在Maven上,还需生成基于规则的AAR 版本号,用于发布方和使用方做关联,如,可以为模块的git签名信息git rev-parse HEAD:path作为版本号。
远端服务器可以在感知到代码变化,如MR合入主干分支等情况发生时,生成AAR并发布到Maven。
本公开具体实现时,不限于上述AAR的生成方式,只要是预先生成的AAR即可使用;在加速IDE代码同步过程中,只要获取编译文件的路径信息作为依赖对象,在需要使用其他模块的相关功能时,通过依赖对象获取编译文件进行相关功能使用即可。
本实施例中通过本实施例中在代码同步事件启动时,获取目标模块,以及其他模块的依赖对象;并响应于在代码同步的过程中针对其他模块产生的同步请求时,将其他模块的源码路径替换为其他模块对应的依赖对象,并返回空响应,其中,空响应用于使其他模块在代码同步过程中的模型信息解析过程被跳过。如上相关处理,无需考虑模块之间的依赖关系,能够对每个模块进行单点化配置;使得在后续开发过程中可以通过依赖对象获取编译文件,进而能够在后续开发过程中使用待开发模块依赖的其他模块的相关功能,如搜索、可跳转(跳转的是编译文件而非模块的源代码)等;并且通过空响应使得所有其他模块跳过模型信息的解析,大大节省了代码同步过程中的模型信息的解析时间,即节省了代码同步时间,加快了IDE的代码同步过程。因此,该方案解决了加速代码同步过程,但在后续开发过程中待开发模块依赖的其他模块的相关功能不能使用的问题。
图8是根据一示意性实施例示出的一种代码同步装置的逻辑结构框图,参见图8所示,该代码同步装置包括:
确定模块801,被配置为执行响应于代码同步的启动事件,确定选定模块集合中的目标模块;其中,目标模块为待开发模块;
替换模块802,被配置为执行将选定模块集合中除目标模块之外的其他模块的源码路径替换为其他模块对应的依赖对象,其中,依赖对象用于获取其他模块的编译文件;
提供模块803,被配置为执行提供目标模块的模型信息,其中,模型信息用于完成目标模块的代码同步。
在一种可能实施方式中,
替换模块802,具体被配置为执行响应于在代码同步的过程中针对其他模块产生的同步请求,将其他模块的源码路径替换为其他模块对应的依赖对象。
在一种可能实施例中,
提供模块803,进一步被配置为执行响应于在代码同步的过程中针对其他模块产生的同步请求时,返回空响应,其中,空响应用于使其他模块在代码同步过程中的模型信息解析过程被跳过。
在一种可能实施方式中,
确定模块801,具体被配置为执行响应于启动事件,获取为选定模块集合设定的模块标识;将模块标识在选定模块集合中对应的模块确定为目标模块。
在一种可能实施例方式中,
替换模块802,进一步被配置为执行响应于对目标模块的确定完成,获取每个其他模块对应的依赖对象;其中,每个其他模块的编译文件是通过依赖对象获取的。
在一种可能实施方式中,
替换模块802,具体被配置为执行确定其他模块的源码路径的存放区域;将存放区域清空;将其他模块对应的依赖对象通过可传递依赖添加到清空后的存放区域。
在一种可能实施方式中,
提供模块803,具体被配置为执行响应于在所述代码同步的过程中针对所述目标模块产生的同步请求,返回所述目标模块的所述模型信息。
在一种可能实施方式中,
所述编译文件为二进制归档文件。
本实施例中在代码同步事件启动时,获取目标模块,以及其他模块的依赖对象;并响应于在代码同步的过程中针对其他模块产生的同步请求时,将其他模块的源码路径替换为其他模块对应的依赖对象,并返回空响应,其中,空响应用于使其他模块在代码同步过程中的模型信息解析过程被跳过。通过对其他模块的如上相关处理,能够对每个模块进行单点化处理;使得在后续开发过程中可以通过依赖对象获取编译文件,进而能够在后续开发过程中使用待开发模块依赖的其他模块的相关功能;并且通过空响应使得所有其他模块跳过模型信息的解析,大大节省了代码同步过程中的模型信息的解析时间,即节省了代码同步时间;因此,该方案解决了加速代码同步过程,但在后续开发过程中待开发模块依赖的其他模块的相关功能不能使用的问题。
上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。
关于上述实施例中的代码同步装置,其中各个模块执行操作的具体方式已经在有关该代码同步方法的实施例中进行了详细描述,此处将不作详细阐述说明。
需要说明的是:上述实施例仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
图9是本公开实施例提供的一种电子设备的结构示意图。在一些实施例中,该电子设备为本地服务器。该电子设备900可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(Central ProcessingUnits,CPU)901和一个或一个以上的存储器902,其中,该存储器902中存储有至少一条程序代码,该至少一条程序代码由该处理器901加载并执行以实现上述各个实施例提供的代码同步方法。当然,该电子设备900还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该电子设备900还可以包括其他用于实现设备功能的部件,在此不做赘述。
在示例性实施例中,还提供了一种包括至少一条指令的计算机可读存储介质,例如包括至少一条指令的存储器,上述至少一条指令可由计算机设备中的处理器执行以完成上述实施例中的代码同步方法。
可选地,上述计算机可读存储介质可以是非临时性计算机可读存储介质,例如,该非临时性计算机可读存储介质可以包括ROM(Read-Only Memory,只读存储器)、RAM(Random-Access Memory,随机存取存储器)、CD-ROM(Compact Disc Read-Only Memory,只读光盘)、磁带、软盘和光数据存储设备等。
在示例性实施例中,还提供了一种计算机程序产品,包括一条或多条指令,该一条或多条指令可以由计算机设备的处理器执行,以完成上述各个实施例提供的代码同步方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (8)
1.一种代码同步方法,其特征在于,所述代码同步方法包括:
响应于代码同步的启动事件,确定选定模块集合中的目标模块;其中,所述目标模块为待开发模块;
将所述选定模块集合中除所述目标模块之外的其他模块的源码路径替换为所述其他模块对应的依赖对象,其中,所述依赖对象用于获取所述其他模块的编译文件;
提供所述目标模块的模型信息,其中,所述模型信息用于完成所述目标模块的代码同步;
其中,所述将所述选定模块集合中除所述目标模块之外的其他模块的源码路径替换为所述其他模块对应的依赖对象,包括:
响应于在所述代码同步的过程中针对所述其他模块产生的同步请求,将所述其他模块的源码路径替换为所述其他模块对应的所述依赖对象;
其中,所述响应于在所述代码同步的过程中针对所述其他模块产生的同步请求时,所述代码同步方法还包括:
返回空响应,其中,所述空响应用于使所述其他模块在代码同步过程中的模型信息解析过程被跳过。
2.根据权利要求1所述的代码同步方法,其特征在于,所述响应于代码同步的启动事件,确定选定模块集合中的目标模块,包括:
响应于所述启动事件,获取为所述选定模块集合设定的模块标识;
将所述模块标识在所述选定模块集合中对应的模块确定为所述目标模块。
3.根据权利要求1所述的代码同步方法,其特征在于,所述代码同步方法还包括:
响应于对所述目标模块的确定完成,获取每个所述其他模块对应的所述依赖对象;
其中,每个所述其他模块的所述编译文件是通过所述依赖对象获取的。
4.根据权利要求1所述的代码同步方法,其特征在于,所述将所述选定模块集合中除所述目标模块之外的其他模块的源码路径替换为所述其他模块对应的依赖对象,包括:
确定所述其他模块的源码路径的存放区域;
将所述存放区域清空;
将所述其他模块对应的所述依赖对象通过可传递依赖添加到清空后的所述存放区域。
5.根据权利要求1-4任一项所述的代码同步方法,其特征在于,所述提供所述目标模块的模型信息,包括:
响应于在所述代码同步的过程中针对所述目标模块产生的同步请求,返回所述目标模块的所述模型信息。
6.一种代码同步装置,其特征在于,所述代码同步装置包括:
确定模块,被配置为执行响应于代码同步的启动事件,确定选定模块集合中的目标模块;其中,所述目标模块为待开发模块;
替换模块,被配置为执行将所述选定模块集合中除所述目标模块之外的其他模块的源码路径替换为所述其他模块对应的依赖对象,其中,所述依赖对象用于获取所述其他模块的编译文件;
提供模块,被配置为执行提供所述目标模块的模型信息,其中,所述模型信息用于完成所述目标模块的代码同步;
其中,
所述替换模块,被配置为执行将所述选定模块集合中除所述目标模块之外的其他模块的源码路径替换为所述其他模块对应的依赖对象时,包括:响应于在所述代码同步的过程中针对所述其他模块产生的同步请求,将所述其他模块的源码路径替换为所述其他模块对应的所述依赖对象;
其中,
所述提供模块,进一步被配置为执行响应于在所述代码同步的过程中针对所述其他模块产生的同步请求时,返回空响应,其中,所述空响应用于使所述其他模块在代码同步过程中的模型信息解析过程被跳过。
7.一种电子设备,其特征在于,包括:
处理器;
用于存储所述处理器的可执行指令的存储器;
其中,所述处理器被配置为执行所述可执行指令,以实现如权利要求1至5任一项所述的代码同步方法。
8.一种计算机可读存储介质,其特征在于,当所述计算机可读存储介质中的至少一条指令被电子设备的处理器执行时,使得所述电子设备能够实现如权利要求1至5任一项所述的代码同步方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210850796.4A CN114924788B (zh) | 2022-07-20 | 2022-07-20 | 代码同步方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210850796.4A CN114924788B (zh) | 2022-07-20 | 2022-07-20 | 代码同步方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114924788A CN114924788A (zh) | 2022-08-19 |
CN114924788B true CN114924788B (zh) | 2022-12-27 |
Family
ID=82815730
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210850796.4A Active CN114924788B (zh) | 2022-07-20 | 2022-07-20 | 代码同步方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114924788B (zh) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9678855B2 (en) * | 2014-12-30 | 2017-06-13 | International Business Machines Corporation | Managing assertions while compiling and debugging source code |
CN113132805B (zh) * | 2019-12-31 | 2022-08-23 | Tcl科技集团股份有限公司 | 一种播放控制方法、系统、智能终端及存储介质 |
CN111796831B (zh) * | 2020-06-24 | 2023-02-28 | 苏州大学 | 一种多芯片兼容的编译方法和装置 |
CN112965720B (zh) * | 2021-02-19 | 2024-06-18 | 上海微盟企业发展有限公司 | 一种组件编译方法、装置、设备及计算机可读存储介质 |
CN114153480B (zh) * | 2021-12-06 | 2024-09-20 | 北京金堤科技有限公司 | 代码同步、组件发布方法及其装置、计算机存储介质 |
CN114461217A (zh) * | 2021-12-23 | 2022-05-10 | 北京达佳互联信息技术有限公司 | 代码编译方法、装置、电子设备及存储介质 |
-
2022
- 2022-07-20 CN CN202210850796.4A patent/CN114924788B/zh active Active
Non-Patent Citations (1)
Title |
---|
嵌入式软件源码级交叉调试器的设计与实现;乔容等;《舰船电子工程》;20040620(第03期);56-59+101 * |
Also Published As
Publication number | Publication date |
---|---|
CN114924788A (zh) | 2022-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108229686B (zh) | 模型训练、预测方法、装置、电子设备及机器学习平台 | |
US10095499B2 (en) | Optimization for multi-project package manager | |
CN106708740B (zh) | 脚本测试方法及装置 | |
US10120658B2 (en) | Method and system for realizing software development tasks | |
WO2022121971A1 (zh) | 前端项目处理方法、装置、设备、管理系统及存储介质 | |
JP2017091531A (ja) | ソースコード管理(scm)システムから製品ライフサイクル管理(plm)システムへの階層的なデータのエクスポート | |
CN110737437A (zh) | 一种基于代码集成的编译方法和装置 | |
CN114780138B (zh) | 流场模拟软件代码版本管理方法、装置和存储介质 | |
CN114924788B (zh) | 代码同步方法和装置 | |
CN112579077B (zh) | 应用中的页面处理方法、装置、应用服务平台及设备 | |
CN111967137B (zh) | 一种半导体设备建模方法及装置 | |
CN117667109A (zh) | 一种环境部署方法、装置、电子设备及存储介质 | |
CN116719735A (zh) | 一种测试用例生成方法及装置 | |
CN115469844A (zh) | 代码处理方法、系统、计算机集群、介质及程序产品 | |
JP2017091532A (ja) | 製品ライフサイクル管理(plm)システムからソースコード管理(scm)システムへの階層的なデータのエクスポート | |
CN113268332A (zh) | 持续集成方法及装置 | |
CN112363700A (zh) | 智能合约的协同创建方法、装置、计算机设备和存储介质 | |
CN114648026B (zh) | 一种多云环境下的资源交付方法、系统及存储介质 | |
CN106775629B (zh) | 搜索文件生成方法及装置 | |
CN110737429A (zh) | 一种利用Makefile自身的依赖关系的模块化编译方法和装置 | |
US20240248689A1 (en) | Determining dependencies in workspaces | |
CN116028138B (zh) | 应用发布方法及装置 | |
CN114386831A (zh) | 数据处理方法、装置、电子设备和存储介质 | |
CN113626046A (zh) | 容器镜像更新方法、装置、存储介质及计算机设备 | |
KR101866086B1 (ko) | 재사용 기반의 가상 클러스터 구축 방법 및 장치 |
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 |