CN110597518A - 项目构建方法、装置、计算机设备和存储介质 - Google Patents
项目构建方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN110597518A CN110597518A CN201910874707.8A CN201910874707A CN110597518A CN 110597518 A CN110597518 A CN 110597518A CN 201910874707 A CN201910874707 A CN 201910874707A CN 110597518 A CN110597518 A CN 110597518A
- Authority
- CN
- China
- Prior art keywords
- branch
- module
- project
- current
- source code
- 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.)
- Granted
Links
Classifications
-
- 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/44—Encoding
-
- 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/52—Binary to binary
-
- 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
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)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请涉及一种项目构建方法、装置、计算机设备和存储介质。所述方法包括:接收项目构建指令,所述项目构建指令携带有项目标识;查询与所述项目标识对应的配置文件,并解析所述配置文件得到项目中的模块对应的模块信息;遍历所述模块信息,以判断当前模块是否需要进行源码构建;当所述当前模块进行源码构建时,则获取所述当前模块对应的源码仓库;根据所述当前模块的模块信息,为所述当前模块配置对应的配置分支;根据所述配置分支将所述源码仓库添加到所述项目中;继续遍历所述模块信息,直至所述项目中的每个模块的模块信息均被遍历到。采用本方法能够简化操作。
Description
技术领域
本申请涉及代码处理技术领域,特别是涉及一种项目构建方法、装置、计算机设备和存储介质。
背景技术
在大型Android客户端项目发中,随着业务需求的增长,通常会根据业务模块、功能层次将项目划分为多个独立的模块,每个模块使用独立的git仓库管理。git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具,Gradle是Android项目目前默认使用的构建工具。
通常每个git仓库中的Android模块会使用gradle语法来导入对其他模块依赖,这些依赖是同步发布到远程maven仓库的,同时每个模块自身也是一个依赖项,每次模块代码改动后,需要修改模块的版本号,重新编译打包并推送新的二进制代码到远程maven仓库中,即进行二进制构建。由于每个模块是独立仓库、独立声明库的依赖,每个模块的代码更新,都需要更新版本号,如果有其他模块依赖该变动代码的模块,其他模块需要及时更新该模块的最新依赖版本号才能使用到最新的代码。
在开发阶段,如果一个模块的代码涉及多个模块,多个模块需要进行并行协同开发,此时会出现需要频繁进行推送至远程maven仓库、修改模块依赖版本号的操作。
发明内容
基于此,有必要针对上述技术问题,提供一种能够简化操作的项目构建方法、装置、计算机设备和存储介质。
一种项目构建方法,所述方法包括:
接收项目构建指令,所述项目构建指令携带有项目标识;
查询与所述项目标识对应的配置文件,并解析所述配置文件得到项目中的模块对应的模块信息;
遍历所述模块信息,以判断当前模块是否需要进行源码构建;
当所述当前模块进行源码构建时,则获取所述当前模块对应的源码仓库;
根据所述当前模块的模块信息,为所述当前模块配置对应的配置分支;
根据所述配置分支将所述源码仓库添加到所述项目中;
继续遍历所述模块信息,直至所述项目中的每个模块的模块信息均被遍历到。
在其中一个实施例中,所述获取所述当前模块对应的源码仓库,包括:
判断所述当前模块对应的源码仓库在本地文件夹中是否存在;
若不存在,则从远程端下载所述当前模块对应的源码仓库;
若存在,则获取本地文件夹中的源码仓库。
在其中一个实施例中,所述根据所述当前模块的模块信息,为所述当前模块配置对应的配置分支,包括:
判断所述当前模块的模块信息中是否存在指定分支;
当不存在指定分支时,则获取所述当前模块对应的当前分支,并将所述当前分支作为所述当前模块的配置分支;
当存在指定分支时,则获取所述当前模块的模块信息中的指定分支以及所述当前模块对应的当前分支,并根据所述指定分支和所述当前分支为所述当前模块配置对应的配置分支。
在其中一个实施例中,所述根据所述指定分支和所述当前分支为所述当前模块配置对应的配置分支,包括:
当所述指定分支和所述当前分支不一致时,则判断本地仓库中是否存在未暂存的修改代码;
当存在未暂存的修改代码,则输出针对未暂存的修改代码的提醒信息;
当不存在未暂存的修改代码且指定分支为远程分支时,则将所述远程分支配置为所述当前模块的配置分支,并根据所述远程分支更新所述源码仓库;
当不存在未暂存的修改代码且指定分支不为远程分支时,则根据所述指定分支创建本地分支,并将所创建的本地分支配置为所述当前模块的配置分支。
在其中一个实施例中,所述方法还包括:
当所述指定分支和所述当前分支一致,且所述指定分支为远程分支时,则将所述远程分支配置为所述当前模块的配置分支,并根据所述远程分支更新所述源码仓库。
在其中一个实施例中,所述根据所述配置分支将所述源码仓库添加到所述项目中,包括:
将所述当前模块的配置信息中的名称作为模块名称,配置分支作为当前模块的绝对路径,源码仓库作为项目的子模块项目,添加到所述项目中。
在其中一个实施例中,所述根据所述配置分支将所述源码仓库添加到所述项目中之后,还包括:
判断所述当前模块是否存在对应的远程依赖;
若存在,则删除所述远程依赖。
一种项目构建装置,所述装置包括:
接收模块,用于接收项目构建指令,所述项目构建指令携带有项目标识;
查询模块,用于查询与所述项目标识对应的配置文件,并解析所述配置文件得到项目中的模块对应的模块信息;
遍历模块,用于遍历所述模块信息,以判断当前模块是否需要进行源码构建;
源码处理模块,用于当所述当前模块进行源码构建时,则获取所述当前模块对应的源码仓库;
分支处理模块,用于根据所述当前模块的模块信息,为所述当前模块配置对应的配置分支;
依赖处理模块,用于根据所述配置分支将所述源码仓库添加到所述项目中;
循环模块,用于继续遍历所述模块信息,直至所述项目中的每个模块的模块信息均被遍历到。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的方法的步骤。
上述项目构建方法、装置、计算机设备和存储介质,在接收到项目构建指令后,查询项目标识对应的配置文件,并基于该配置文件在本地进行源码构建,即首先获取到源码仓库,然后为每个模块配置对应的配置分支,最后根据所配置的配置分支将源码仓库添加到项目中,这样在每个模块的代码更新后,不需要频繁地推送至远程,进行二进制构建,可以方便代码的改动和调试。
附图说明
图1为一个实施例中项目构建方法的应用场景图;
图2为一个实施例中项目构建方法的流程示意图;
图3为另一个实施例中的项目构建方法的流程图;
图4为一个实施例中项目构建装置的结构框图;
图5为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的项目构建方法,可以应用于如图1所示的应用环境中。其中,服务器102通过网络与数据库104进行通信。服务器102可以接收到项目构建指令,并根据项目构建指令中的项目标识查询对应的配置文件,并解析配置文件得到项目中的模块对应的模块信息,从而可以遍历每一个模块,判断当前模块是否需要进行源码构建;当当前模块进行源码构建时,则获取当前模块对应的源码仓库;根据当前模块的模块信息,为当前模块配置对应的配置分支;根据配置分支将源码仓库添加到项目中,继续遍历模块信息,直至项目中的每个模块的模块信息均被遍历到,从而完成项目的源码构建,这样在每个模块的代码更新后,不需要频繁地推送至远程,进行二进制构建,可以方便代码的改动和调试。其中,服务器102可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图2所示,提供了一种项目构建方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
S202:接收项目构建指令,项目构建指令携带有项目标识。
具体地,项目标识是用于唯一标识项目的符号,根据该项目标识可以查询到对应的项目,项目构建指令是由研发人员输入至服务器的,其指定了特定的项目。此处所提到的项目包括但不限于Android项目,可以为任何基于gradle构建的开发项目。
S204:查询与项目标识对应的配置文件,并解析配置文件得到项目中的模块对应的模块信息。
具体地,配置文件是用于管理项目的各个模块的结构模型,其可以是xml文件,且在配置文件中每个模块的配置信息可以包括至少以下五个参数,且该五个参数中可以包括空白参数:原仓库地址、maven地址、源码构建时的分支、路径以及开关。其中原仓库地址是标识每个模块的远程git地址;源码构建时的分支是标识本次构建的git分支,即指定分支;路径是指模块在git项目中的文件夹,该参数是因为一个git仓库可以包括多个模块;maven地址是标识模块在maven中的依赖定义,也即远程分支;开关是用于标识模块是源码构建还是二进制构建,修改该开关可以实时切换源码构建和二进制构建。
在项目构建的时候,服务器首先解析上述的配置文件以得到项目中存在的模块,以及每个模块配置的模块信息。
S206:遍历模块信息,以判断当前模块是否需要进行源码构建。
具体地,服务器依次遍历配置文件中的每个模块的模块信息,例如服务器可以按照预先设定的顺序,例如模块在配置文件中的顺序进行遍历,其中配置文件中的模块的顺序可以是根据模块的修改时间进行的,例如代码修改后持续的时间最短,则排在前面。服务器通过判断每个模块的开关这个参数来判断模块是否开启了源码构建。如果开启了源码构建,则仅需要在本地进行源码构建,而不再需要远程构建,这样就不用频繁地推送远程仓库,并修改模块依赖版本号的操作。
另外,研发人员可以随时修改对应模块是使用源码构建还是二进制构建的,修改配置文件后,进行重新构建,所有流程会全部重新处理。这样基于配置文件配置管理多个模块项目,可以在源码依赖和二进制依赖之间快速切换,并具有一定的自动化处理源码模块的仓库切换。
S208:若当前模块进行源码构建时,则获取当前模块对应的源码仓库。
具体地,当服务器根据开关参数判断出当前模块是进行源码构建的时候,则服务器获取到当前模块对应的源码仓库,例如服务器可以首先判断本地是否存在与当前模块对应的源码仓库,如果不存在,则从远程端下载等,从而获取到当前模块对应的最新的代码。服务器可以根据上述的原仓库地址、maven地址或者原仓库地址、maven地址和路径获取到最新的代码。
S210:根据当前模块的模块信息,为当前模块配置对应的配置分支。
具体地,服务器可以根据上述的分支或者是远程依赖获取到当前模块对应的配置分支,例如,可以根据模块的当前分支、远程分支以及指定分支来为当前模块配置对应的分支。
S212:根据配置分支将源码仓库添加到项目中。
具体地,服务器可以使用gradle settings plugin的include语法将模块配置的name作为模块名称,将模块的源码仓库作为模块的绝对路径,将模块源码作为当前项目的子模块项目。
S214:继续遍历模块信息,直至项目中的每个模块的模块信息均被遍历到。
具体地,服务器按照配置文件中的模块依次处理,直至所有的模块均被处理完,则表示本次构建完成。
且可选地,上述整个方法可以封装在gradle插件中,从而研发人员只需要使用gradle导入该插件依赖,然后基于当前项目的模块在配置文件中配置各个模块的信息即可,从而研发人员仅需要修改配置文件即可以实现对项目的管理,从而进行源码构建或者是二进制构建。
此外,如果项目不存在远程管理,即远程构建,上述方法还可以作为一个项目包含多个git仓库模块的管理方式,使用配置文件组织、管理多个散落在不同git仓库的模块的依赖关系,统一进行项目构建。
上述项目构建方法,在接收到项目构建指令后,查询项目标识对应的配置文件,并基于该配置文件在本地进行源码构建,即首先获取到源码仓库,然后为每个模块配置对应的配置分支,最后根据所配置的配置分支将源码仓库添加到项目中,这样在每个模块的代码更新后,仅需要在本地根据配置文件进行源码构建,不需要频繁地推送至远程,进行二进制构建,可以方便代码的改动和调试。
在其中一个实施例中,获取当前模块对应的源码仓库,包括:判断当前模块对应的源码仓库在本地文件夹中是否存在;若不存在,则从远程端下载当前模块对应的源码仓库;若存在,则获取本地文件夹中的源码仓库。
具体地,该步骤是为了获取到模块的源码仓库,如果存在远程管理的话,则服务器首先判断本地文件夹是否存在,此处可以通过名称来判断,不存在的话,再从远程端下载当前模块对应的源码仓库,即通过git clone命令进行下载,否则直接获取到本地文件夹中的源码仓库即可。
在实际应用中,这里的本地文件夹默认为当前构建项目父目录下一个名为subModules的文件夹下,即同级的subModules的文件夹,如果不存在该文件夹,会首先创建该文件夹,再在该文件夹下执行git clone命令拉取模块代码。这个文件夹下保存了所有源码构建的模块的git仓库。
上述实施例中,通过名称来判断本地是否存在当前模块对应的源码仓库,如果不存在,则可以从远程端进行下载,即从远程git数据库进行下载,保证了代码是最新的。
在其中一个实施例中,根据当前模块的模块信息,为当前模块配置对应的配置分支,包括:判断当前模块的模块信息中是否存在指定分支;当不存在指定分支时,则获取当前模块对应的当前分支,并将当前分支作为当前模块的配置分支;当存在指定分支时,则获取当前模块的模块信息中的指定分支以及当前模块对应的当前分支,并根据指定分支和当前分支为当前模块配置对应的配置分支。
在其中一个实施例中,根据指定分支和当前分支为当前模块配置对应的配置分支,包括:当指定分支和当前分支不一致时,则判断本地仓库中是否存在未暂存的修改代码;当存在未暂存的修改代码,则输出针对未暂存的修改代码的提醒信息;当不存在未暂存的修改代码且指定分支为远程分支时,则将远程分支配置为当前模块的配置分支,并根据远程分支更新源码仓库;当不存在未暂存的修改代码且指定分支不为远程分支时,则根据指定分支创建本地分支,并将所创建的本地分支配置为当前模块的配置分支。
在其中一个实施例中,上述方法还可以包括:当指定分支和当前分支一致,且指定分支为远程分支时,则将远程分支配置为当前模块的配置分支,并根据远程分支更新源码仓库。
具体地,在该实施例中,服务器采取一些默认的分支处理策略来为当前模块设置配置分支,也就将当前模块在项目中的位置以及对应对其他的模块的依赖关系进行配置。服务器根据配置文件中的指定分支、当前模块的当前分支来设置当前模块的配置分支,且如果存在远程分支,即引入了maven仓库,则服务器还可以根据定分支、当前模块的当前分支以及远程分支来设置当前模块的配置分支。其中远程分支是用户在repo.xml中通过branch配置的。
服务器首先判断配置文件xml中是否存在指定分支,当不存在指定分支时,则获取当前模块对应的当前分支,并将当前分支作为当前模块的配置分支,当前分支的获取方式可以是通过在主项目git仓库路径下执行git rev-parse--abbrev-ref HEAD获取到。
如果存在了指定分支,则需要判断指定分支与当前分支是否不相符,其中当前分支的获取方式可以是通过在主项目git仓库路径下执行git rev-parse--abbrev-ref HEAD获取到。然后服务器根据指定分支和当前分支来为当前模块配置对应的配置分支,具体可以包括:
服务器判断当前分支和指定分支是否一致,如果当前分支和指定分支不一致,则判断当前模块在本地仓库中是否有未暂存的修改代码,其中判断方式是:在当前模块的git路径下执行git status-s命令,判断输出中是否为空字符,如果不是为空,则则有未暂存的修改。当服务器判定存在未暂存的代码时,则停止当前源码构建流程,并且输出针对未暂存的修改代码的提醒信息,此时研发人员可以选择将未暂存的修改提交,即生成一个commit记录或者是丢弃当前修改,服务器处理完成之后重新进行源码构建时就可以正常为当前模块设置配置分支了。当服务器判定不存在未暂存的修改代码时,则判断指定分支是否为远程分支,如果是远程分支,则将远程分支配置为当前模块的配置分支,并根据远程分支更新源码仓库,即如果配置的是远程分支则本地没有代码修改,则会执行git命令git pull--rebase拉取最新的远程代码。当不存在未暂存的修改代码且指定分支不为远程分支时,则服务器根据指定分支创建本地分支,并将所创建的本地分支配置为当前模块的配置分支,其中本地分支是根据指定分支创建的同名分支。
当指定分支和当前分支一致,且指定分支为远程分支时,则将远程分支配置为当前模块的配置分支,并根据远程分支更新源码仓库,即服务器会执行git命令git pull--rebase拉取最新的远程代码。
上述实施例中,采取一些默认的分支处理策略来为当前模块设置配置分支,自动化处理模块源码仓库的分支,简化开发者的操作。
在其中一个实施例中,根据配置分支将源码仓库添加到项目中,包括:将当前模块的配置信息中的名称作为模块名称,配置分支作为当前模块的绝对路径,源码仓库作为项目的子模块项目,添加到所述项目中。
在其中一个实施例中,根据配置分支将源码仓库添加到项目中之后,还包括:判断当前模块是否存在对应的远程依赖;若存在,则删除远程依赖。
具体地,在为当前模块配置完分支后,服务器使用gradle settings plugin的include语法将模块配置的名称作为模块名称,将模块的源码文件夹作为模块的绝对路径,将模块源码作为当前项目的子模块项目。且可选地,服务器除了将模块源码作为子项目模块,还需要处理模块源码与该模块对应的maven依赖即二进制依赖的冲突关系,否则对于某个模块,可能既存在该模块的源码子项目模块,也存在该模块的二进制依赖库,这样会在编译打包时出现类的冲突问题,服务器我们使用gradle的substitute api,从整个项目中自动剔除掉但钱模块在repo.xml中substitu参数配置的二进制依赖库。
上述实施例中,在为当前模块配置完分支后,则根据配置的模块的名称、源码仓库以及分支来进行源码构建,即将模块对应的源码仓库添加到项目的子模块项目中,不需要推送到远程,操作简单。
请参见图3,图3为另一个实施例中的项目构建方法的流程图,在该实施例中,将详细介绍项目构建方法的主要流程:
服务器在接收到项目构建指令后,查询到对应的配置文件,并解析配置文件得到项目中的模块对应的模块信息,然后开始处理模块信息。
服务器首先判断当前模块是否开启了源码构建,如果没有开启,则使用二进制依赖构建,即进行远程构建,并在构建完成后输出完成远程构建的提示。
如果开启了源码构建,则服务器判断当前模块在本地是否存在,如果不存在则从远程git仓库下载模块的源码仓库,如果存在则进行配置分支的设置。
服务器判断配置文件中的当前模块的指定分支与当前分支,即当前的本地分支是否相同,如果相同,再判断指定分支是否为远程分支,若为远程分支,则将远程分支配置为当前模块的配置分支,并根据远程分支更新源码仓库。
服务器判断指定分支和当前分支不相同时,则继续判断当前模块在本地仓库中是否有未暂存的修改代码,当服务器判定存在未暂存的代码时,则停止当前源码构建流程,并且输出针对未暂存的修改代码的提醒信息,此时研发人员可以选择将未暂存的修改提交,即生成一个commit记录或者是丢弃当前修改。
当服务器判定不存在未暂存的修改代码时,则判断指定分支是否为远程分支,如果是远程分支,则将远程分支配置为当前模块的配置分支,并根据远程分支更新源码仓库,当不存在未暂存的修改代码且指定分支不为远程分支时,则服务器根据指定分支创建本地分支,并将所创建的本地分支配置为当前模块的配置分支,其中本地分支是根据指定分支创建的同名分支。
在服务器对配置分支设置完成后,则采用源码仓库进行项目构建,即服务器使用gradle settings plugin的include语法将模块配置的名称作为模块名称,将模块的源码文件夹作为模块的绝对路径,将模块源码作为当前项目的子模块项目。
在对当前模块的源码构建完成后,则继续按照配置文件对下一个模块进行构建,直至配置文件中所有的模块都构建完成。
上述项目构建方法,在接收到项目构建指令后,查询项目标识对应的配置文件,并基于该配置文件在本地进行源码构建,即首先获取到源码仓库,然后为每个模块配置对应的配置分支,最后根据所配置的配置分支将源码仓库添加到项目中,这样在每个模块的代码更新后,仅需要在本地根据配置文件进行源码构建,不需要频繁地推送至远程,进行二进制构建,可以方便代码的改动和调试。
应该理解的是,虽然图2-3的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-3中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图4所示,提供了一种项目构建装置,包括:接收模块100、查询模块200、遍历模块300、源码处理模块400、分支处理模块500、依赖处理模块600和循环模块700,其中:
接收模块100,用于接收项目构建指令,项目构建指令携带有项目标识。
查询模块200,用于查询与项目标识对应的配置文件,并解析配置文件得到项目中的模块对应的模块信息。
遍历模块300,用于遍历模块信息,以判断当前模块是否需要进行源码构建。
源码处理模块400,用于当当前模块进行源码构建时,则获取当前模块对应的源码仓库。
分支处理模块500,用于根据当前模块的模块信息,为当前模块配置对应的配置分支。
依赖处理模块600,用于根据配置分支将源码仓库添加到项目中。
循环模块700,用于继续遍历模块信息,直至项目中的每个模块的模块信息均被遍历到。
在其中一个实施例中,上述源码处理模块400可以包括:
第一判断单元,用于判断当前模块对应的源码仓库在本地文件夹中是否存在。
下载单元若不存在,则从远程端下载当前模块对应的源码仓库。
若存在,则获取本地文件夹中的源码仓库。
在其中一个实施例中,上述分支处理模块500可以包括:
第二判断单元,用于判断当前模块的模块信息中是否存在指定分支。
第一配置单元,用于当不存在指定分支时,则获取当前模块对应的当前分支,并将当前分支作为当前模块的配置分支。
第二配置单元,用于当存在指定分支时,则获取当前模块的模块信息中的指定分支以及当前模块对应的当前分支,并根据指定分支和当前分支为当前模块配置对应的配置分支。
在其中一个实施例中,上述第二配置单元可以包括:
第三判断单元,用于当指定分支和当前分支不一致时,则判断本地仓库中是否存在未暂存的修改代码。
提醒输出单元,用于当存在未暂存的修改代码,则输出针对未暂存的修改代码的提醒信息。
第三配置单元,用于当不存在未暂存的修改代码且指定分支为远程分支时,则将远程分支配置为当前模块的配置分支,并根据远程分支更新源码仓库。
第四配置单元,用于当不存在未暂存的修改代码且指定分支不为远程分支时,则根据指定分支创建本地分支,并将所创建的本地分支配置为当前模块的配置分支。
在其中一个实施例中,上述第二配置单元还可以包括:
第五配置单元,用于当指定分支和当前分支一致,且指定分支为远程分支时,则将远程分支配置为当前模块的配置分支,并根据远程分支更新源码仓库。
在其中一个实施例中,上述依赖处理模块600还用于将当前模块的配置信息中的名称作为模块名称,配置分支作为当前模块的绝对路径,源码仓库作为项目的子模块项目,添加到所述项目中。
在其中一个实施例中,上述项目构建装置还可以包括:
判断模块,用于判断当前模块是否存在对应的远程依赖。
删除模块,用于若存在,则删除远程依赖。
关于项目构建装置的具体限定可以参见上文中对于项目构建方法的限定,在此不再赘述。上述项目构建装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储源码。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种项目构建方法。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现以下步骤:接收项目构建指令,项目构建指令携带有项目标识;查询与项目标识对应的配置文件,并解析配置文件得到项目中的模块对应的模块信息;遍历模块信息,以判断当前模块是否需要进行源码构建;当当前模块进行源码构建时,则获取当前模块对应的源码仓库;根据当前模块的模块信息,为当前模块配置对应的配置分支;根据配置分支将源码仓库添加到项目中;继续遍历模块信息,直至项目中的每个模块的模块信息均被遍历到。
在一个实施例中,处理器执行计算机程序时所实现的获取当前模块对应的源码仓库,包括:判断当前模块对应的源码仓库在本地文件夹中是否存在;若不存在,则从远程端下载当前模块对应的源码仓库;若存在,则获取本地文件夹中的源码仓库。
在一个实施例中,处理器执行计算机程序时所实现的根据当前模块的模块信息,为当前模块配置对应的配置分支,包括:判断当前模块的模块信息中是否存在指定分支;当不存在指定分支时,则获取当前模块对应的当前分支,并将当前分支作为当前模块的配置分支;当存在指定分支时,则获取当前模块的模块信息中的指定分支以及当前模块对应的当前分支,并根据指定分支和当前分支为当前模块配置对应的配置分支。
在一个实施例中,处理器执行计算机程序时所实现的根据指定分支和当前分支为当前模块配置对应的配置分支,包括:当指定分支和当前分支不一致时,则判断本地仓库中是否存在未暂存的修改代码;当存在未暂存的修改代码,则输出针对未暂存的修改代码的提醒信息;当不存在未暂存的修改代码且指定分支为远程分支时,则将远程分支配置为当前模块的配置分支,并根据远程分支更新源码仓库;当不存在未暂存的修改代码且指定分支不为远程分支时,则根据指定分支创建本地分支,并将所创建的本地分支配置为当前模块的配置分支。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:当指定分支和当前分支一致,且指定分支为远程分支时,则将远程分支配置为当前模块的配置分支,并根据远程分支更新源码仓库。
在一个实施例中,处理器执行计算机程序时所实现的根据配置分支将源码仓库添加到项目中,包括:将当前模块的配置信息中的名称作为模块名称,配置分支作为当前模块的绝对路径,源码仓库作为项目的子模块项目,添加到所述项目中。
在一个实施例中,处理器执行计算机程序时所实现的根据配置分支将源码仓库添加到项目中之后,还包括:判断当前模块是否存在对应的远程依赖;若存在,则删除远程依赖。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:接收项目构建指令,项目构建指令携带有项目标识;查询与项目标识对应的配置文件,并解析配置文件得到项目中的模块对应的模块信息;遍历模块信息,以判断当前模块是否需要进行源码构建;当当前模块进行源码构建时,则获取当前模块对应的源码仓库;根据当前模块的模块信息,为当前模块配置对应的配置分支;根据配置分支将源码仓库添加到项目中;继续遍历模块信息,直至项目中的每个模块的模块信息均被遍历到。
在一个实施例中,计算机程序被处理器执行时所实现的获取当前模块对应的源码仓库,包括:判断当前模块对应的源码仓库在本地文件夹中是否存在;若不存在,则从远程端下载当前模块对应的源码仓库;若存在,则获取本地文件夹中的源码仓库。
在一个实施例中,计算机程序被处理器执行时所实现的根据当前模块的模块信息,为当前模块配置对应的配置分支,包括:判断当前模块的模块信息中是否存在指定分支;当不存在指定分支时,则获取当前模块对应的当前分支,并将当前分支作为当前模块的配置分支;当存在指定分支时,则获取当前模块的模块信息中的指定分支以及当前模块对应的当前分支,并根据指定分支和当前分支为当前模块配置对应的配置分支。
在一个实施例中,计算机程序被处理器执行时所实现的根据指定分支和当前分支为当前模块配置对应的配置分支,包括:当指定分支和当前分支不一致时,则判断本地仓库中是否存在未暂存的修改代码;当存在未暂存的修改代码,则输出针对未暂存的修改代码的提醒信息;当不存在未暂存的修改代码且指定分支为远程分支时,则将远程分支配置为当前模块的配置分支,并根据远程分支更新源码仓库;当不存在未暂存的修改代码且指定分支不为远程分支时,则根据指定分支创建本地分支,并将所创建的本地分支配置为当前模块的配置分支。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当指定分支和当前分支一致,且指定分支为远程分支时,则将远程分支配置为当前模块的配置分支,并根据远程分支更新源码仓库。
在一个实施例中,计算机程序被处理器执行时所实现的根据配置分支将源码仓库添加到项目中,包括:将当前模块的配置信息中的名称作为模块名称,配置分支作为当前模块的绝对路径,源码仓库作为项目的子模块项目,添加到所述项目中。
在一个实施例中,计算机程序被处理器执行时所实现的根据配置分支将源码仓库添加到项目中之后,还包括:判断当前模块是否存在对应的远程依赖;若存在,则删除远程依赖。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种项目构建方法,所述方法包括:
接收项目构建指令,所述项目构建指令携带有项目标识;
查询与所述项目标识对应的配置文件,并解析所述配置文件得到项目中的模块对应的模块信息;
遍历所述模块信息,以判断当前模块是否需要进行源码构建;
当所述当前模块进行源码构建时,则获取所述当前模块对应的源码仓库;
根据所述当前模块的模块信息,为所述当前模块配置对应的配置分支;
根据所述配置分支将所述源码仓库添加到所述项目中;
继续遍历所述模块信息,直至所述项目中的每个模块的模块信息均被遍历到。
2.根据权利要求1所述的方法,其特征在于,所述获取所述当前模块对应的源码仓库,包括:
判断所述当前模块对应的源码仓库在本地文件夹中是否存在;
若不存在,则从远程端下载所述当前模块对应的源码仓库;
若存在,则获取本地文件夹中的源码仓库。
3.根据权利要求1所述的方法,其特征在于,所述根据所述当前模块的模块信息,为所述当前模块配置对应的配置分支,包括:
判断所述当前模块的模块信息中是否存在指定分支;
当不存在指定分支时,则获取所述当前模块对应的当前分支,并将所述当前分支作为所述当前模块的配置分支;
当存在指定分支时,则获取所述当前模块的模块信息中的指定分支以及所述当前模块对应的当前分支,并根据所述指定分支和所述当前分支为所述当前模块配置对应的配置分支。
4.根据权利要求3所述的方法,其特征在于,所述根据所述指定分支和所述当前分支为所述当前模块配置对应的配置分支,包括:
当所述指定分支和所述当前分支不一致时,则判断本地仓库中是否存在未暂存的修改代码;
当存在未暂存的修改代码,则输出针对未暂存的修改代码的提醒信息;
当不存在未暂存的修改代码且指定分支为远程分支时,则将所述远程分支配置为所述当前模块的配置分支,并根据所述远程分支更新所述源码仓库;
当不存在未暂存的修改代码且指定分支不为远程分支时,则根据所述指定分支创建本地分支,并将所创建的本地分支配置为所述当前模块的配置分支。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
当所述指定分支和所述当前分支一致,且所述指定分支为远程分支时,则将所述远程分支配置为所述当前模块的配置分支,并根据所述远程分支更新所述源码仓库。
6.根据权利要求1所述的方法,其特征在于,所述根据所述配置分支将所述源码仓库添加到所述项目中,包括:
将所述当前模块的配置信息中的名称作为模块名称,配置分支作为当前模块的绝对路径,源码仓库作为项目的子模块项目,添加到所述项目中。
7.根据权利要求1至6任意一项所述的方法,其特征在于,所述根据所述配置分支将所述源码仓库添加到所述项目中之后,还包括:
判断所述当前模块是否存在对应的远程依赖;
若存在,则删除所述远程依赖。
8.一种项目构建装置,其特征在于,所述装置包括:
接收模块,用于接收项目构建指令,所述项目构建指令携带有项目标识;
查询模块,用于查询与所述项目标识对应的配置文件,并解析所述配置文件得到项目中的模块对应的模块信息;
遍历模块,用于遍历所述模块信息,以判断当前模块是否需要进行源码构建;
源码处理模块,用于当所述当前模块进行源码构建时,则获取所述当前模块对应的源码仓库;
分支处理模块,用于根据所述当前模块的模块信息,为所述当前模块配置对应的配置分支;
依赖处理模块,用于根据所述配置分支将所述源码仓库添加到所述项目中;
循环模块,用于继续遍历所述模块信息,直至所述项目中的每个模块的模块信息均被遍历到。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910874707.8A CN110597518B (zh) | 2019-09-17 | 2019-09-17 | 项目构建方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910874707.8A CN110597518B (zh) | 2019-09-17 | 2019-09-17 | 项目构建方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110597518A true CN110597518A (zh) | 2019-12-20 |
CN110597518B CN110597518B (zh) | 2023-08-18 |
Family
ID=68859995
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910874707.8A Active CN110597518B (zh) | 2019-09-17 | 2019-09-17 | 项目构建方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110597518B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111932207A (zh) * | 2020-08-06 | 2020-11-13 | 北京金山云网络技术有限公司 | 项目数据处理方法、装置、计算机设备和存储介质 |
CN112579097A (zh) * | 2020-12-21 | 2021-03-30 | 广州博冠信息科技有限公司 | 软件项目构建方法、装置、存储介质及电子设备 |
CN112631652A (zh) * | 2020-12-29 | 2021-04-09 | 微医云(杭州)控股有限公司 | 操作指令响应方法、装置、设备和存储介质 |
CN112650530A (zh) * | 2020-12-31 | 2021-04-13 | 五八有限公司 | 多类库集成方法、装置、电子设备及可读存储介质 |
CN113110872A (zh) * | 2021-05-18 | 2021-07-13 | 绿漫科技有限公司 | 一种Android自动化配置构建平台及操作方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100153920A1 (en) * | 2008-12-17 | 2010-06-17 | Michael Stavros Bonnet | Method for building and packaging sofware |
CN109634612A (zh) * | 2018-12-04 | 2019-04-16 | 浙江数链科技有限公司 | 持续集成方法、系统、计算机设备和存储介质 |
-
2019
- 2019-09-17 CN CN201910874707.8A patent/CN110597518B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100153920A1 (en) * | 2008-12-17 | 2010-06-17 | Michael Stavros Bonnet | Method for building and packaging sofware |
CN109634612A (zh) * | 2018-12-04 | 2019-04-16 | 浙江数链科技有限公司 | 持续集成方法、系统、计算机设备和存储介质 |
Non-Patent Citations (2)
Title |
---|
CHRISTIAN MACHO 等: "Extracting Build Changes with BUILDDIFF", 《2017 IEEE/ACM 14TH INTERNATIONAL CONFERENCE ON MINING SOFTWARE REPOSITORIES (MSR)》 * |
蔡亮 等: "即时软件缺陷预测研究进展", 《软件学报》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111932207A (zh) * | 2020-08-06 | 2020-11-13 | 北京金山云网络技术有限公司 | 项目数据处理方法、装置、计算机设备和存储介质 |
CN112579097A (zh) * | 2020-12-21 | 2021-03-30 | 广州博冠信息科技有限公司 | 软件项目构建方法、装置、存储介质及电子设备 |
CN112579097B (zh) * | 2020-12-21 | 2023-08-08 | 广州博冠信息科技有限公司 | 软件项目构建方法、装置、存储介质及电子设备 |
CN112631652A (zh) * | 2020-12-29 | 2021-04-09 | 微医云(杭州)控股有限公司 | 操作指令响应方法、装置、设备和存储介质 |
CN112650530A (zh) * | 2020-12-31 | 2021-04-13 | 五八有限公司 | 多类库集成方法、装置、电子设备及可读存储介质 |
CN113110872A (zh) * | 2021-05-18 | 2021-07-13 | 绿漫科技有限公司 | 一种Android自动化配置构建平台及操作方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110597518B (zh) | 2023-08-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110597518A (zh) | 项目构建方法、装置、计算机设备和存储介质 | |
CN109474456B (zh) | 配置数据处理方法、装置、计算机设备和存储介质 | |
US20220179642A1 (en) | Software code change method and apparatus | |
CN110515620B (zh) | 一种自动化资源处理方法及系统 | |
CN112380130A (zh) | 基于调用依赖关系的应用测试方法和装置 | |
CN115080060A (zh) | 应用程序发布方法、装置、设备、存储介质和程序产品 | |
CN109254765B (zh) | 定时任务管理方法、装置、计算机设备及存储介质 | |
CN111190584B (zh) | Ehis-db系统版本发布方法、装置、计算机设备和存储介质 | |
CN113741923A (zh) | 一种应用更新方法、装置、设备及介质 | |
CN111813803A (zh) | 语句块执行计划的生成方法、装置、设备和存储介质 | |
CN117539459B (zh) | 一种api接口配置方法、系统及设备 | |
CN114020840A (zh) | 一种数据处理方法、装置、服务器、存储介质及产品 | |
CN114115967A (zh) | 业务数据处理方法、装置、计算机设备和存储介质 | |
US20200278845A1 (en) | Method and system for development of web software application | |
CN115729590A (zh) | 服务部署方法、装置、设备和计算机可读存储介质 | |
CN111966744B (zh) | 工作流部署方法、装置、计算机设备和存储介质 | |
CN114816437A (zh) | 一种逆向生成Java实体类的方法、系统和设备 | |
US20180131725A1 (en) | Method and apparatus for mobile terminal management supporting security policy | |
CN114816449A (zh) | 自动部署方法及装置 | |
CN113741966A (zh) | 一种Kickstart文件转换的方法、系统、设备和存储介质 | |
CN112783515A (zh) | 插件的控制方法和装置、存储介质 | |
CN112416383A (zh) | golang程序热更新方法、装置以及计算机设备 | |
CN113467888B (zh) | 智能合约的跨链调用方法及装置、电子设备、存储介质 | |
CN113721918B (zh) | 一种基于koji进行编译和软件源制作的方法和装置 | |
US11132185B2 (en) | Embedding of multiple versions in monolithic applications during compilation |
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 |