CN113535138B - 软件项目打包方法及相关设备 - Google Patents
软件项目打包方法及相关设备 Download PDFInfo
- Publication number
- CN113535138B CN113535138B CN202010296164.9A CN202010296164A CN113535138B CN 113535138 B CN113535138 B CN 113535138B CN 202010296164 A CN202010296164 A CN 202010296164A CN 113535138 B CN113535138 B CN 113535138B
- Authority
- CN
- China
- Prior art keywords
- version
- package
- target item
- dependent package
- dependent
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- 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)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例提供了一种软件项目打包方法及相关设备,该方法包括:接收针对目标项目的打包指令,该打包指令用于指示根据该目标项目的配置文件将该目标项目打包成可执行文件,该配置文件包括该目标项目的依赖包的坐标,该依赖包的坐标包括该目标项目的标识、该依赖包所在的模块的标识、该依赖包的第一版本以及第二版本;在该依赖包的第二版本的数据有效时,根据该目标项目的标识、该依赖包所在的模块的标识和该依赖包的第二版本在仓库中获取该依赖包;根据获取到的依赖包打包得到该目标项目的可执行文件。采用本申请实施例,可以实现在保证项目开发效率的同时仍然能够打包得到期望的项目版本。
Description
技术领域
本发明涉及软件开发技术领域,尤其涉及一种软件项目打包方法及相关设备。
背景技术
目前,存在较多的软件项目构建工具,例如Maven、Gradle和npm等。这些构建工具都有对应的仓库,这些仓库中存放着构建项目需要的各种依赖包等等。在构建项目的时候可以从对应的仓库中下载需要的依赖包。由于这些依赖包不断的升级,因此,同一个依赖包会出现不同的版本,即仓库中会同时存在同一个依赖包的不同版本。仓库中的依赖包可以通过依赖包所在的项目名称、所在的模块名称和该依赖包的版本来唯一确定。
而现有技术中,为了项目的开发便利,提高开发效率,在开发过程中通常将依赖包的版本默认配置成最新版本。这样配置使得项目的依赖包总是最新的版本,当依赖包升级后,也不需要对应修改项目程序中的依赖包的版本号。但是,在需要打包得到该项目的历史版本时,由于该项目依赖的总是最新版本的依赖包,无法打包得到期望的历史版本。
综上所述,如何保证项目开发效率的同时仍然能够打包得到期望的历史版本是本领域人员急需解决的技术问题。
发明内容
本申请实施例公开了一种软件项目打包方法及相关设备,可以实现在保证项目开发效率的同时仍然能够打包得到期望的项目版本。
第一方面,本申请公开了一种软件项目打包方法,该方法包括:
接收针对目标项目的打包指令,其中,所述打包指令用于指示根据所述目标项目的配置文件将所述目标项目打包成可执行文件,所述配置文件包括所述目标项目的依赖包的坐标,所述依赖包的坐标包括所述目标项目的标识、所述依赖包所在的模块的标识、所述依赖包的第一版本以及所述依赖包的第二版本,所述目标项目包括多个模块;
在所述依赖包的第二版本的数据有效时,根据所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第二版本在仓库中获取所述依赖包;
根据获取到的依赖包打包得到所述目标项目的可执行文件。
本申请在开发阶段仍然可以配置项目的依赖包为最新版本的依赖包(可以通过上述依赖包的坐标中的第一版本来配置),同时可以通过上述依赖包的坐标中的第二版本来配置打包时期望打包的依赖包版本,这样在打包时,可以基于第二版本的数据打包得到期望的依赖包版本,从而打包得到期望版本的项目可执行文件。本申请兼顾了开发效率的同时还可以做到可信构建(即可以准确无误地构建得到期望版本的文件)。
在其中一种实施方式中,在所述依赖包的第二版本的数据无效时,根据所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第一版本在所述仓库中获取所述依赖包。
在本申请中可以通过依赖包的版本有选择地打包得到不同版本的项目可执行文件。
在其中一种实施方式中,所述打包指令还包括目标时间,所述目标时间为当前时间之前的时间,所述目标时间用于指示将所述目标时间时的所述目标项目进行打包,所述方法还包括:根据所述目标时间确定所述目标项目的依赖包在所述目标时间的版本号,得到所述依赖包的真实版本号;在所述配置文件中的所述依赖包的第二版本写入所述依赖包的真实版本号。
在本申请中,通过在打包指令中的目标时间来确定依赖包的期望版本号,从而构建得到期望版本的项目可执行文件。
在其中一种实施方式中,所述根据获取到的依赖包打包得到所述目标项目的可执行文件之后,所述方法还包括:在所述配置文件中的所述依赖包的第二版本写入无效数据或用于指示所述依赖包的第二版本无效的指示信息。
在其中一种实施方式中,所述依赖包的第一版本表征所述依赖包的最新版本。
本申请中通过设置依赖包的第一版本表征该依赖包的最新版本可以使得在开发阶段无需频繁修改依赖包的版本,节约时间,提升开发效率。
在其中一种实施方式中,所述配置文件包括根配置文件以及一个或多个子配置文件;所述配置文件包括所述目标项目的依赖包的坐标,具体为:
所述根配置文件以及一个或多个子配置文件中的第一配置文件包括所述目标项目的依赖包的第一部分坐标,其中,所述第一部分坐标包括所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第一版本;
所述根配置文件以及一个或多个子配置文件中的第二配置文件包括所述目标项目的依赖包的第二部分坐标,其中,所述第二部分坐标包括所述依赖包的第二版本。
在本申请中,项目的配置文件可以包括多个配置文件,依赖包坐标中的第二版本可以和依赖包坐标的其它部分不在同一个配置文件中,这些配置文件可以互相关联引用,从而在打包的时候可以根据第二版本唯一确定期望版本的依赖包。
可选地,第一配置文件为根配置文件,第二配置文件为子配置文件。
第二方面,本申请公开了一种软件项目打包设备,该设备包括:
接收单元,用于接收针对目标项目的打包指令,其中,所述打包指令用于指示根据所述目标项目的配置文件将所述目标项目打包成可执行文件,所述配置文件包括所述目标项目的依赖包的坐标,所述依赖包的坐标包括所述目标项目的标识、所述依赖包所在的模块的标识、所述依赖包的第一版本以及所述依赖包的第二版本,所述目标项目包括多个模块;
获取单元,用于在所述依赖包的第二版本的数据有效时,根据所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第二版本在仓库中获取所述依赖包;
打包单元,根据获取到的依赖包打包得到所述目标项目的可执行文件。
在其中一种实施方式中,所述获取单元还用于:
在所述依赖包的第二版本的数据无效时,根据所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第一版本在所述仓库中获取所述依赖包。
在其中一种实施方式中,所述打包指令还包括目标时间,所述目标时间为当前时间之前的时间,所述目标时间用于指示将所述目标时间时的所述目标项目进行打包,所述设备还包括:
确定单元,用于根据所述目标时间确定所述目标项目的依赖包在所述目标时间的版本号,得到所述依赖包的真实版本号;
写入单元,用于在所述配置文件中的所述依赖包的第二版本写入所述依赖包的真实版本号。
在其中一种实施方式中,所述写入单元还用于:在所述打包单元根据获取到的依赖包打包得到所述目标项目的可执行文件后,在所述配置文件中的所述依赖包的第二版本写入无效数据或用于指示所述依赖包的第二版本无效的指示信息。
在其中一种实施方式中,所述依赖包的第一版本表征所述依赖包的最新版本。
在其中一种实施方式中,所述配置文件包括根配置文件以及一个或多个子配置文件;所述配置文件包括所述目标项目的依赖包的坐标,具体为:
所述根配置文件以及一个或多个子配置文件中的第一配置文件包括所述目标项目的依赖包的第一部分坐标,其中,所述第一部分坐标包括所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第一版本;
所述根配置文件以及一个或多个子配置文件中的第二配置文件包括所述目标项目的依赖包的第二部分坐标,其中,所述第二部分坐标包括所述依赖包的第二版本。
第三方面,本申请公开了一种软件项目打包设备,该设备包括处理器、通信接口和存储器,其中,所述存储器用于存储计算机程序和/或数据,所述处理器用于执行所述存储器中存储的计算机程序,使得所述设备执行如下操作:
接收针对目标项目的打包指令,其中,所述打包指令用于指示根据所述目标项目的配置文件将所述目标项目打包成可执行文件,所述配置文件包括所述目标项目的依赖包的坐标,所述依赖包的坐标包括所述目标项目的标识、所述依赖包所在的模块的标识、所述依赖包的第一版本以及所述依赖包的第二版本,所述目标项目包括多个模块;
在所述依赖包的第二版本的数据有效时,根据所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第二版本在仓库中获取所述依赖包;
根据获取到的依赖包打包得到所述目标项目的可执行文件。
在其中一种实施方式中,所述设备还用于执行:
在所述依赖包的第二版本的数据无效时,根据所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第一版本在所述仓库中获取所述依赖包。
在其中一种实施方式中,所述打包指令还包括目标时间,所述目标时间为当前时间之前的时间,所述目标时间用于指示将所述目标时间时的所述目标项目进行打包,所述方法还包括:
根据所述目标时间确定所述目标项目的依赖包在所述目标时间的版本号,得到所述依赖包的真实版本号;
在所述配置文件中的所述依赖包的第二版本写入所述依赖包的真实版本号。
在其中一种实施方式中,所述依赖包的第一版本表征所述依赖包的最新版本。
在其中一种实施方式中,所述配置文件包括根配置文件以及一个或多个子配置文件;所述配置文件包括所述目标项目的依赖包的坐标,具体为:
所述根配置文件以及一个或多个子配置文件中的第一配置文件包括所述目标项目的依赖包的第一部分坐标,其中,所述第一部分坐标包括所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第一版本;
所述根配置文件以及一个或多个子配置文件中的第二配置文件包括所述目标项目的依赖包的第二部分坐标,其中,所述第二部分坐标包括所述依赖包的第二版本。
可选地,第一配置文件为根配置文件,第二配置文件为子配置文件。
第四方面,本申请公开了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行以实现上述第一方面任意一项所述的方法。
第五方面,本申请公开了一种计算机程序产品,当所述计算机程序产品被计算机读取并执行时,上述第一方面任意一项所述的方法将被执行。
第六方面,本申请公开了一种计算机程序,当所述计算机程序在计算机上执行时,将会使所述计算机实现上述第一方面任意一项所述的方法。
综上所述,本申请在开发阶段仍然可以配置项目的依赖包为最新版本的依赖包(可以通过上述依赖包的坐标中的第一版本来配置),同时可以通过上述依赖包的坐标中的第二版本来配置打包时期望打包的依赖包版本,这样在打包时,可以基于第二版本的数据打包得到期望的依赖包版本,从而打包得到期望版本的项目可执行文件。本申请兼顾了开发效率的同时还可以做到可信构建(即可以准确无误地构建得到期望版本的文件)。
附图说明
下面将对本申请实施例中所需要使用的附图作介绍。
图1所示为本申请实施例提供的软件项目打包方法的流程示意图;
图2所示为本申请实施例提供的依赖包定位示意图;
图3所示为本申请实施例提供的设备的逻辑结构示意图;
图4所示为本申请实施例提供的设备的硬件结构示意图。
具体实施方式
为了更好的理解本申请实施例提供的一种软件项目打包方法,下面先对本申请实施例涉及的概念进行介绍。
1、软件项目的构建工具
软件构建(Software Build)是指软件开发过程中涉及到的一系列处理工作,如将源代码编译成二进制代码,打包二进制代码,运行自动化测试等。为了方便编程人员的操作,人们开发了自动构建(Build Automation)工具(也称为构建工具)来帮助人们处理这些工作。软件项目的构建工具是将软件项目构建相关的过程自动化的工具,或者说是一个把软件项目的源代码生成可执行应用程序的过程自动化的程序。构建包括生成源代码、编译以及打包等过程。
常用的软件项目构建工具可以包括Maven、Gradle和npm等等,这里只是示例性的列出,还存在其它的构建工具,此处不再赘述。
构建的项目通常包括很多代码文件、配置文件、第三方文件等。打包的过程就是将该项目包括的文件组装成可执行文件(例如,可使用的应用程序)的过程。
2、软件项目的配置文件
通过构建工具构建一个软件项目时,需要构建项目对应的配置文件。配置文件是项目工程的核心文件,可以在该文件中添加项目的依赖,配置相应的规则。在打包项目的时候,可以根据配置文件中的配置进行项目的打包。在运行项目的时候,可以读取配置文件获取相关的配置信息从而保证项目的正常执行。
使用不同的构建工具构建软件项目,其项目的配置文件不尽相同。但是,配置文件中定义项目依赖包的规则可以是相同的。例如,现有技术中,对于Maven、Gradle和npm等构建工具,其项目配置文件中定义项目依赖包均是采用依赖包所在项目的项目名称、依赖包所在的模块名称加依赖包的版本来定义一个依赖包。
3、构建工具的仓库
构建工具的仓库中存储了较全面的组件包、项目软件包等,这些组件包和项目软件包可以作为项目的依赖包。构建工具在构建项目的过程中用到的项目依赖包可以从仓库中下载获取,这些仓库可以包括开源的或不开源的仓库。例如maven仓库,maven仓库为全世界的java开发者提供了一个免费的中央仓库。
本申请实施例提供的项目打包方法可以是对现有的构建工具中打包流程的改善,构建工具可以运行在电子设备中。该电子设备可以是程序开发人员的计算机设备,也可以是需要进行软件开发或网站开发的公司或机构的服务器等,公司或机构中参与研发的人员可以访问该服务器以及对服务器进行操作等。
基于上述的描述,下面结合附图介绍本申请实施例提供的一种软件项目打包方法。该方法可以由上述电子设备执行,参见图1,该方法包括但不限于如下步骤:
步骤101、接收针对目标项目的打包指令。
在具体实施例中,目标项目的构建过程包括生成源代码、编译源代码以及打包等过程。通过构建工具可以自动化地完成一个软件项目的构建,即可以自动化地完成源代码的生成、编译和项目的打包过程。其中,对于源代码的生成过程,也可以由程序员输入到该构建工具,然后再由构建工具对该源代码进行编译个打包。
构建工具部署在计算机设备上,通过计算机设备来运行该构建工具实现软件项目的源代码生成、编译和打包的过程。
在对项目源代码编译完成之后,可以对软件项目进行打包时,设备通过构建工具接收软件项目打包的指令,该指令具体用于指示该根据该软件项目的配置文件对该项目打包可执行文件,该可执行文件可以部署到计算机设备上运行以实现相应地功能。需要打包的软件项目可以称为目标项目。
上述设备接收到针对目标项目的打包指令之后,可以根据该指令读取预先配置好的该目标项目的配置文件。具体的,设备读取的该配置文件可以包括该目标项目中用于项目打包的配置文件。该配置文件中配置了该目标项目的依赖包和该目标项目打包的规则等。
具体的,该配置文件中通过坐标定义了目标项目的依赖包。该坐标用于在上述软件项目构建工具关联的仓库中定位到依赖包。依赖包的坐标包括依赖包所在项目的标识、依赖包所在模块的标识、依赖包的第一版本以及依赖包的第二版本。该依赖包所在项目也可以是需要打包的目标项目,该目标项目包括多个模块,每个模块中包括多个组件,这些组件即为目标项目的依赖。
可以看到,本申请中依赖包的坐标包括四个字段,而现有技术中依赖包的坐标只包括依赖包所在项目的标识、依赖包所在模块的标识和依赖包的版本这三个字段。
本申请实施例将坐标中依赖包的版本配置为第一版本和第二版本,其中,该第一版本是与现有技术中的依赖包的版本是相同的,而该第二版本是用于指示在打包时需要打包的实际版本。在项目开发的过程中,可以配置依赖包的第一版本表征该依赖包的最新版本,这样即使开发过程中该依赖包的版本不断升级都无需改动该第一版本的数据,因为该第一版本的数据总是指向最新版本的依赖包,从而可以提高项目开发的效率。
而在项目打包的时候,可能期望打包得到的项目的依赖包不是最新版本的依赖包,这时可以通过配置上述坐标中的第二版本来指定期望的依赖包的版本,从而可以打包出期望的版本的项目可执行文件。
为了便于理解依赖包的坐标,下面以maven构建工具为例介绍说明。
现有技术中,在maven构建工具中,上述依赖包的坐标中的依赖包所在项目的标识可以定义为组织标识groupId,该坐标字段中的数据可以为公司或组织的域名的倒序加上实际的项目名称;上述依赖包的坐标中的依赖包所在模块的标识可以定义为模块标识artifactId,即用于指出该依赖包所在模块的具体标识;上述依赖包的坐标中的依赖包的版本可以定义为版本version,即用于指出该依赖包的具体版本。示例性地,在maven构建工具的配置文件中定义依赖包的形式如下:
其中,com.ys.maven为公司或组织的域名的倒序(即com.ys)加上实际的项目名称(即maven),Maven_05为依赖包所在模块的模块名称。RELEASE表示取该依赖包的最新版本号。当然,RELEASE也可以用依赖包的具体版本号代替,但是由于依赖包会不断升级,为了在开发阶段不用频繁改动依赖包的版本号,提高开发效率,因此设置为总是取该依赖包的最新版本。当然,代码中的RELEASE也可以用LATEST代替,同样表示取该依赖包的最新版本号。
而在本申请实施例中,示例性地,在maven构建工具的配置文件中定义依赖包的形式如下:
可以看到,该定义依赖包的代码中相比于上述现有技术的代码中多了一个字段realversion,该字段用于指示打包时需要打包的依赖包的具体版本,例如4.12版本。那么,在本例中,定义依赖包的version即为上述的第一版本,realversion即为上述的第二版本。当然,需要说明的是,第二版本的这个字段可以用realversion来表示,但是也可以用其它名称例如trueversion或者specificversion等来表示,只要是用于指定打包时依赖包的具体的版本即可,本方案对字段的名称不做限制。
上述定义依赖包的代码只是示例,不同的构建工具配置依赖包的代码可以不相同,本方案对此不限制。
可选的,上述目标项目的配置文件可以包括根配置文件和一个或多个子配置文件。上述目标项目的依赖包的坐标中第二版本可以与其它三个字段(目标项目的标识、模块的标识、第一版本)不在同一个配置文件中,此时,依赖包的坐标可以划分为两部分,分别为第一部分坐标和第二部分坐标,其中,第一部分坐标包括目标项目的标识、该依赖包所在的模块的标识和该依赖包的第一版本;第二部分坐标包括该依赖包的第二版本。由于这些配置文件之间可以互相关联引用,同样可以在打包时定位到具体的期望版本的依赖包。例如,可以是依赖包的第一部分坐标(即目标项目的标识、模块的标识和第一版本)可以在第一配置文件中,而依赖包的第二部分坐标(即第二版本)可以在第二配置文件中。其中,第一配置文件和第二配置文件可以是根配置文件和一个或多个子配置文件中的两个不同的配置文件,当然,第一配置文件和第二配置文件也可以是同一个配置文件中,具体根据实际情况确定,本方案对此不做限制。
可选地,第一配置文件为根配置文件,第二配置文件为子配置文件。在对目标项目进行打包时,电子设备先读取根配置文件后读取子配置文件。
步骤102、在所述依赖包的第二版本的数据有效时,根据所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第二版本在仓库中获取所述依赖包。
上述设备在读取目标项目的配置文件获取到该目标项目的依赖包的坐标后,可以先查看一下该坐标中的第二版本的数据是否有效。有效指的是该第二版本的数据是为具体的依赖包的版本号或者包括数据,若该第二版本的数据为空或者不指示具体的依赖包的版本号,则该第二版本的数据均为无效。
在依赖包的第二版本的数据有效的情况下,设备可以不使用该依赖包的第一版本的数据,可以根据依赖包坐标中的项目标识、模块标识以及第二版本的数据在仓库中定位并下载到依赖包。
在另一种可能的实施方式中,在依赖包的第二版本的数据无效的情况下,设备可以不使用该依赖包的第二版本的数据,可以根据依赖包坐标中的项目标识、模块标识以及第一版本的数据在仓库中定位并下载到依赖包。但是,需要说明的是,由于依赖包的版本不同,则最终打包得到的项目可执行文件可以是不同的。
应理解,目标项目的依赖包可以是多个,在对目标项目进行打包时,需要获取到目标项目的所有依赖包。
还应理解,仓库可以存储各个版本的依赖包,电子设备可以根据目标项目的标识、依赖包所在的模块的标识和依赖包的第二版本唯一确定一个该依赖包,且确定的依赖包的版本号为该依赖包的第二版本。还应理解,仓库可以存储各个版本的依赖包,电子设备可以根据目标项目的标识、依赖包所在的模块的标识和依赖包的第一版本唯一确定一个该依赖包,且确定的依赖包的版本号为该依赖包的第一版本指示的版本号。当第一版本的数据为“LATEST”时,确定的依赖包为仓库中最近版本的依赖包。
还应理解,仓库可以是电子设备的本地仓库,也可以是远程仓库。在本地仓库中不存在该查找的依赖包时,电子设备可以从远程仓库下载该依赖包。
步骤103、根据获取到的依赖包打包得到所述目标项目的可执行文件。
获取到目标项目的依赖包之后,可以对项目进行打包。具体的,设备在对目标项目进行打包之前,一般都会进行清理、编译和测试等操作。清理操作是清理以前的数据痕迹,编译用于将目标项目的源代码编译成计算机可识别的二进制代码,测试则是测试该编译后的代码是否可行。这一系列的操作做完之后,设备开始对目标项目进行打包,将上述获取到的依赖包、该目标项目的配置文件以及编译之后的代码等等一起打包得到项目的可执行文件。具体打包得到的项目可执行文件例如可以是jar包、war包或者zip包。具体打包成那种格式的文件可以在项目的配置文件中配置,本方案对此不做限制。
在打包完成后,可以发布该得到的可执行文件,如jar包;也可以将该jar包存储到指定文件夹中,还可以将该jar包发布应用商店,供用户下载和使用。
在本申请一些实施例中,在打包得到目标项目的历史的可执行文件后,电子设备还可以将配置文件中的依赖包的第二版本的数据设置为无效数据或用于指示该数据无效的信息,以避免该目标项目的开发过程中打包得到不需要的版本。
本发明实施例中,在对目标项目进行打包时,通过控制其依赖包的第二版本(如realversion字段),在第二版本的数据有效时,使用该第二版本的数据来定位依赖包,而不是使用该依赖包的第一版本(如version字段)来定位组件,以实现对历史版本的jar包的构建,提升构建的历史版本中依赖包的依赖关系的可信度。
而且,本发明实施例可以通过构建工具配置目标项目的依赖包的第一版本为“LATEST/RELASE”等,可避免在开发阶段频繁修改引用的依赖包,提升开发效率;又可以通过realversion控制具体依赖的组件版本号,使每一次构建的历史版本中依赖包的依赖关系都可信,促进了开发效率与可信构建的一个平衡。
在另一种可能的实施方式中,上述图1所述的软件项目打包方法中,设备接收到的针对目标项目的打包指令中还可以包括目标时间。
该目标时间用于指示将该目标时间时的该目标项目进行打包。软件项目的版本一般都与时间相关联,例如2010年的版本为1.0,2011年的版本为2.0等等。另外,某一时间的软件项目的版本又与相应版本的依赖包相关关联。有具体的时间就可以关联到具体的软件项目的版本,以及该软件项目的依赖包的版本。这些关联关系可以是存储在数据库中,需要的时候可以调用数据库进行获取。
电子设备可以根据打包指令中的目标时间通过数据库查找到该目标项目的具体版本以及该目标项目的依赖包的具体版本。然后,在需要打包该目标时间所关联的版本的目标项目时,可以先在该目标项目的配置文件中将该版本的目标项目的依赖包的具体版本写入对应依赖包的坐标中的第二版本的字段中。后续对该目标项目进行打包的过程,可以参见上述图1所述方法的具体描述,此处不再赘述。
本申请实施例中,可以自动生成特定时间点的应用程序的版本,以满足各种用户对旧版本的应用程序的需求。
本发明实施例在打包项目的历史版本时,当其依赖包的第二版本(如realversion字段)的数据为具体版本号时,指定使用realversion来定位该依赖包,而不使用依赖包的第一版本(如version字段),这样可以既可以保证在打包项目的历史版本时,若仓库存在多版本时,可以获取到指定版本号的依赖组件,并且,在项目的开发过程中,若需要打包,则可以使用依赖包的第一版本来定位该依赖包,以提高开发效率。为了便于理解上述方法实施例,下面示例说明。
可以参见图2。图2中所示的仓库中包括依赖包(也称为组件)A,该组件A可以有两个版本,一个版本为1.1.0,另一个版本为1.1.1。其中,版本1.1.1是最新发布的组件A的版本,版本1.1.0是在版本1.1.1之前发布的版本。可以看到,如果当前打包的项目的历史版本时,需要获取该组件A,若使用groupId,artifactId和version这三个字段到仓库定位获取组件A,且version=RELEASE,那么获取到的是最新版本即1.1.1版本的组件A。然而,如果使用groupId,artifactId和realversion这三个字段到仓库定位获取组件A,realversion给出了具体的版本号为1.1.0,那么可以获取到指定版本即1.1.0版本的组件A,进而可以实现对项目的历史版本的打包。
另外需要说明的是,虽然上述的例子都是以构建工具为maven为例介绍,但是本申请实施例也可以应用于Gradle和npm等其它构建工具,具体应用于哪个构建工具根据实际情况决定,本方案对此不做限制。
综上所述,本申请在开发阶段仍然可以配置项目的依赖包为最新版本的依赖包(可以通过上述依赖包的坐标中的第一版本来配置),同时可以通过上述依赖包的坐标中的第二版本来配置打包时期望打包的依赖包版本,这样在打包时,可以基于第二版本的数据打包得到期望的依赖包版本,从而打包得到期望版本的项目可执行文件。本申请兼顾了开发效率的同时还可以做到可信构建(即可以准确无误地构建得到期望版本的文件)。
上述主要对本申请实施例提供的软件项目打包方法进行了介绍。可以理解的是,各个设备为了实现上述对应的功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,图3示出了设备的一种可能的逻辑结构示意图。该设备300可以包括:
接收单元301,用于接收针对目标项目的打包指令,其中,该打包指令用于指示根据该目标项目的配置文件将该目标项目打包成可执行文件,该配置文件包括该目标项目的依赖包的坐标,该依赖包的坐标包括该目标项目的标识、该依赖包所在的模块的标识、该依赖包的第一版本以及该依赖包的第二版本,该目标项目包括多个模块;
获取单元302,用于在该依赖包的第二版本的数据有效时,根据该目标项目的标识、该依赖包所在的模块的标识和该依赖包的第二版本在仓库中获取该依赖包;
打包单元303,根据获取到的依赖包打包得到该目标项目的可执行文件。
在其中一种实施方式中,获取单元302还用于:
在该依赖包的第二版本的数据无效时,根据该目标项目的标识、该依赖包所在的模块的标识和该依赖包的第一版本在该仓库中获取该依赖包。
在其中一种实施方式中,该打包指令还包括目标时间,该目标时间为当前时间之前的时间,该目标时间用于指示将该目标时间时的该目标项目进行打包,该设备还包括:
确定单元,用于根据该目标时间确定该目标项目的依赖包在该目标时间的版本号,得到该依赖包的真实版本号;
写入单元,用于在该配置文件中的该依赖包的第二版本写入该依赖包的真实版本号。
图3所示设备中各个单元的具体操作以及有益效果可以参见上述图1所示方法实施例的描述,此处不再赘述。
图4所示为本申请提供的设备的一种可能的硬件结构示意图。该电子设备(也称为软件项目打包设备)400包括:处理器401、存储器402和通信接口403。处理器401、通信接口403以及存储器402可以相互连接或者通过总线404相互连接。
存储器402可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器402可以存储程序,当存储器402中存储的程序被处理器401执行时,处理器401和通信接口403用于执行本申请实施例的软件项目打包方法中的全部或部分步骤。在一些实施例中,存储器402可以存储构建工具的应用程序,目标项目包括的各种文件等。
处理器401可以采用通用的中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application Specific Integrated Circuit,ASIC),图形处理器(graphics processing unit,GPU)或者一个或多个集成电路,用于执行相关程序,以实现本申请实施例的神经网络的训练装置中的单元所需执行的功能,或者执行本申请方法中的软件项目打包方法中的全部或部分步骤。
处理器401还可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,本申请的神经网络的训练方法的各个步骤可以通过处理器401中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器401还可以是通用处理器、数字信号处理器(DigitalSignal Processing,DSP)、专用集成电路(ASIC)、现成可编程门阵列(Field ProgrammableGate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器402,处理器401读取存储器402中的信息,结合其硬件完成本申请实施例的机器学习模型的搜索装置中包括的单元所需执行的功能,或者执行本申请方法实施例的机器学习模型的搜索方法中的全部或部分步骤。
通信接口403使用例如但不限于收发器一类的收发装置,来实现电子设备400与其他设备或通信网络之间的通信。例如,可以通过通信接口403获取依赖包。
总线404可包括在电子设备400各个部件(例如,存储器402、处理器401、通信接口403)之间传送信息的通路。
本申请实施例还公开了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行以实现上述图1以及可能的实施方式所述的方法。
本申请实施例还公开了一种计算机程序产品,当所述计算机程序产品被计算机读取并执行时,上述图1以及可能的实施方式所述的方法将被执行。
本申请实施例还公开了一种计算机程序,当所述计算机程序在计算机上执行时,将会使所述计算机实现上述图1以及可能的实施方式所述的方法。
综上所述,本申请在开发阶段仍然可以配置项目的依赖包为最新版本的依赖包(可以通过上述依赖包的坐标中的第一版本来配置),同时可以通过上述依赖包的坐标中的第二版本来配置打包时期望打包的依赖包版本,这样在打包时,可以基于第二版本的数据打包得到期望的依赖包版本,从而打包得到期望版本的项目可执行文件。本申请兼顾了开发效率的同时还可以做到可信构建(即可以准确无误地构建得到期望版本的文件)。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (16)
1.一种软件项目打包方法,其特征在于,包括:
接收针对目标项目的打包指令,其中,所述打包指令用于指示根据所述目标项目的配置文件将所述目标项目打包成可执行文件,所述配置文件包括所述目标项目的依赖包的坐标,所述依赖包的坐标包括所述目标项目的标识、所述依赖包所在的模块的标识、所述依赖包的第一版本以及所述依赖包的第二版本,所述目标项目包括多个模块;
在所述依赖包的坐标中的所述依赖包的第二版本的数据有效时,根据所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第二版本在仓库中获取所述依赖包;
根据获取到的依赖包打包得到所述目标项目的可执行文件。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述依赖包的第二版本的数据无效时,根据所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第一版本在所述仓库中获取所述依赖包。
3.根据权利要求1或2所述的方法,其特征在于,所述打包指令还包括目标时间,所述目标时间为当前时间之前的时间,所述目标时间用于指示将所述目标时间时的所述目标项目进行打包,所述方法还包括:
根据所述目标时间确定所述目标项目的依赖包在所述目标时间的版本号,得到所述依赖包的真实版本号;
在所述配置文件中的所述依赖包的第二版本写入所述依赖包的真实版本号。
4.根据权利要求3所述的方法,其特征在于,所述根据获取到的依赖包打包得到所述目标项目的可执行文件之后,所述方法还包括:
在所述配置文件中的所述依赖包的第二版本写入无效数据或用于指示所述依赖包的第二版本无效的指示信息。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述依赖包的第一版本指示所述依赖包的最新版本。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述配置文件包括根配置文件以及一个或多个子配置文件;所述配置文件包括所述目标项目的依赖包的坐标,具体为:
所述根配置文件以及一个或多个子配置文件中的第一配置文件包括所述目标项目的依赖包的第一部分坐标,其中,所述第一部分坐标包括所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第一版本;
所述根配置文件以及一个或多个子配置文件中的第二配置文件包括所述目标项目的依赖包的第二部分坐标,其中,所述第二部分坐标包括所述依赖包的第二版本。
7.根据权利要求6所述的方法,其特征在于,所述第一配置文件为根配置文件,所述第二配置文件为子配置文件。
8.一种软件项目打包设备,其特征在于,所述设备包括:
接收单元,用于接收针对目标项目的打包指令,其中,所述打包指令用于指示根据所述目标项目的配置文件将所述目标项目打包成可执行文件,所述配置文件包括所述目标项目的依赖包的坐标,所述依赖包的坐标包括所述目标项目的标识、所述依赖包所在的模块的标识、所述依赖包的第一版本以及所述依赖包的第二版本,所述目标项目包括多个模块;
获取单元,用于在所述依赖包的坐标中的所述依赖包的第二版本的数据有效时,根据所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第二版本在仓库中获取所述依赖包;
打包单元,根据获取到的依赖包打包得到所述目标项目的可执行文件。
9.根据权利要求8所述的设备,其特征在于,所述获取单元还用于:
在所述依赖包的第二版本的数据无效时,根据所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第一版本在所述仓库中获取所述依赖包。
10.根据权利要求8或9所述的设备,其特征在于,所述打包指令还包括目标时间,所述目标时间为当前时间之前的时间,所述目标时间用于指示将所述目标时间时的所述目标项目进行打包,所述设备还包括:
确定单元,用于根据所述目标时间确定所述目标项目的依赖包在所述目标时间的版本号,得到所述依赖包的真实版本号;
写入单元,用于在所述配置文件中的所述依赖包的第二版本写入所述依赖包的真实版本号。
11.根据权利要求10所述的设备,其特征在于,所述写入单元还用于:在所述打包单元根据获取到的依赖包打包得到所述目标项目的可执行文件后,在所述配置文件中的所述依赖包的第二版本写入无效数据或用于指示所述依赖包的第二版本无效的指示信息。
12.根据权利要求8至11任一项所述的设备,其特征在于,所述依赖包的第一版本表征所述依赖包的最新版本。
13.根据权利要求8至12任一项所述的设备,其特征在于,所述配置文件包括根配置文件以及一个或多个子配置文件;所述配置文件包括所述目标项目的依赖包的坐标,具体为:
所述根配置文件以及一个或多个子配置文件中的第一配置文件包括所述目标项目的依赖包的第一部分坐标,其中,所述第一部分坐标包括所述目标项目的标识、所述依赖包所在的模块的标识和所述依赖包的第一版本;
所述根配置文件以及一个或多个子配置文件中的第二配置文件包括所述目标项目的依赖包的第二部分坐标,其中,所述第二部分坐标包括所述依赖包的第二版本。
14.根据权利要求13所述的设备,其特征在于,所述第一配置文件为根配置文件,所述第二配置文件为子配置文件。
15.一种电子设备,其特征在于,所述电子设备包括处理器、通信接口和存储器,其中,所述存储器用于存储计算机程序和/或数据,所述处理器用于执行所述存储器中存储的计算机程序,以使所述电子设备实现如权利要求1至7任一项所述的方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行以实现权利要求1至7任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010296164.9A CN113535138B (zh) | 2020-04-15 | 2020-04-15 | 软件项目打包方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010296164.9A CN113535138B (zh) | 2020-04-15 | 2020-04-15 | 软件项目打包方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113535138A CN113535138A (zh) | 2021-10-22 |
CN113535138B true CN113535138B (zh) | 2023-09-29 |
Family
ID=78120084
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010296164.9A Active CN113535138B (zh) | 2020-04-15 | 2020-04-15 | 软件项目打包方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113535138B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114443119A (zh) * | 2021-12-29 | 2022-05-06 | 北京金堤科技有限公司 | 项目架构搭建方法及其装置、计算机存储介质、电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108334334A (zh) * | 2018-03-07 | 2018-07-27 | 政采云有限公司 | 一种管理依赖包版本的方法和*** |
CN108595186A (zh) * | 2018-03-27 | 2018-09-28 | 天津麒麟信息技术有限公司 | 一种飞腾平台上基于完全函数的多版本软件管理方法 |
CN110727446A (zh) * | 2019-09-25 | 2020-01-24 | 光通天下网络科技股份有限公司 | 自动部署方法、装置、设备及介质 |
CN110737460A (zh) * | 2019-09-04 | 2020-01-31 | 厦门网宿有限公司 | 一种平台项目管理方法及装置 |
CN110928529A (zh) * | 2019-11-06 | 2020-03-27 | 第四范式(北京)技术有限公司 | 辅助算子开发的方法和*** |
-
2020
- 2020-04-15 CN CN202010296164.9A patent/CN113535138B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108334334A (zh) * | 2018-03-07 | 2018-07-27 | 政采云有限公司 | 一种管理依赖包版本的方法和*** |
CN108595186A (zh) * | 2018-03-27 | 2018-09-28 | 天津麒麟信息技术有限公司 | 一种飞腾平台上基于完全函数的多版本软件管理方法 |
CN110737460A (zh) * | 2019-09-04 | 2020-01-31 | 厦门网宿有限公司 | 一种平台项目管理方法及装置 |
CN110727446A (zh) * | 2019-09-25 | 2020-01-24 | 光通天下网络科技股份有限公司 | 自动部署方法、装置、设备及介质 |
CN110928529A (zh) * | 2019-11-06 | 2020-03-27 | 第四范式(北京)技术有限公司 | 辅助算子开发的方法和*** |
Also Published As
Publication number | Publication date |
---|---|
CN113535138A (zh) | 2021-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106605212B (zh) | 在动态链接的运行时环境中的模块化共同版本管理 | |
CN107168749B (zh) | 一种编译方法、装置、设备和计算机可读存储介质 | |
CN105657191B (zh) | 一种基于Android***的应用增量升级方法及*** | |
US8307379B2 (en) | Determining an extension to use to process an input object to a call in a program | |
CN108319460B (zh) | 应用程序安装包的生成方法、装置、电子设备及存储介质 | |
US20020169591A1 (en) | Module for developing wireless device applications using an integrated emulator | |
CN110990019B (zh) | 一种Java类分析方法、装置、存储介质及电子设备 | |
CN108376073B (zh) | 一种测试软件包生成方法及终端 | |
CN110673853B (zh) | 一种编译方法、装置及*** | |
KR20170097360A (ko) | 패키지 파일에 대한 기능 확장 방법 및 시스템 | |
WO2005114403A1 (en) | Method and apparatus for reusing a computer software library | |
CN106796521B (zh) | 独立于产品发布的api版本控制 | |
CN110333872B (zh) | 一种应用的处理方法、装置、设备和介质 | |
CN113535138B (zh) | 软件项目打包方法及相关设备 | |
CN113360156B (zh) | 一种ios编译方法及相关设备 | |
CN114721647B (zh) | 一种基于无代码应用开发的面向对象编程方法 | |
CN115794214A (zh) | 应用模块元数据管理方法、设备、存储介质及装置 | |
US11573777B2 (en) | Method and apparatus for enabling autonomous acceleration of dataflow AI applications | |
CN114816475A (zh) | 一种嵌入式操作***的更新方法、装置、设备和介质 | |
CN106547519B (zh) | 信息处理方法及*** | |
CN110362320B (zh) | 一种应用开发平台的命令实现方法和装置 | |
CN112306539A (zh) | 一种单片机应用层开发方法、***、终端及介质 | |
CN115129333B (zh) | 适用于微前端框架的npm资源包管理方法、装置及*** | |
CN113672238B (zh) | 基于实时操作***模块化管理的运行方法、装置及设备 | |
KR20180048518A (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 |