CN116225393A - Java程序增量编译方法及相关装置 - Google Patents
Java程序增量编译方法及相关装置 Download PDFInfo
- Publication number
- CN116225393A CN116225393A CN202111481632.0A CN202111481632A CN116225393A CN 116225393 A CN116225393 A CN 116225393A CN 202111481632 A CN202111481632 A CN 202111481632A CN 116225393 A CN116225393 A CN 116225393A
- Authority
- CN
- China
- Prior art keywords
- file
- code
- compiling
- project
- package
- 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
Images
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/48—Incremental compilation
-
- 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
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明实施例涉及软件开发技术领域,公开了一种Java程序增量编译方法,该方法包括:获取当前提交的项目代码;根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包;将所述当前代码包发送至服务器。通过上述方式,本发明实施例实现了有效提高编译效率的效果。
Description
技术领域
本发明实施例涉及软件开发技术领域,具体涉及一种Java程序增量编译方法、装置、设备及计算机可读存储介质。
背景技术
目前,Java项目在Jenkins持续集成中,编译的时候通常会拉取整个项目使用Maven Build命令进行打包。而该命令基于pom.xml文件的配置从maven仓库中拉取项目所依赖代码包,并且将项目中的每个文件都编译成class文件。如果项目比较大,那么整个编译过程将会耗费较长时间,达到分钟级别。当项目团队较大,开发人员较多的时候,每次提交代码都会触发Jenkins持续集成的全量编译部署,因而会在编译项目中浪费大量时间。
发明内容
鉴于上述问题,本发明实施例提供了一种Java程序增量编译方法、装置、设备及计算机可读存储介质,用于解决现有技术中存在的编译效率低的技术问题。
根据本发明实施例的一个方面,提供了一种Java程序增量编译方法,所述方法包括:
获取当前提交的项目代码;
根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包;
将所述当前代码包发送至服务器。
在一种可选的方式中,所述根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包,包括:
确定所述当前提交的项目代码中是否包含对pomxml文件的修改信息;
若存在所述修改信息,则根据所述修改信息及上次编译生成的代码包文件,进行增量编译,生成当前代码包。
在一种可选的方式中,所述确定所述当前提交的项目代码中是否包含对pomxml文件的修改信息之后,包括:
若不存在所述修改信息,检查服务器是否存在所述上次编译生成的代码包文件;
若存在,则编译所述当前提交的项目代码中的java文件,得到编译后的java文件;
获取所述编译后的java文件中相对于与所述上次编译生成的代码包文件中变化的java文件,将所述变化的java文件逐个编译成对应的类文件;
将编译后的类文件替换所述所述上次编译生成的代码包文件中对应的java文件,以生成当前代码包。
在一种可选的方式中,所述若不存在所述修改信息,检查服务器是否存在所述上次编译生成的代码包文件之后,包括:
若所述服务器不存在所述上次编译生成的代码包文件,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
在一种可选的方式中,所述若存在所述修改信息,则根据所述修改信息及上次编译生成的代码包文件,进行增量编译,生成当前代码包,包括:
若存在所述修改信息,则分析所述pomxml文件是修改状态还是新增状态;
若所述pomxml文件为修改状态,则根据上次编译生成的代码包文件确认所述pomxml文件中是否包含插件的变化;
若不包含插件的变化,则分析所述pomxml文件中是否包含有依赖的变化;
若所述pomxml文件中包含有依赖的变化,则从仓库中下载对应的代码包,替换所述上次编译生成的代码包文件中类文件路径下代码包;
在所述类文件路径的基础上,编译提交修改的java文件为目标class文件,替换所述上次编译生成的代码包文件中的class文件,以生成当前代码包。
在一种可选的方式中,所述若存在所述修改信息,则分析所述pomxml文件是修改状态还是新增状态,包括:
若所述pomxml文件为新增状态,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
在一种可选的方式中,所述若所述pomxml文件为修改状态,则根据上次编译生成的代码包文件确认所述pomxml文件中是否包含插件的变化之后,包括:
若包含插件的变化,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
根据本发明实施例的另一方面,提供了一种Java程序增量编译装置,包括:
获取模块,用于获取当前提交的项目代码;
编译模块,用于根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包;
发送模块,用于将所述当前代码包发送至服务器。
根据本发明实施例的另一方面,提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行所述的Java程序增量编译方法的操作。
根据本发明实施例的又一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令在计算设备上运行时,使得计算设备执行所述的Java程序增量编译方法的操作。
本发明实施例通过获取当前提交的项目代码,根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包,将所述当前代码包发送至服务器,能够有效提高编译效率,提高了开发效率。
上述说明仅是本发明实施例技术方案的概述,为了能够更清楚了解本发明实施例的技术手段,而可依照说明书的内容予以实施,并且为了让本发明实施例的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
附图仅用于示出实施方式,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了现有方案中Java程序增量编译方法的流程示意图;
图2示出了本发明实施例提供的Java程序增量编译方法的流程示意图;
图3示出了本发明另一实施例提供的Java程序增量编译方法的流程示意图;
图4示出了本发明实施例提供的Java程序增量编译装置的结构示意图;
图5示出了本发明实施例提供的计算设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。
首先,对本申请中的部分技术名称进行解释。
代码管理平台Git:是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
Jenkins(持续集成平台):是一个开源软件项目,是基于Java开发的一种持续集成和持续部署的一个工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。jenkin从git中获取代码,并且自动build,拷贝到指定的服务器上,并且部署。
Maven项目对象模型(POM):为项目管理及自动构建工具,通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
class文件:class文件全名称为Java class文件,主要在平台无关性和网络移动性方面使Java更适合网络。它在平台无关性方面的任务是:为Java程序提供独立于底层主机平台的二进制形式的服务。
pomxml文件(pom.xml):POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,称为pom.xml文件。
目前在互联网领域,Jenkins持续集成部署几乎已经成为行业标配,对于Java项目来说,整体流程如图1所示,部署流程为:
1、当开发人员在工作区编写好代码提交到代码管理平台Git上后,版本控制服务器通过配置的Webhook钩子接收到提交变更的通知。
2、持续集成平台jenkins收到通知后,调用Git相关插件从Git代码管理平台上获取本次提交的完整代码。
3、持续集成平台jenkins,通过maven插件调用Maven Build命令将代码完整打包成一个代码包,如Jar包或者War包。
4、将代码包传输到远程服务器中,并执行服务器中提前编写的启动脚本完成启动。
通过上述这种持续集成的自动化编译部署,避免了运维人员手动打包部署,节省了开发运维成本,提高了工作效率。然而,Java项目在Jenkins持续集成中,编译的时候通常会拉取整个项目使用Maven Build命令进行打包。而该命令基于pom.xml文件的配置从maven仓库中拉取项目所依赖代码包,并且将项目中的每个文件都编译成class文件。如果项目比较大,那么整个编译过程将会耗费较长时间,达到分钟级别。当项目团队较大,开发人员较多的时候,每次提交代码都会触发Jenkins持续集成的全量编译部署,因而会在编译项目中浪费大量时间。
由于基于maven的项目在确定后,pom.xml文件再次改动较少,如果编译时无需编译原来已经编译过的文件,对于已经下载过的jar包不需要再重新下载,并且只对提交的代码文件进行增量编译,则将会极大地降低编译时间。因此,本申请基于Git Patch的思想,获取git代码管理平台当次提交的所有代码文件,动态增量编译本次提交的代码,替换上次编译生成的jar包中的class文件,实现代码的增量编译,然后将增量替换后的代码包发送到服务器上,这样能够有效降低编译成本,节省编译时间。
图2示出了本发明实施例提供的Java程序增量编译方法的流程图,该方法由计算设备执行。该计算设备可以是具有计算能力的设备,包括计算机设备、服务器、终端等,本发明实施例不做具体限制。如图2所示,该方法包括以下步骤:
步骤110:获取当前提交的项目代码。
其中,开发人员在完成当前的开发功能后,将项目代码提交至代码管理平台Git。代码管理平台Git获取当前提交的项目代码。持续集成平台Jenkins配置的Git钩子webhook监听项目的代码提交情况,代码提交后会触发当前提交的项目代码的通知。
持续集成平台Jenkins收到代码提交通知后,调用Git插件从Git仓库远端拉取当前提交的项目代码文件,并将该当前提交的项目代码的所有文件拉到持续集成平台Jenkins的本地代码库中。
步骤120:根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包。
其中,当前代码包可以是当前jar包或War包。
本发明实施例中,持续集成平台确定所述当前提交的项目代码中是否包含对pomxml文件的修改信息:
若存在所述修改信息,则根据所述修改信息及上次编译生成的代码包文件,进行增量编译,生成当前代码包。具体地,若存在所述修改信息,则分析所述pomxml文件是修改状态还是新增状态;若所述pomxml文件为修改状态,则根据上次编译生成的代码包文件确认所述pomxml文件中是否包含插件的变化;若不包含插件的变化,则分析所述pomxml文件中是否包含有依赖的变化;若所述pomxml文件中包含有依赖的变化,则从仓库中下载对应的代码包,替换所述上次编译生成的代码包文件中类文件路径下代码包;在所述类文件路径的基础上,编译提交修改的java文件为目标class文件,替换所述上次编译生成的代码包文件中的class文件,以生成当前代码包。若包含插件的变化,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。若所述pomxml文件为新增状态,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
若不存在所述修改信息,则检查服务器是否存在所述上次编译生成的代码包文件,若存在,则编译所述当前提交的项目代码中的java文件,得到编译后的java文件;获取所述编译后的java文件中相对于与所述上次编译生成的代码包文件中变化的java文件,将所述变化的java文件逐个编译成对应的类文件;将编译后的类文件替换所述所述上次编译生成的代码包文件中对应的java文件,以生成当前代码包。若所述服务器不存在所述上次编译生成的代码包文件,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
步骤130:将所述当前代码包发送至服务器。
本发明实施例中,在得到当前代码包后,持续集成平台将jar包推送到远程服务器并执行对应的脚本。
本发明实施例通过获取当前提交的项目代码,根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包,将所述当前代码包发送至服务器,能够有效提高编译效率。
图3示出了本发明另一实施例提供的Java程序增量编译方法的流程图,该方法由计算设备执行。如图3所示,该方法包括以下步骤:
步骤210:开发人员在完成开发功能后,会将当前开发的项目代码以文件的方式提交到Git代码管理平台中,Jenkins配置的Git钩子webhook监听项目的代码提交情况,在当前提交的项目代码提交后会触发本次提交的通知。
步骤220:收到当前提交的项目代码的提交通知后,Jenkins调用Git插件从Git仓库远端拉取项目该次提交记录,并将该次提交的所有文件拉到本地代码库中。
步骤230:Jenkins分析本次提交文件中是否包含pom.xml文件,如果不包含,则进入步骤240,如果包含pom.xml文件,则进入步骤250。
步骤240:检查服务器是否存在上一次编译的jar包,如果不存在,则进入步骤2120,如果存在,则进入步骤260。
步骤250:判断本次提交的pom.xml文件是新增还是修改状态,如果是新增状态,则进入步骤2120;如果是修改状态,则进入步骤270。
步骤260:编译提交的文件,获取到变化的Java文件后,将Java文件逐个编译成对应的class文件,将编译后的class文件替换原jar包中的文件,最终生成新的Jar包后推送到远程服务器中。
本发明一个实施例中,具体地:
(1)该文件所在的目录为/a/b/c,该文件编译后的class为d.class,如果该文件是新增文件,则将d.class文件添加到jar包中classpath所在的目录下的/a/b/c目录下;
(2)如果该文件是修改的提交,则将d.class替换原jar包中classpath所在目录下的/a/b/c目录下的d.class文件;
(3)若d.class是删除文件,则删除原jar包中classpath所在目录下的/a/b/c目录下的d.class文件。
步骤270:检查服务器是否存在上一次编译的jar包,如果不存在,则进入2120,如果存在,则进入步骤280。
步骤280:判断本次修改的pom.xml中是否包含plugins的变化,如果是,则进入步骤2120,如果不包含,则进入290。
步骤290:分析pom.xml中是否包含有dependency的变化,如果pom.xml中dependency发生变化,则从仓库中下载对应的jar包,替换原fat jar中lib文件夹下对应目录的jar包,然后在该classpath基础上,执行步骤2110;如果不包含dependency的变化,则直接进入步骤2110。
步骤2110:编译提交修改的Java文件为class文件,替换原jar包中对应的class文件,并按照pom.xml中定义的name和version来修改生成的jar文件的名称。
步骤2120:调用Maven Build全量编译整个项目为jar包。
步骤2130:将jar包推送到远程服务器并执行脚本。
本发明实施例通过获取当前提交的项目代码,根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包,将所述当前代码包发送至服务器,能够有效提高编译效率。
图4示出了本发明实施例提供的Java程序增量编译装置的结构示意图。
如图4所示,该装置300包括:
获取模块310,用于获取当前提交的项目代码;
编译模块320,用于根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包;
发送模块330,用于将所述当前代码包发送至服务器。
在一种可选的方式中,所述根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包,包括:
确定所述当前提交的项目代码中是否包含对pomxml文件的修改信息;
若存在所述修改信息,则根据所述修改信息及上次编译生成的代码包文件,进行增量编译,生成当前代码包。
在一种可选的方式中,所述确定所述当前提交的项目代码中是否包含对pomxml文件的修改信息之后,包括:
若不存在所述修改信息,检查服务器是否存在所述上次编译生成的代码包文件;
若存在,则编译所述当前提交的项目代码中的java文件,得到编译后的java文件;
获取所述编译后的java文件中相对于与所述上次编译生成的代码包文件中变化的java文件,将所述变化的java文件逐个编译成对应的类文件;
将编译后的类文件替换所述所述上次编译生成的代码包文件中对应的java文件,以生成当前代码包。
在一种可选的方式中,所述若不存在所述修改信息,检查服务器是否存在所述上次编译生成的代码包文件之后,包括:
若所述服务器不存在所述上次编译生成的代码包文件,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
在一种可选的方式中,所述若存在所述修改信息,则根据所述修改信息及上次编译生成的代码包文件,进行增量编译,生成当前代码包,包括:
若存在所述修改信息,则分析所述pomxml文件是修改状态还是新增状态;
若所述pomxml文件为修改状态,则根据上次编译生成的代码包文件确认所述pomxml文件中是否包含插件的变化;
若不包含插件的变化,则分析所述pomxml文件中是否包含有依赖的变化;
若所述pomxml文件中包含有依赖的变化,则从仓库中下载对应的代码包,替换所述上次编译生成的代码包文件中类文件路径下代码包;
在所述类文件路径的基础上,编译提交修改的java文件为目标class文件,替换所述上次编译生成的代码包文件中的class文件,以生成当前代码包。
在一种可选的方式中,所述若存在所述修改信息,则分析所述pomxml文件是修改状态还是新增状态,包括:
若所述pomxml文件为新增状态,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
在一种可选的方式中,所述若所述pomxml文件为修改状态,则根据上次编译生成的代码包文件确认所述pomxml文件中是否包含插件的变化之后,包括:
若包含插件的变化,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
本发明实施例的Java程序增量编译装置的具体工作步骤与上述Java程序增量编译方法的具体方法步骤大体一致,此处不再赘述。
本发明实施例通过获取当前提交的项目代码,根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包,将所述当前代码包发送至服务器,能够有效提高编译效率。
图5示出了本发明实施例提供的计算设备的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。
如图5所示,该计算设备可以包括:处理器(processor)402、通信接口(Communications Interface)404、存储器(memory)406、以及通信总线408。
其中:处理器402、通信接口404、以及存储器406通过通信总线408完成相互间的通信。通信接口404,用于与其它设备比如客户端或其它服务器等的网元通信。处理器402,用于执行程序410,具体可以执行上述用于Java程序增量编译方法实施例中的相关步骤。
具体地,程序410可以包括程序代码,该程序代码包括计算机可执行指令。
处理器402可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器406,用于存放程序410。存储器406可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序410具体可以被处理器402调用使计算设备执行以下操作:
获取当前提交的项目代码;
根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包;
将所述当前代码包发送至服务器。
在一种可选的方式中,所述根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包,包括:
确定所述当前提交的项目代码中是否包含对pomxml文件的修改信息;
若存在所述修改信息,则根据所述修改信息及上次编译生成的代码包文件,进行增量编译,生成当前代码包。
在一种可选的方式中,所述确定所述当前提交的项目代码中是否包含对pomxml文件的修改信息之后,包括:
若不存在所述修改信息,检查服务器是否存在所述上次编译生成的代码包文件;
若存在,则编译所述当前提交的项目代码中的java文件,得到编译后的java文件;
获取所述编译后的java文件中相对于与所述上次编译生成的代码包文件中变化的java文件,将所述变化的java文件逐个编译成对应的类文件;
将编译后的类文件替换所述所述上次编译生成的代码包文件中对应的java文件,以生成当前代码包。
在一种可选的方式中,所述若不存在所述修改信息,检查服务器是否存在所述上次编译生成的代码包文件之后,包括:
若所述服务器不存在所述上次编译生成的代码包文件,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
在一种可选的方式中,所述若存在所述修改信息,则根据所述修改信息及上次编译生成的代码包文件,进行增量编译,生成当前代码包,包括:
若存在所述修改信息,则分析所述pomxml文件是修改状态还是新增状态;
若所述pomxml文件为修改状态,则根据上次编译生成的代码包文件确认所述pomxml文件中是否包含插件的变化;
若不包含插件的变化,则分析所述pomxml文件中是否包含有依赖的变化;
若所述pomxml文件中包含有依赖的变化,则从仓库中下载对应的代码包,替换所述上次编译生成的代码包文件中类文件路径下代码包;
在所述类文件路径的基础上,编译提交修改的java文件为目标class文件,替换所述上次编译生成的代码包文件中的class文件,以生成当前代码包。
在一种可选的方式中,所述若存在所述修改信息,则分析所述pomxml文件是修改状态还是新增状态,包括:
若所述pomxml文件为新增状态,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
在一种可选的方式中,所述若所述pomxml文件为修改状态,则根据上次编译生成的代码包文件确认所述pomxml文件中是否包含插件的变化之后,包括:
若包含插件的变化,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
本发明实施例通过获取当前提交的项目代码,根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包,将所述当前代码包发送至服务器,能够有效提高编译效率。
本发明实施例提供了一种计算机可读存储介质,所述存储介质存储有至少一可执行指令,该可执行指令在计算设备上运行时,使得所述计算设备执行上述任意方法实施例中的Java程序增量编译方法。
可执行指令具体可以用于使得计算设备执行以下操作:
获取当前提交的项目代码;
根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包;
将所述当前代码包发送至服务器。
在一种可选的方式中,所述根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包,包括:
确定所述当前提交的项目代码中是否包含对pomxml文件的修改信息;
若存在所述修改信息,则根据所述修改信息及上次编译生成的代码包文件,进行增量编译,生成当前代码包。
在一种可选的方式中,所述确定所述当前提交的项目代码中是否包含对pomxml文件的修改信息之后,包括:
若不存在所述修改信息,检查服务器是否存在所述上次编译生成的代码包文件;
若存在,则编译所述当前提交的项目代码中的java文件,得到编译后的java文件;
获取所述编译后的java文件中相对于与所述上次编译生成的代码包文件中变化的java文件,将所述变化的java文件逐个编译成对应的类文件;
将编译后的类文件替换所述所述上次编译生成的代码包文件中对应的java文件,以生成当前代码包。
在一种可选的方式中,所述若不存在所述修改信息,检查服务器是否存在所述上次编译生成的代码包文件之后,包括:
若所述服务器不存在所述上次编译生成的代码包文件,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
在一种可选的方式中,所述若存在所述修改信息,则根据所述修改信息及上次编译生成的代码包文件,进行增量编译,生成当前代码包,包括:
若存在所述修改信息,则分析所述pomxml文件是修改状态还是新增状态;
若所述pomxml文件为修改状态,则根据上次编译生成的代码包文件确认所述pomxml文件中是否包含插件的变化;
若不包含插件的变化,则分析所述pomxml文件中是否包含有依赖的变化;
若所述pomxml文件中包含有依赖的变化,则从仓库中下载对应的代码包,替换所述上次编译生成的代码包文件中类文件路径下代码包;
在所述类文件路径的基础上,编译提交修改的java文件为目标class文件,替换所述上次编译生成的代码包文件中的class文件,以生成当前代码包。
在一种可选的方式中,所述若存在所述修改信息,则分析所述pomxml文件是修改状态还是新增状态,包括:
若所述pomxml文件为新增状态,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
在一种可选的方式中,所述若所述pomxml文件为修改状态,则根据上次编译生成的代码包文件确认所述pomxml文件中是否包含插件的变化之后,包括:
若包含插件的变化,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
本发明实施例通过获取当前提交的项目代码,根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包,将所述当前代码包发送至服务器,能够有效提高编译效率。
本发明实施例提供一种Java程序增量编译装置,用于执行上述Java程序增量编译方法。
本发明实施例提供了一种计算机程序,所述计算机程序可被处理器调用使计算设备执行上述任意方法实施例中的Java程序增量编译方法。
本发明实施例提供了一种计算机程序产品,计算机程序产品包括存储在计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令在计算机上运行时,使得所述计算机执行上述任意方法实施例中的Java程序增量编译方法。
在此提供的算法或显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明实施例也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。
本领域技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。上述实施例中的步骤,除有特殊说明外,不应理解为对执行顺序的限定。
Claims (10)
1.一种Java程序增量编译方法,其特征在于,所述方法包括:
获取当前提交的项目代码;
根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包;
将所述当前代码包发送至服务器。
2.根据权利要求1所述的方法,其特征在于,所述根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包,包括:
确定所述当前提交的项目代码中是否包含对pomxml文件的修改信息;
若存在所述修改信息,则根据所述修改信息及上次编译生成的代码包文件,进行增量编译,生成当前代码包。
3.根据权利要求2所述的方法,其特征在于,所述确定所述当前提交的项目代码中是否包含对pomxml文件的修改信息之后,包括:
若不存在所述修改信息,检查服务器是否存在所述上次编译生成的代码包文件;
若存在,则编译所述当前提交的项目代码中的java文件,得到编译后的java文件;
获取所述编译后的java文件中相对于与所述上次编译生成的代码包文件中变化的java文件,将所述变化的java文件逐个编译成对应的类文件;
将编译后的类文件替换所述所述上次编译生成的代码包文件中对应的java文件,以生成当前代码包。
4.根据权利要求3所述的方法,其特征在于,所述若不存在所述修改信息,检查服务器是否存在所述上次编译生成的代码包文件之后,包括:
若所述服务器不存在所述上次编译生成的代码包文件,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
5.根据权利要求2所述的方法,其特征在于,所述若存在所述修改信息,则根据所述修改信息及上次编译生成的代码包文件,进行增量编译,生成当前代码包,包括:
若存在所述修改信息,则分析所述pomxml文件是修改状态还是新增状态;
若所述pomxml文件为修改状态,则根据上次编译生成的代码包文件确认所述pomxml文件中是否包含插件的变化;
若不包含插件的变化,则分析所述pomxml文件中是否包含有依赖的变化;
若所述pomxml文件中包含有依赖的变化,则从仓库中下载对应的代码包,替换所述上次编译生成的代码包文件中类文件路径下代码包;
在所述类文件路径的基础上,编译提交修改的java文件为目标class文件,替换所述上次编译生成的代码包文件中的class文件,以生成当前代码包。
6.根据权利要求5所述的方法,其特征在于,所述若存在所述修改信息,则分析所述pomxml文件是修改状态还是新增状态,包括:
若所述pomxml文件为新增状态,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
7.根据权利要求5所述的方法,其特征在于,所述若所述pomxml文件为修改状态,则根据上次编译生成的代码包文件确认所述pomxml文件中是否包含插件的变化之后,包括:
若包含插件的变化,则调用Maven Build全量编译整个项目为当前代码包,所述项目为当前提交的项目代码所对应的项目。
8.一种Java程序增量编译装置,其特征在于,所述装置包括:
获取模块,用于获取当前提交的项目代码;
编译模块,用于根据上次编译生成的代码包文件以及所述当前提交的项目代码,进行增量编译,生成当前代码包;
发送模块,用于将所述当前代码包发送至服务器。
9.一种计算设备,其特征在于,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-7任意一项所述的Java程序增量编译方法的操作。
10.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一可执行指令,所述可执行指令在计算设备上运行时,使得计算设备执行如权利要求1-7任意一项所述的Java程序增量编译方法的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111481632.0A CN116225393A (zh) | 2021-12-06 | 2021-12-06 | Java程序增量编译方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111481632.0A CN116225393A (zh) | 2021-12-06 | 2021-12-06 | Java程序增量编译方法及相关装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116225393A true CN116225393A (zh) | 2023-06-06 |
Family
ID=86568514
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111481632.0A Pending CN116225393A (zh) | 2021-12-06 | 2021-12-06 | Java程序增量编译方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116225393A (zh) |
-
2021
- 2021-12-06 CN CN202111481632.0A patent/CN116225393A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111142879B (zh) | 软件集成发布方法及自动运维平台 | |
US10114637B1 (en) | Automatically updating a shared project build platform | |
CN108319460B (zh) | 应用程序安装包的生成方法、装置、电子设备及存储介质 | |
US8756616B2 (en) | System and method for reducing the static footprint of mixed-language JAVA classes | |
CN107704238B (zh) | 一种对项目进行打包的方法及装置 | |
US20200183683A1 (en) | Application architecture generation | |
WO2017041499A1 (zh) | 一种软件升级方法、系统和计算机可读存储介质 | |
CN111078265B (zh) | 一种基于jenkins的web项目更新补丁生成方法 | |
EP3447635A1 (en) | Application architecture generation | |
CN113220337A (zh) | 一种版本构建方法、装置、计算机设备和存储介质 | |
CN113064630A (zh) | 移动端app自动打包方法、系统、电子设备及存储介质 | |
CN115658237A (zh) | 一种容器应用自动部署方法、设备、装置、设备及介质 | |
CN113687858A (zh) | 配置文件的检查方法、装置、电子设备及存储介质 | |
US20110047526A1 (en) | Method and a system for transforming an object model | |
CN110647349B (zh) | 一种实现iOS APP持续交付的方法 | |
CN115454575B (zh) | jar包转换并自动加载的方法、装置、设备及存储介质 | |
CN114546819A (zh) | 代码处理方法、装置、电子设备及可读介质 | |
CN114490103A (zh) | 一种操作系统接口调用方法、装置以及电子设备 | |
US7721279B1 (en) | Packaging information integration applications | |
US12026493B2 (en) | Docker image creation apparatus and method | |
CN116225393A (zh) | Java程序增量编译方法及相关装置 | |
CN110673890B (zh) | 插件调用方法、系统、介质及装置 | |
CN111273940B (zh) | 将程序文件上传至代码仓库的方法及装置 | |
CN111367796A (zh) | 应用程序调试方法及装置 | |
CN111913720A (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 |