CN116820546A - 代码生成方法、编译器、装置、设备及计算机可读介质 - Google Patents
代码生成方法、编译器、装置、设备及计算机可读介质 Download PDFInfo
- Publication number
- CN116820546A CN116820546A CN202310655600.0A CN202310655600A CN116820546A CN 116820546 A CN116820546 A CN 116820546A CN 202310655600 A CN202310655600 A CN 202310655600A CN 116820546 A CN116820546 A CN 116820546A
- Authority
- CN
- China
- Prior art keywords
- code
- template
- electronic device
- hosting platform
- library
- 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
- 238000000034 method Methods 0.000 title claims abstract description 69
- 238000011161 development Methods 0.000 claims abstract description 80
- 230000010354 integration Effects 0.000 claims abstract description 12
- 230000006870 function Effects 0.000 claims description 25
- 230000008569 process Effects 0.000 claims description 23
- 230000015654 memory Effects 0.000 claims description 19
- 238000004891 communication Methods 0.000 claims description 5
- 230000004044 response Effects 0.000 claims description 5
- 238000005516 engineering process Methods 0.000 abstract 1
- 238000013461 design Methods 0.000 description 11
- 230000008859 change Effects 0.000 description 5
- 238000007726 management method Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 230000008571 general function Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000011148 porous material Substances 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Abstract
本申请涉及计算机技术领域,具体涉及一种代码生成方法、编译器、装置、设备及计算机可读介质。该方法包括:第一电子设备在第一源代码中封装业务集成相关的至少一个接口、并预设第一配置文件,创建第一代码模板并存储至代码托管平台;第二电子设备响应于接收到的开发需求,从代码托管平台获取与开发需求相关的第一代码模板,并解析第一代码模板中封装的第一配置文件,得到与目标用户相关的/用于修改第一代码模板中预先配置的可修改内容的第一配置数据;第二电子设备利用第一配置数据修改第一代码模板中的相应内容,生成满足开发需求的目标代码,并将目标代码存储至代码托管平台。如此,能满足个性化需求生成代码,有利于开发效率。
Description
技术领域
本发明涉及软件技术领域,具体涉及一种代码生成方法、编译器、装置、设备及计算机可读介质。
背景技术
为了提升开发速度,最大程度上提高代码的可复用性,基于(代码)模板的二次开发是一种趋势。其中,代码的功能主要是跟已有的业务服务集成,代码模板可以提供可复制的可执行代码,即源代码。该可执行代码屏蔽了跟业务服务集成的繁琐过程,开发人员可以基于模板快速将生成的代码与已有的业务服务进行集成。
如何基于已有的模板快速且正确的生成代码,并将生成的代码托管到外部平台(例如github)上。其中github是一个代码托管的云服务网站,帮助开发人员存储和管理其项目源代码,且能够追踪、记录并控制用户对其代码的修改。然而,目前存储至github管理的一些开源项目的源代码,可供开发人员访问学习,但无法提供快速生成相应功能代码的模板。如此,开发人员在需要开发相应功能的项目代码时,仍需自行开发,效率较低。而另一些私有平台虽然能够提供代码模板,但这类代码模板往往需要付费购买,并且基于这类代码模板生成代码的过程通常将模板提供的源代码下载到本地进行修改,而无法直接基于该模板个性化地生成能够直接应用于开发人员的开发环境的源代码。如此,基于这类模板开发代码的过程也很繁琐复杂,效率低下。
综上,目前开发人员在生成项目代码的过程中仍存在开发效率难以提高的问题。
发明内容
本申请提供了一种代码生成方法、编译器、装置、设备及计算机可读介质,能够提高开发效率,为开发人员提供基于特定的代码模板生成的、针对不同租户数据的可执行代码,实现代码生成过程的个性化定制。
第一方面,本申请提供了一种代码生成方法,该方法包括:第一电子设备在第一源代码中封装至少一个接口、并预设第一配置文件,创建第一代码模板,其中至少一个接口为业务集成相关的接口,第一源代码为能够实现第一类功能或服务的可执行代码,第一配置文件包括为第一源代码配置的与目标用户相关的配置数据;第一电子设备将第一代码模板存储至代码托管平台;第二电子设备响应于接收到的开发需求,从代码托管平台获取与开发需求相关的第一代码模板,其中开发需求包括在待开发的目标项目中集成第一类功能或服务的需求;第二电子设备解析第一代码模板中封装的第一配置文件,得到与目标用户相关的第一配置数据,其中第一配置数据用于修改第一代码模板中预先配置的可修改内容;第二电子设备利用第一配置数据修改第一代码模板中的相应内容,生成满足开发需求的目标代码,并将目标代码存储至代码托管平台,其中目标代码用于实现第一类功能或服务来处理与目标用户相关的数据。
例如,上述第一电子设备可以是开发人员开发项目代码使用的开发终端,上述第一源代码可以是开发人员已开发的历史项目中用于执行相应功能或服务的源代码。第一电子设备在基于已开发的项目源代码创建第一代码模板后,可以将该代码模板指定托管至代码托管平台上以供第二电子设备获取并生成所需的可执行代码。
进而,当开发人员需要在即将开发的项目中集成上述第一源代码提供的功能或服务时,则可以请求第二电子设备,例如编译服务器或其他具有相应配置功能的服务器或服务器集群,向代码托管平台获取上述第一代码模板并基于该代码模板中预设的配置文件(例如上述第一配置文件)动态解释,修改该代码模板中的相应配置内容,即上述预先配置的可修改内容。如此,基于第一代码模板生成的可执行代码便可以直接基于上述配置,获取对应配置的租户数据或其他与目标用户相关的运行所需数据,实现针对相应数据的处理功能。
可见,基于上述第一方面提供的代码生成方法,开发人员无需花费精力对代码模板中封装的源代码进行手动配置,而是可以直接获取针对目标用户相关数据的可执行代码。如此,可以大大提高开发效率,节省开发人员开发后续项目代码的开发时间。
在上述第一方面的一种可能的实现中,第一电子设备将第一代码模板存储至代码托管平台,包括:第一电子设备将创建的第一代码模板发送给代码托管平台,并指示代码托管平台将第一代码模板存入对应创建的模板库,其中,模板库为基于第一源代码对应托管的第一代码库创建的用于存储相应代码模板的存储空间。
即第一电子设备在基于已开发的项目源代码创建第一代码模板后,可以将该代码模板指定托管至代码托管平台对应创建的模板库中。如此,可便于代码托管平台对基于不同功能或服务对应的源代码创建的代码模板进行分类存储和管理,也便于后续该代码模板被获取并用于生成相应的可执行代码。
在上述第一方面的一种可能的实现中,第一电子设备在已开发的第一源代码中封装至少一个接口、并预设第一配置文件,创建第一代码模板,包括:第一电子设备将与业务集成相关的一个或多个接口之间的调用逻辑和上下文数据,封装至第一源代码中,生成第二代码模板;第一电子设备在第二代码模板中预设第一配置文件、并将第一配置文件对应的调用路径预设在第二代码模板中,创建第一代码模板。
即创建代码模板的方式,可以是将业务集成相关的接口及各接口之间的调用逻辑封装在第一源代码中,并预设用于配置相应租户数据或其他与用户相关的内容的配置文件。其中,各接口之间的调用逻辑可以与相应的业务集成相关,该业务场景例如可以时第一源代码被开发时所应用的业务场景。如此创建的代码模板,则可以在被动态解释时,自动生成与用户相关的可执行代码。
在上述第一方面的一种可能的实现中,第二电子设备包括预设的用于解析第一配置文件的引擎服务,并且,第二电子设备解析第一代码模板中封装的第一配置文件,得到与目标用户相关的第一配置数据,包括:第二电子设备运行引擎服务对第一配置文件进行解析,得到第一配置数据。
在上述第一方面的一种可能的实现中,开发需求对应于第三电子设备请求生成目标代码以用于编译目标项目的项目代码的需求,并且,方法包括:
确定目标代码已存入代码托管平台的第二代码库,第二电子设备或代码托管平台向第三电子设备发送通知消息,其中,通知消息用于通知第三电子设备目标代码已存入第二代码库,其中第二代码库为基于模板库对应创建的用于存放目标代码的存储空间;第三电子设备基于接收到的通知消息,向代码托管平台请求获取目标代码。
例如,上述第三电子设备为开发人员开发项目代码所使用的开发终端,该电子设备可以与上述第一电子设备相同或不同。当第三电子设备需要使用生成的目标代码时,通过请求第二电子设备生成相应的目标代码后,可以基于第二电子设备或代码托管平台的通知,获取已被存储至代码托管平台的目标代码。如此,可以打破私有平台对代码模板的管理局限,有利于各业务平台的开发人员共享相同功能或服务的源代码,提高开发效率。
在上述第一方面的一种可能的实现中,该通知消息为代码托管平台发送的广播消息,或者,通知消息为第二电子设备基于与第三电子设备之间的通信连接发送的通信消息。
在上述第一方面的一种可能的实现中,目标代码以可执行代码文件的形式存入第二代码库,并且,将目标代码存储至代码托管平台,包括:第二电子设备将目标代码对应的可执行代码文件打包并发送给代码托管平台,并指示代码托管平台将可执行代码文件存入第二代码库中。
在上述第一方面的一种可能的实现中,第一配置文件的格式包括json格式、java格式以及properties格式中的任一项。
在上述第一方面的一种可能的实现中,第一配置数据包括租户信息、租户数据获取路径、以及目标代码执行所需运行数据的获取路径中的至少一项。
第二方面,本申请提供了一种编译器,设置在第二电子设备中,并且第二电子设备通过编译器执行上述第一方面及上述第一方面的各种可能的实现提供的代码生成方法。
第三方面,本申请提供了一种编译装置,包括上述第二方面提供的编译器,并且编译装置作为第二电子设备,用于执行上述第一方面及上述第一方面的各种可能的实现提供的代码生成方法。
第四方面,本申请提供了一种电子设备,包括:一个或多个处理器;一个或多个存储器;一个或多个存储器存储有一个或多个程序,当一个或者多个程序被一个或多个处理器执行时,使得设备执行上述第一方面以及上述第一方面的各种可能的实现提供的代码生成方法。
第五方面,本申请提供了一种计算机机可读介质,该计算机可读介质上存储有指令,指令在计算机上执行时,使计算机执行上述第一方面以及上述第一方面的各种可能的实现提供的代码生成方法。
附图说明
图1所示为一种代码生成方法的应用场景示意图。
图2所示为本申请实施例提供的一种代码生成方法的实现场景示意图。
图3所示为本申请实施例提供的一种代码生成方法的实施流程示意图。
图4所示为本申请实施例提供的一种github界面示意图。
图5所示为本申请实施例提供的一种服务器的硬件结构示意图。
具体实施方式
为了便于理解本申请方案,下面先对本申请实施例涉及的部分技术领域的概念进行解释。
(1)库,本领域通常指仓库,其本质是用于进行数据存储的空间或者说位置。仓库可以包含某一个或多个开发项目对应的所有文件,并可以存储其中每个文件的修订记录等。
(2)代码库,用于存储项目源代码的存储空间,也称代码仓库。
图1示出了一种代码生成方法的应用场景示意图。
如图1所示,该场景包括开发终端100、服务器200以及代码托管平台300。其中,代码托管平台300例如可以是github等平台,用于管理被托管的项目源代码,以便于托管方能够跟踪、记录以及控制对相应代码的修改过程。可以理解,托管方可以在github上修改代码托管方式,例如更改存储被托管源代码的代码仓库的命名约定、更改代码仓库的git URL(uniform resource locator,统一资源定位符)等。但是,托管方不能更改其他用户的存储库的代码托管方式,除非他们被授权进行更改。
继续参考图1所示,开发人员在开发终端100上操作开发项目代码的过程中,可以向代码托管平台300请求获取被托管代码,该代码例如可以是已开发的一些项目源代码。进而,开发人员可以操作将代码托管平台300返回的源代码加载到开发工具中进行编译,以实现对新项目的代码开发过程。目前,代码托管平台300进行提供被托管的源代码,而无法提供代码模板。
而另一些能够提供代码模板的私有平台,例如提供微信TM小程序模板的平台,其提供的代码模板可以存储至服务器200端。开发人员若想获取这类代码模板,需访问该私有平台的服务器200,并且通常需要付费购买,使用成本较大。另外,服务器200提供这些代码模板时无法支持个性化定制,开发人员只能选择将需要的代码模板下载到开发终端运行的本地开发环境中,才能在运行该代码模板提供的源代码期间进行相关内容的修改。因此,基于这些代码模板生成代码的开发效率仍然很低。
为了解决上述问题,本申请提供了一种代码生成方法,应用于具有编译功能或能够运行开发环境的电子设备。
具体地,该方法根据已开发的项目代码预先开发一些与待开发项目相关的代码模板,并对该代码模板设计对应的配置文件,以配置上述代码模板生成的可执行代码运行所需的配置数据及需要处理的模板文件。该配置数据例如可以配置相应的租户信息、相应租户的数据获取路径等。基于此,上述配置文件例如可以用于向生成的可执行代码配置租户数据,该可执行代码运行时则可以根据租户获取对应的配置数据。如此,则不需要开发人员花费精力为对应生成的可执行代码配置运行所需的数据,可以实现针对不同租户数据的可执行代码的个性化定制,有利于提高开发效率。
之后,上述生成的模板文件可以被推送至代码托管平台并配置为模板库。需要使用上述代码模板进行开发的项目开发人员便可以选择该模板一键生成项目的可执行代码库,后续项目可以根据自身需求进行二次开发。该二次开发过程,例如可以是按照预先分析出的对应于待开发项目的业务逻辑,基于已加载的可执行代码编辑代码执行逻辑等,以完成相应项目代码的开发过程。
可以理解,本申请提供的代码生成方法,所适用的电子设备可以包括开发人员使用的终端电子设备(下称开发终端)、服务器或服务器集群、云平台等。其中的服务器例如可以是编译服务器等,在此不做限制。该开发终端可以包括但不限于平板电脑、桌面型、膝上型、手持计算机、上网本、手机,以及增强现实(augmented reality,AR)/虚拟现实(virtualreality,VR)设备、智能电视、智能手表等可穿戴设备、车机设备、其中嵌入或耦接有一个或多个处理器的大屏设备、或能够访问网络的其他设备。
图2根据本申请实施例示出了一种代码生成方法的实现场景示意图。
如图2所示,该场景中,开发终端100上例如可以运行能够与代码托管平台300交互的客户端工具,例如git客户端工具等。开发人员基于开已开发项目的源代码,可以预先封装(encapsulation)一些应用程序编程接口api(application programming interface,应用程序编程接口)、对应于相应业务场景的api调用逻辑以及相关的上下文数据等,进一步开发出能够生成相应功能代码的代码模板。同时,开发人员还可以根据一些通用的开发需求,例如对相应租户数据的定制化需求等,在所开发的代码模板中预设用于动态解释该代码模板的配置文件。该配置文件可以被相应的引擎解析,以对相应的代码模板进行动态解释并生成开发人员所需的可执行代码。
开发人员可以将上述开发的代码模板上传至代码托管平台300进行托管。此时开发人员可以修改托管方式,例如指定将上述代码模板存储至代码托管平台300上预设的模板库300a中。该模板库300a可以是代码托管平台300为相应的代码模板提供的存储空间。其中,存储至该模板库300a中的代码模板能够被服务器200获取用于生成代码。上述用于解析相应配置文件的引擎服务也可以设置在服务器200上。
基于此,当一些用户需要调用上述存储至模板库300a中的代码模板生成相应的可执行代码时,则可以先通过服务器200上预设的引擎服务对从模板库300a中的相应代码模板进行动态解释。服务器200可以从代码托管平台300获取配置文件进行处理,完成上述对相应代码模板的动态解释过程,生成对应的可执行代码。服务器200还可以将生成的可执行代码推送至代码托管平台300上继续托管,例如存入预设的代码库300b中。开发终端100便可以直接从代码托管平台300获取所需的可执行代码进行二次开发。
可以理解,该代码库300b可以是用于存储上述对代码模板进行动态解释生成的定制化的可执行代码,该可执行代码能够满足开发人员的个性化开发需求。因此,该代码库300b也可以称为个性化代码库或定制化代码库。
可以理解,上述用户可以是需要使用上述代码模板生成所需的可执行文件的任何开发人员。在一些实施例中,上述用户可以是或不是开发上述代码模板的人员,在此不做限制。
基于上述图2所示的本申请实施例的实现场景,下面结合其他附图详细描述本申请方案的具体实现过程。
图3根据本申请实施例示出了一种代码生成方法的实施流程示意图。
如图3所示,该实施流程涉及开发终端100、服务器200与代码托管平台300之间的交互。具体地,该流程包括以下步骤:
301:开发终端100对已开发的项目代码进行封装,开发能够生成相应功能代码的代码模板。
示例性地,开发人员通过开发终端100可以根据项目开发和集成需求封装一些通用功能逻辑或者与业务相关的代码逻辑,比如一些与相应业务集成相关的api调用逻辑以及上下文数据等。其中,封装的api可以是一个或多个,每个api可以实现对应的接口功能。上述代码模板配置文件,将在下文详细描述,在此不做赘述。
可以理解,在本申请实施例中,github等代码托管平台可以提供根据模板库创建相应的代码库的功能,例如服务器200可以通过解析模板库的地址并通过调用github api快速在github上为开发人员生成所需的可执行代码。
上述封装的api调用逻辑可以是与上述已开发项目代码所应用的业务集成相关,从而使得上述开发的代码模板在之后应用于生成可执行代码时,能够满足相应业务场景的功能需求。
另外,上述封装的上下文数据,例如可以是比如获取用户信息、token信息等,以用于对请求获取相应代码模板的用户(例如开发人员)进行身份校验。
302:开发终端100根据开发需求,在代码模板中预设用于动态解释该代码模板的配置文件。
示例性地,该配置文件可以用于配置相应代码模板生成的可执行代码运行所需的配置数据。在一些实施例中,该配置数据可以是对应于不同租户配置的待处理的文件、数据、以及处理相应文件或数据所依据的配置信息等。如此,该配置文件所服务的相应代码模板则可以生成不同租户信息的源代码。基于上述配置文件,服务器200上的引擎服务也可以在生成相应源代码的过程中,确定所配置的哪些文件需要处理以及需要基于哪些配置进行处理等。在此不做限制也不做赘述。
在一些实施例中,上述配置文件可以是“.json”格式的文件,例如“configCenter.json”、“design.json”等。这类文件可以跟踪文件数据变化进行相应的处理。具体可以参考下述步骤中相关描述,在此不做赘述。
作为示例,以“design.json”为例,该配置文件的结构例如可以包括但不限于以下部分:
需要处理的文件,例如“template_files”;
需要处理的文件名(name),例如“design”,“pom.xml”;
需要处理的文件相对根目录的地址(base_path);
需要替换的key,例如采用“replace_keys”:“tenantCode,serviceName”;
可以理解,配置文件的调用路径可以预设在代码模板的执行代码中,并且该配置文件在解析后能够提供业务集成相关的接口,例如上述封装的接口,给引擎服务。解析配置文件的逻辑已预先设计在服务器200上预设的引擎服务中,因此,可以根据name和base_path来定位配置文件及获取该文件的地址。
在另一些实施例中,上述配置文件也可以是其他格式/类型的文件,例如“.java”、“.properties”等,在此不做限制。
303:开发终端100向代码托管平台300推送包含相应配置文件的代码模板进行托管。
示例性地,例如完成开发的模板代码template-service,可以由开发终端100推送至github平台中进行托管,此时开发人员可以修改托管的存储目录,例如指定存储至模板库300a中。
作为示例,对代码模板“template-service”进行托管的数据包中可以包括对该模板定义目录存储结构。该目录存储结构例如可以包括:
模板文件夹名称,例如“template-service”;
maven依赖管理文件,例如“pom.xml”;
配置数据,例如“configCenter.json”;
配置文件,例如“design.json”,该配置文件可以控制需要处理的文件及内容。例如,根据“design.json”等配置文件的内容可以对相应代码模板中与租户信息相关的数据修改为相应租户的配置数据等,从而生成能够根据正确的租户数据正常执行的可执行代码。
模块服务,例如“xxx-service-app”。对应该模块服务的服务启动配置文件,例如“bootstrap.properties”;以及服务源代码文件夹,例如“src”。
测试用文件,例如“docs/postman/env/xxxx_xxxx.postman_environment.json”。
实际代码,例如#java源代码“src/main/java”、“src/test/java”等。
304:代码托管平台300基于接收到的代码模板托管请求,创建用于存储代码模板的相应模板库。
示例性地,代码托管平台300可以响应于开发终端100托管代码模板的需求,创建用于存储代码模板的模板库,例如上述图2所示的模板库300a。可以理解,代码托管平台300所创建的模板库300a可以用于存储开发终端100上传的代码模板,并且该模板库300a可以被相应的服务器200访问,以对其中存储的代码模板进行动态解释。该服务器200例如可以是开发终端100所属的托管方使用的服务器等,具有对上述模板库300a的访问权限。
可以理解,代码托管平台300上创建模板库300a的方式,例如可以通过修改仓储库配置,将已有的用于托管代码的代码库设置为模板库。如此,可便于代码托管平台对基于不同功能或服务对应的源代码创建的代码模板进行分类存储和管理。具体可以参考下述步骤309中相关描述,在此不做赘述。
305:开发终端100向服务器200发送对所需功能的可执行代码的生成请求。
示例性地,开发终端100可以响应于用户开发项目代码的操作需求,请求服务器200生成所需功能的可执行代码。
可以理解,本步骤中请求生成可执行代码的开发终端100与上述步骤301至303中创建代码模板以及将代码模板存储至代码托管平台的开发终端100可以是相同设备也可以是不同设备。在此不做限制。
306:服务器200从代码托管平台300获取相应的代码模板。
示例性地,服务器200响应于接收到的生成请求,可以基于预先集成的api从代码托管平台300的模板库300a获取相应的代码模板,以生成满足上述生成请求的可执行代码。
307:服务器200利用预设的引擎服务解析所获取代码模板中的配置文件的内容。
示例性地,服务器200所获取的代码模板包含对应预设的配置文件,该配置文件可以被服务器200上预设的引擎服务解析其中的内容。
可以理解,代码模板经服务器200上的引擎服务解析并用于修改代码模板中预设的可修改内容后,所生成的可执行代码结构中则可以不再包含该配置文件的相关内容,例如上述步骤303中示例的代码模板“template-service”中的配置文件“design.json”。相应的,根目录中的配置文件“configCenter.json”的内容会发生相应变化。
变化后的configCenter.json文件中相应内容可以被替换配置文件“design.json”中配置的租户信息、租户数据获取路径等与用户相关的内容。例如,“env”被配置为“xxx_env”,“profile”被配置为“aaa”,“application”被配置为“project-service”,以及“pathString”被配置为“/aaa/xxx_env/project-service/”等。
308:服务器200根据解析出的配置文件的内容,处理所获取的代码模板中对应的内容,以生成用户所需的可执行代码。
示例性地,服务器200运行预设的引擎服务,可以根据从配置文件中解析出的内容,动态解释对应的代码模板,处理其中需要被修改或指定租户信息的部分,进而生成符合实际的数据处理需求的可执行代码,用于后续的项目代码开发。如此,上述根据配置文件内容动态解释代码模板生成的可执行代码,能够在生成的过程中自动修改对应于租户信息等的个性化部分,该可执行代码在实际运行中则可以基于上述修改获取对应租户信息下的所需数据。从而,避免了开发人员自行根据项目开发需求设置对应的数据获取路径、租户权限等等,有利于提高开发效率。
可以理解,上述生成的可执行代码可以以代码文件的形式存在,服务器200可以继续执行下述步骤309将相应的代码文件推送至代码托管平台300进行托管。代码托管平台300也可以将存入代码库的代码文件打包发送给需要的开发终端100。而开发终端100上基于加载的代码文件二次开发生成的项目代码,也可以在开发人员的操作下进行打包发布。本申请对此不做赘述。
309:服务器200将生成的可执行代码推送至代码托管平台300。
示例性地,服务器200可以将生成的可执行代码推送回代码托管平台300,代码托管平台300可以将该部分可执行代码存储至预设的代码库300b中。在另一些实施例中,服务器200也可以在将上述可执行代码推送至代码托管平台300时,指定将该部分可执行代码存储至代码库300b中。在此不做限制。
其中,上述服务器200将生成的可执行代码推送至代码托管平台300的过程,可以基于设置自动实现。例如,在代码托管平台300上创建模板库300a和代码库300b时,可以通过修改仓储库配置,将已有的用于托管代码的代码库设置为模板库。进而,可以集成github的api自动生成与上述模板库对应的代码库,用于存储根据代码模板生成的可执行代码。如此,代码模板的存储空间与基于代码模板生成的可执行代码的存储空间之间能够建立关联关系,便于服务器200准确的从模板库300a中获取相应代码模板、并能够自动实现将对应生成的可执行代码准确的存储至相应存储空间内。
参考图4所示的github界面示意图,以模板服务“template-service”为例,开发人员可以在github界面410上勾选创建模板仓库(template-respository)选项411,并可以在重命名框412内修改原本的template-service名称,对所创建的模板库进行重命名,例如命名为“xxx-service”。如此,便可以在github上将已开发项目代码托管的代码库设置为相应模板的模板库300a。基于此,再集成github上对应于该模板库的api便可以生成用于存储该模板库中模板对应生成的可执行代码的代码库300b。
其中,通过上述模板库300a生成的代码库300b,例如可以是对应于待开发项目的专属代码库。作为示例,基于上述图4所创建的“xxx-service”模板库对应创建的代码库的目录存储结构不包括上述配置文件“design.json”,只包括在模块服务“xxx-service-app”下新创建的服务启动配置文件“bootstrap.properties”、服务源代码文件夹“src”等、以及在“docs”下创建测试用文件“docs/postman/env/xxxx_xxxx.postman_environment.json”等。其中,所创建的服务源代码文件夹“src”可以存储对应生成的可执行代码,例如#java源代码“src/main/java”、“src/test/java”。
可以理解,上述基于模板库创建的代码库的目录存储结构,除了不包括配置文件design.json,其他内容均与上述步骤303中对代码模板预先定义的目录存储结构相匹配。因此,在本申请实施例中,上述创建模板库的代码可以与创建相应代码库的代码相同,上述对模板库预先定义的目录存储结构可以与对应创建的代码库的目录存储结构相同。
如此,服务器200执行上述步骤306至308,通过引擎服务解析配置文件以动态解释相应的代码模板,并最终生成完成相应个性化信息配置的可执行代码之后,便可以直接将所生成的可执行代码推送至相应的代码库中存储。鉴于上述模板库与对应的代码库的目录存储结构相同,服务器200获取代码模板以及推送所生成的可执行代码便可以无障碍,无需重新配置与模板库或代码库对应的访问路径或权限等信息。在另一些实施例中,上述服务器200执行步骤309将生成的可执行代码推送至代码托管平台300的过程,也可以描述为将生成的可执行代码继续托管代码托管平台300的过程,在此不做限制。
可以理解,将生成的可执行代码推送至代码托管平台300,可以提供给跨地域、跨平台的不同开发人员使用。如此,基于本申请提供的代码生成方法生成的可执行代码则能够得到更加广泛的应用,为各地域、各平台的开发人员提供便利,有利于提高开发效率。
在另一些实施例中,上述生成的可执行代码也可以存储至私有平台的云空间内,在此不做限制。此时,该私有平台也可以通过租户管理的方式,向有相应功能需要的开发人员提供上述生成的可执行代码。
310:代码托管平台300广播代码库中已存入生成的可执行代码。
示例性地,代码托管平台300在接收到服务器200推送的基于代码模板生成的可执行代码后,可以根据托管指示将接收到的可执行代码存入对应的代码库300b中,并发送广播消息通知开发终端100。例如,代码托管平台300可以向开发终端100发送代码库300b中已更新可执行代码的广播消息等,具体通知形式本申请不做限制。
在另一些实施例中,服务器200将生成的可执行代码推送至代码托管平台300继续托管后,也可以通知开发终端100该过程已完成,以触发开发终端100执行下述步骤311获取所需的可执行代码。
311:开发终端100从代码托管平台300获取可执行代码至本地开发环境。
示例性地,开发终端100可以向代码托管平台300请求代码库300b中存储的、能够实现相应功能的可执行代码,并将代码托管平台300返回的可执行代码加载至本地开发环境运行,以继续用于进行项目代码的开发。
可以理解,上述基于代码模板生成的可执行代码主要用于所开发项目的框架和通用功能入口。开发人员在开发项目时,可以根据上述生成的可执行代码进行二次开发来完成自己的业务逻辑实现、或者是其他需求的实现。即基于本申请实施例提供的代码生成方法生成的可执行代码,可以作为开发人员开发目标项目的源代码。例如,当客户针对保险出单流程有新需求,保险业务服务平台的开发人员则需要针对该业务需求进行业务逻辑分析并进行开发实现。
可以理解,上述用于生成可执行代码的代码模板中,可以封装创建该代码模板的源代码与相应业务平台集成的细节。例如,开发人员可以根据相应业务平台上的业务功能需要,使用相应获取的代码模板中集成的一些数据接口,例如相应租户数据的访问接口等。如此,开发人员在将基于相应代码模板生成的可执行代码加载至自己的开发环境时,则可以直接获取到所需的租户数据支持可执行代码的执行。
图5根据本申请实施例示出了一种服务器500的硬件结构示意图。
可以理解,该服务器500可以是支持上述服务端运行的服务器,可以包括应用程序服务器、数据库服务器、内容管理服务器等等,在此不做限制。
如图5所示,在一些实施例中,服务器500可以包括一个或多个处理器504,与处理器504中的至少一个连接的系统控制逻辑508,与系统控制逻辑508连接的系统内存512,与系统控制逻辑508连接的NVM(non volatile memory,非易失性存储器)516,以及与系统控制逻辑508连接的网络接口520。
在一些实施例中,处理器504可以包括一个或多个单核或多核处理器。在一些实施例中,处理器504可以包括通用处理器和专用处理器(例如,图形处理器,应用处理器,基带处理器等)的任意组合。在服务器500采用eNB(evolved node b,增强型基站)或RAN(radioaccess network,无线接入网)控制器的实施例中,处理器504可以被配置为执行各种符合的实施例,例如,如图2至图4所示的实施例。
在一些实施例中,系统控制逻辑508可以包括任意合适的接口控制器,以向处理器504中的至少一个和/或与系统控制逻辑508通信的任意合适的设备或组件提供任意合适的接口。
在一些实施例中,系统控制逻辑508可以包括一个或多个存储器控制器,以提供连接到系统内存512的接口。系统内存512可以用于加载以及存储数据和/或指令。在一些实施例中服务器500的内存512可以包括任意合适的易失性存储器,例如合适的DRAM(dynamicrandom access memory,动态随机存取存储器)。
NVM 516可以包括用于存储数据和/或指令的一个或多个有形的、非暂时性的计算机可读介质。在一些实施例中,NVM 516可以包括闪存等任意合适的非易失性存储器和/或任意合适的非易失性存储设备,例如HDD(hard disk drive,硬盘驱动器),CD(compactdisc,光盘)驱动器,DVD(digital versatile disc,数字通用光盘)驱动器中的至少一个。
NVM 516可以包括安装服务器500的装置上的一部分存储资源,或者它可以由设备访问,但不一定是设备的一部分。例如,可以经由网络接口520通过网络访问NVM 516。
特别地,系统内存512和NVM 516可以分别包括:指令524的暂时副本和永久副本。指令524可以包括:由处理器504中的至少一个执行时导致服务器500实施如图3所示的方法的指令。在一些实施例中,指令524、硬件、固件和/或其软件组件可另外地/替代地置于系统控制逻辑508,网络接口520和/或处理器504中。
网络接口520可以包括收发器,用于为服务器500提供无线电接口,进而通过一个或多个网络与任意其他合适的设备(如前端模块,天线等)进行通信。在一些实施例中,网络接口520可以集成于服务器500的其他组件。例如,网络接口520可以集成于处理器504的,系统内存512,NVM 516,和具有指令的固件设备(未示出)中的至少一种,当处理器504中的至少一个执行所述指令时,服务器500实现上述图4所示的方法。
网络接口520可以进一步包括任意合适的硬件和/或固件,以提供多输入多输出无线电接口。例如,网络接口520可以是网络适配器,无线网络适配器,电话调制解调器和/或无线调制解调器。
在一个实施例中,处理器504中的至少一个可以与用于系统控制逻辑508的一个或多个控制器的逻辑封装在一起,以形成系统封装(SiP)。在一个实施例中,处理器504中的至少一个可以与用于系统控制逻辑508的一个或多个控制器的逻辑集成在同一管芯上,以形成SoC(system on chip,片上系统)。
服务器500可以进一步包括:输入/输出(I/O)设备532。I/O设备532可以包括用户界面,使得用户能够与服务器500进行交互;外围组件接口的设计使得外围组件也能够与服务器500交互。在一些实施例中,服务器500还包括传感器,用于确定与服务器500相关的环境条件和位置信息的至少一种。
在一些实施例中,用户界面可包括但不限于显示器(例如,液晶显示器,触摸屏显示器等),扬声器,麦克风,一个或多个相机(例如,静止图像照相机和/或摄像机),手电筒(例如,发光二极管闪光灯)和键盘。
在一些实施例中,外围组件接口可以包括但不限于非易失性存储器端口、音频插孔和电源接口。
在一些实施例中,传感器可包括但不限于陀螺仪传感器,加速度计,近程传感器,环境光线传感器和定位单元。定位单元还可以是网络接口520的一部分或与网络接口520交互,以与定位网络的组件(例如,全球定位系统卫星)进行通信。
在说明书对“一个实施例”或“实施例”的引用意指结合实施例所描述的具体特征、结构或特性被包括在根据本申请实施例公开的至少一个范例实施方案或技术中。说明书中的各个地方的短语“在一个实施例中”的出现不一定全部指代同一个实施例。
本申请实施例的公开还涉及用于执行文本中的操作装置。该装置可以专门处于所要求的目的而构造或者其可以包括被存储在计算机中的计算机程序选择性地激活或者重新配置的通用计算机。这样的计算机程序可以被存储在计算机可读介质中,诸如,但不限于任何类型的盘,包括软盘、光盘、CD-ROM、磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPROM、磁或光卡、专用集成电路(ASIC)或者适于存储电子指令的任何类型的介质,并且每个可以被耦合到计算机系统总线。此外,说明书中所提到的计算机可以包括单个处理器或者可以是采用针对增加的计算能力的多个处理器涉及的架构。
另外,在本说明书所使用的语言已经主要被选择用于可读性和指导性的目的并且可能未被选择为描绘或限制所公开的主题。因此,本申请实施例公开旨在说明而非限制本文所讨论的概念的范围。
Claims (13)
1.一种代码生成方法,其特征在于,包括:
第一电子设备在第一源代码中封装至少一个接口、并预设第一配置文件,创建第一代码模板,其中所述至少一个接口为业务集成相关的接口,所述第一源代码为能够实现第一类功能或服务的可执行代码,所述第一配置文件包括为所述第一源代码配置的与目标用户相关的配置数据;
第一电子设备将所述第一代码模板存储至所述代码托管平台;
第二电子设备响应于接收到的开发需求,从所述代码托管平台获取与所述开发需求相关的所述第一代码模板,其中所述开发需求包括在待开发的目标项目中集成所述第一类功能或服务的需求;
第二电子设备解析所述第一代码模板中封装的所述第一配置文件,得到与目标用户相关的第一配置数据,其中所述第一配置数据用于修改所述第一代码模板中预先配置的可修改内容;
第二电子设备利用所述第一配置数据修改所述第一代码模板中的相应内容,生成满足所述开发需求的目标代码,并将所述目标代码存储至所述代码托管平台,其中所述目标代码用于实现所述第一类功能或服务来处理与目标用户相关的数据。
2.根据权利要求1所述的方法,其特征在于,所述第一电子设备将所述第一代码模板存储至所述代码托管平台,包括:
第一电子设备将创建的所述第一代码模板发送给所述代码托管平台,并指示所述代码托管平台将所述第一代码模板存入对应创建的模板库,其中,所述模板库为基于所述第一源代码对应托管的第一代码库创建的用于存储相应代码模板的存储空间。
3.根据权利要求1所述的方法,其特征在于,所述第一电子设备在已开发的第一源代码中封装至少一个接口、并预设第一配置文件,创建第一代码模板,包括:
第一电子设备将与业务集成相关的一个或多个接口之间的调用逻辑和上下文数据,封装至所述第一源代码中,生成第二代码模板;
第一电子设备在所述第二代码模板中预设所述第一配置文件、并将所述第一配置文件对应的调用路径预设在所述第二代码模板中,创建所述第一代码模板。
4.根据权利要求1所述的方法,其特征在于,所述第二电子设备包括预设的用于解析所述第一配置文件的引擎服务,并且,所述第二电子设备解析所述第一代码模板中封装的所述第一配置文件,得到与目标用户相关的第一配置数据,包括:
第二电子设备运行所述引擎服务对所述第一配置文件进行解析,得到所述第一配置数据。
5.根据权利要求1所述的方法,其特征在于,所述开发需求对应于第三电子设备请求生成所述目标代码以用于编译所述目标项目的项目代码的需求,并且,
所述方法包括:
确定所述目标代码已存入所述代码托管平台的第二代码库,所述第二电子设备或所述代码托管平台向所述第三电子设备发送通知消息,其中,
所述通知消息用于通知所述第三电子设备所述目标代码已存入所述第二代码库,其中所述第二代码库为基于所述模板库对应创建的用于存放所述目标代码的存储空间;
第三电子设备基于接收到的所述通知消息,向所述代码托管平台请求获取所述目标代码。
6.根据权利要求5所述的方法,其特征在于,所述通知消息为所述代码托管平台发送的广播消息,或者,
所述通知消息为所述第二电子设备基于与所述第三电子设备之间的通信连接发送的通信消息。
7.根据权利要求5所述的方法,其特征在于,所述目标代码以可执行代码文件的形式存入所述第二代码库,并且,所述将所述目标代码存储至所述代码托管平台,包括:
第二电子设备将所述目标代码对应的可执行代码文件打包并发送给所述代码托管平台,并指示所述代码托管平台将所述可执行代码文件存入所述第二代码库中。
8.根据权利要求1至7中任一项所述的方法,其特征在于,所述第一配置文件的格式包括json格式、java格式以及properties格式中的任一项。
9.根据权利要求1至7中任一项所述的方法,其特征在于,所述第一配置数据包括租户信息、租户数据获取路径、以及所述目标代码执行所需运行数据的获取路径中的至少一项。
10.一种编译器,其特征在于,设置在第二电子设备中,并且所述第二电子设备通过所述编译器执行权利要求1至9中任一项所述的代码生成方法。
11.一种编译装置,其特征在于,包括权利要求10所述的编译器,并且所述编译装置作为第二电子设备,用于执行权利要求1至9中任一项所述的代码生成方法。
12.一种电子设备,其特征在于,包括:
一个或多个处理器;
一个或多个存储器;其中,所述一个或多个存储器存储有一个或多个程序,当所述一个或者多个程序被所述一个或多个处理器执行时,使得所述电子设备执行权利要求1至9中任一项所述的代码生成方法。
13.一种计算机可读介质,其特征在于,所述计算机可读介质上存储有指令,所述指令在计算机上执行时,使所述计算机执行权利要求1至9中任一项所述的代码生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310655600.0A CN116820546A (zh) | 2023-06-05 | 2023-06-05 | 代码生成方法、编译器、装置、设备及计算机可读介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310655600.0A CN116820546A (zh) | 2023-06-05 | 2023-06-05 | 代码生成方法、编译器、装置、设备及计算机可读介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116820546A true CN116820546A (zh) | 2023-09-29 |
Family
ID=88113707
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310655600.0A Pending CN116820546A (zh) | 2023-06-05 | 2023-06-05 | 代码生成方法、编译器、装置、设备及计算机可读介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116820546A (zh) |
-
2023
- 2023-06-05 CN CN202310655600.0A patent/CN116820546A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106796508B (zh) | 在云平台上的快速部署 | |
US9778924B2 (en) | Platform for enabling creation and use of an API for a specific solution | |
US20180219972A1 (en) | Joint servicing of software packages | |
CN110502222B (zh) | 外发依赖内部基础库的aar方法、装置、介质和设备 | |
US20150128106A1 (en) | Software Builder | |
US10996997B2 (en) | API-based service command invocation | |
US20170192773A1 (en) | Mobile applications | |
US10216510B2 (en) | Silent upgrade of software with dependencies | |
US11474842B2 (en) | Integration application creator design | |
US20200084210A1 (en) | Updating database drivers for client applications through a database server push | |
CN109525584B (zh) | 一种构建移动端跨平台多类型应用容器的方法 | |
CN111897623B (zh) | 一种集群管理方法、装置、设备及存储介质 | |
CN111399840A (zh) | 一种模块开发方法及装置 | |
CN111079125A (zh) | 一种应用程序调用第三方库动态提升权限的方法及装置 | |
CN111142884A (zh) | 小程序的版本部署方法、装置、电子设备及存储介质 | |
US10514940B2 (en) | Virtual application package reconstruction | |
US11656864B2 (en) | Automatic application of software updates to container images based on dependencies | |
CN109343970B (zh) | 基于应用程序的操作方法、装置、电子设备及计算机介质 | |
CN109857374B (zh) | 移动应用的开发方法及装置 | |
EP2810179B1 (en) | Method and system for implementing a common data interface to web services | |
WO2020135129A1 (zh) | 加载应用的插件的方法、装置和终端 | |
CN111443903A (zh) | 软件开发文件获取方法及装置、电子设备、存储介质 | |
CN116820546A (zh) | 代码生成方法、编译器、装置、设备及计算机可读介质 | |
US20230142148A1 (en) | Automated Deployment of Enterprise Archive with Dependency on Application Server Via Script | |
CN115248680A (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 |