CN113342323B - 软件在线开发的方法及装置 - Google Patents
软件在线开发的方法及装置 Download PDFInfo
- Publication number
- CN113342323B CN113342323B CN202110728573.6A CN202110728573A CN113342323B CN 113342323 B CN113342323 B CN 113342323B CN 202110728573 A CN202110728573 A CN 202110728573A CN 113342323 B CN113342323 B CN 113342323B
- Authority
- CN
- China
- Prior art keywords
- java
- target service
- code
- codes
- demands
- 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 47
- 238000011161 development Methods 0.000 title claims abstract description 40
- 238000004590 computer program Methods 0.000 claims description 17
- 238000010586 diagram Methods 0.000 description 20
- 230000008569 process Effects 0.000 description 12
- 230000006870 function Effects 0.000 description 6
- 238000012545 processing Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 238000004519 manufacturing process Methods 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
- 230000000750 progressive effect Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
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
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- 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/37—Compiler construction; Parser generation
-
- 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)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种软件在线开发的方法及装置,该方法包括:在调用软件主程序时,接收用户的目标业务需求;根据用户的目标业务需求,从代码库中查询目标业务需求对应的JAVA代码,其中,代码库中存储有多种业务需求对应的JAVA代码;将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件,基于切面调用,执行目标业务需求对应的class文件的热加载命令,得到目标业务需求对应的class文件的调用结果,进而通过在线编译JAVA代码提高了软件开发的可拓展性,能够及时满足用户需求,基于热加载,可以在不影响主程序运行的前提下测试class文件的运行结果,提高了软件开发的效率。
Description
技术领域
本发明涉及软件开发技术领域,尤其涉及软件在线开发的方法及装置。
背景技术
本部分旨在为权利要求书中陈述的本发明实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
在企业内部的部署saas服务的过程中,在用户存在定制化需求时,只能在基础软件版本升级时添加用户的需求,在用户需要比较不同版本的功能或性能的时候,需要同时发布部署不同的版本的软件,可扩展性差,效率低。
针对上述问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供一种软件在线开发的方法,用以提高软件开发的可扩展性和效率,该方法包括:
在调用软件主程序时,接收用户的目标业务需求;
根据用户的目标业务需求,从代码库中查询目标业务需求对应的JAVA代码,其中,代码库中存储有多种业务需求对应的JAVA代码;
将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件;
基于切面调用,执行目标业务需求对应的class文件的热加载命令,得到目标业务需求对应的class文件的调用结果。
本发明实施例提供一种软件在线开发的装置,用以提高软件开发的可扩展性和效率,该装置包括:
目标业务需求接收模块,用于在调用软件主程序时,接收用户的目标业务需求;
JAVA代码查询模块,用于根据用户的目标业务需求,从代码库中查询目标业务需求对应的JAVA代码,其中,代码库中存储有多种业务需求对应的JAVA代码;
class文件编译模块,用于将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件;
热加载模块,用于基于切面调用,执行目标业务需求对应的class文件的热加载命令,得到目标业务需求对应的class文件的调用结果。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述软件在线开发的方法。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行软件在线开发的方法的计算机程序。
本发明实施例通过:在调用软件主程序时,接收用户的目标业务需求;根据用户的目标业务需求,从代码库中查询目标业务需求对应的JAVA代码,其中,代码库中存储有多种业务需求对应的JAVA代码;将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件,基于切面调用,执行目标业务需求对应的class文件的热加载命令,得到目标业务需求对应的class文件的调用结果,进而通过在线编译JAVA代码提高了软件开发的可拓展性,能够及时满足用户需求,基于热加载,可以在主程序中嵌入目标业务需求对应的class文件,在不影响主程序运行的前提下测试class文件的运行结果,无需开发多个版本的软件,提高了软件开发的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本发明实施中软件在线开发的方法流程的示意图;
图2为本发明实施例中建立代码库流程的示意图;
图3为图1中步骤103具体流程的示意图;
图4为本发明实施例中软件在线开发的方法整体框架的示意图;
图5为本发明实施例中虚拟机加载classLoader流程的示意图;
图6为本发明实施例中软件在线开发的装置结构的示意图;
图7为本发明实施例中软件在线开发的装置另一结构的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本领域技术人员知道,本发明的实施方式可以实现为一种***、装置、方法或计算机程序产品。因此,本发明公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
本发明实施例提供一种软件在线开发的方法,用以提高软件开发的可扩展性和效率,图1为本发明实施中软件在线开发的方法流程的示意图,如图1所示,该方法包括:
步骤101:在调用软件主程序时,接收用户的目标业务需求;
步骤102:根据用户的目标业务需求,从代码库中查询目标业务需求对应的JAVA代码,其中,代码库中存储有多种业务需求对应的JAVA代码;
步骤103:将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件;
步骤104:基于切面调用,执行目标业务需求对应的class文件的热加载命令,得到目标业务需求对应的class文件的调用结果。
如图1所示,本发明实施例通过:在调用软件主程序时,接收用户的目标业务需求;根据用户的目标业务需求,从代码库中查询目标业务需求对应的JAVA代码,其中,代码库中存储有多种业务需求对应的JAVA代码;将目标业务需求对应的JAVA 代码动态编译为目标业务需求对应的class文件,基于切面调用,执行目标业务需求对应的class文件的热加载命令,得到目标业务需求对应的class文件的调用结果,进而通过在线编译JAVA代码提高了软件开发的可拓展性,能够及时满足用户需求,基于热加载,可以在主程序中嵌入目标业务需求对应的class文件,在不影响主程序运行的前提下测试class文件的运行结果,无需开发多个版本的软件,提高了软件开发的效率。
图2为本发明实施例中建立代码库流程的示意图,如图2所示,在一个实施例中,在从代码库中查询目标业务需求对应的JAVA代码之前,还包括:
按照如下方式建立代码库;
在软件开发时,根据多种业务需求,开发多种业务需求对应的JAVA代码;
调用JAVA在线编译器,对多种业务需求对应的JAVA代码进行预编译;
将预编译成功的JAVA代码标记为待发布代码和/或待开发代码,将预编译失败的JAVA代码标记为待开发代码;
将待发布代码和待开发代码加密后存储至数据库。
具体实施时,为快速的实现企业的业务信息化工作,在开发saas服务时,可以预先对信息化过程中常用功能和定制化功能进行配置建立代码库,具体的,如图2 所示,在软件开发时,开发人员可以通过在线的代码编辑窗口,根据多种业务需求以及用户的特殊需求,开发多种业务需求对应的JAVA代码,然后调用JAVA在线编译器,对多种业务需求对应的JAVA代码进行预编译,预编译未通过的JAVA代码只能标记为待开发代码,加密后存储至数据库或继续编写,预编译通过的JAVA代码可以标记为待发布代码和/或待开发代码,加密后存储至数据库,JAVA代码可以存储为多种版本,将预编译通过的JAVA代码标记为待开发代码是为了便于后续继续用户需求二次开发,待发布代码可以替换当前版本的代码,也可以保存为新的版本的代码,待发布代码还可以被标记为指定运行版本,后续***运行默认运行该指定版本。
在一个实施例中,目标业务需求对应的JAVA代码包括多个版本;
目标业务需求对应的class文件中包含JAVA代码的版本号。
图3为图1中步骤103具体流程的示意图,如图将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件,包括:
步骤301:在目标业务需求对应的JAVA代码为待开发代码时,对目标业务需求对应的JAVA代码进行二次开发;
步骤302:在目标业务需求对应的JAVA代码为待发布代码时,将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件;
步骤303:调用JAVA在线编译器,对二次开发后的目标业务需求对应的JAVA 代码进行预编译;
步骤304:在预编译成功时,将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件。
具体实施时,图4为本发明实施例中软件在线开发的方法整体框架的示意图,如图4所示,步骤101中在调用软件主程序时,可以接收用户的目标业务需求,步骤102中,可以根据用户的目标业务需求,从代码库中查询目标业务需求对应的JAVA 代码,然后,步骤103中,首先对目标业务需求对应的JAVA代码进行解密,然后,可以将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件,具体的,在目标业务需求对应的JAVA代码为待开发代码时,可以通过切面编程调用待开发代码的开发接口,基于用户的定制化需求,在相应的规范的内采用标准的代码编写方式,对目标业务需求对应的JAVA代码进行二次开发,在目标业务需求对应的 JAVA代码为待发布代码时,可以将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件,接着,调用JAVA在线编译器,对二次开发后的目标业务需求对应的JAVA代码进行预编译,在预编译成功时,将目标业务需求对应的JAVA 代码动态编译为目标业务需求对应的class文件,进而通过在线编译JAVA代码,动态加载编译后的结果,实现在不重启服务器的情况下加载java类包,能够在线编译,在线查看,提高了软件开发的可拓展性,能够及时满足用户需求,通过切面编程可以在用户常用的定制性地方,提供更简单的切面,普通开发人员只需要关注业务的实现即可,***的底层开发不用关注。
需要说明的是,正常情况下,在java中类的加载是通过类包的路径来进行加载的,同样的类包进行加载的时候容易出现类包冲突的,因此,如图4所示,本发明实施例中目标业务需求对应的JAVA(A)代码包括多个版本,例如,JAVA(A1)、 JAVA(A2)、JAVA(A3)等,则目标业务需求对应的class文件中包含JAVA代码的版本号,例如:class(A1)、class(A2)、class(A3),本发明实施例通过对同一类包下的代码加入版本管理,编译的时候生成带版本编号的class文件,解决了 java类包冲突问题。
在一个实施例中,步骤104中,基于切面调用,执行目标业务需求对应的class 文件的热加载命令,得到目标业务需求对应的class文件的调用结果,包括:
基于切面调用,分别执行目标业务需求对应的各个版本的class文件的热加载命令,得到目标业务需求对应的各个版本的class文件的调用结果。
具体实施时,图5为本发明实施例中虚拟机加载classLoader流程的示意图,如图5所示,对于Java应用程序来说,热加载就是在运行时更新Java类文件,包括如下步骤:销毁已有的自定义ClassLoader;更新class类文件,创建新的ClassLoader 去加载更新后的class类文件。
步骤104中,主程序可以基于切面调用,分别执行目标业务需求对应的各个版本的class文件的热加载命令,得到目标业务需求对应的各个版本的class文件的调用结果,进而能够基于热加载,在同一个***中,部署不同版本的class文件,测试不同版本的class文件的运行效果,在***的运行过程中,可以随时嵌入调试级别的代码,在不影响***的运行过程中,观察运行结果,实时跟踪关键点的运行情况。
应当注意,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
基于同一发明构思,本发明实施例中还提供了一种软件在线开发的装置,如下面的实施例。由于软件在线开发的装置解决问题的原理与软件在线开发的方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
本发明实施例提供一种软件在线开发的装置,用以提高软件开发的可扩展性和效率,图6为本发明实施例中软件在线开发的装置结构的示意图,如图6所示,该装置包括:
目标业务需求接收模块01,用于在调用软件主程序时,接收用户的目标业务需求;
JAVA代码查询模块02,用于根据用户的目标业务需求,从代码库中查询目标业务需求对应的JAVA代码,其中,代码库中存储有多种业务需求对应的JAVA代码;
class文件编译模块03,用于将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件;
热加载模块04,用于基于切面调用,执行目标业务需求对应的class文件的热加载命令,得到目标业务需求对应的class文件的调用结果。
图7为本发明实施例中软件在线开发的装置另一结构的示意图,如图7所示,在一个实施例中,该装置还包括:代码库建立模块05,用于:
在从代码库中查询目标业务需求对应的JAVA代码之前,按照如下方式建立代码库;
在软件开发时,根据多种业务需求,开发多种业务需求对应的JAVA代码;
调用JAVA在线编译器,对多种业务需求对应的JAVA代码进行预编译;
将预编译成功的JAVA代码标记为待发布代码和/或待开发代码,将预编译失败的JAVA代码标记为待开发代码;
将待发布代码和待开发代码加密后存储至数据库。
在一个实施例中,class文件编译模块03,具体用于:
在目标业务需求对应的JAVA代码为待开发代码时,对目标业务需求对应的 JAVA代码进行二次开发;
在目标业务需求对应的JAVA代码为待发布代码时,将目标业务需求对应的 JAVA代码动态编译为目标业务需求对应的class文件;
调用JAVA在线编译器,对二次开发后的目标业务需求对应的JAVA代码进行预编译;
在预编译成功时,将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件。
在一个实施例中,目标业务需求对应的JAVA代码包括多个版本;目标业务需求对应的class文件中包含JAVA代码的版本号;
热加载模块04,具体用于:
基于切面调用,分别执行目标业务需求对应的各个版本的class文件的热加载命令,得到目标业务需求对应的各个版本的class文件的调用结果。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述软件在线开发的方法。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行软件在线开发的方法的计算机程序。
下面举一个具体的例子,以便于理解本发明如何实施。
在软件开发时,开发人员通过在线的代码编辑窗口,根据多种业务需求以及用户的特殊需求,开发多种业务需求对应的JAVA代码,调用JAVA在线编译器,对多种业务需求对应的JAVA代码进行预编译,将预编译未通过的JAVA代码标记为待开发代码,将预编译通过的JAVA代码标记为待发布代码和/或待开发代码,将待发布代码和待开发代码加密后存储至数据库,建立代码库,然后,如图3所示,执行如下步骤:
第一步:在调用软件主程序时,接收用户的目标业务需求;
第二步:根据用户的目标业务需求,从代码库中查询目标业务需求对应的JAVA 代码,目标业务需求对应的JAVA(A)代码包括多个版本,JAVA(A1)、JAVA (A2)和JAVA(A3);
第三步:对目标业务需求对应的JAVA代码进行解密,在目标业务需求对应的 JAVA代码为待开发代码时,通过切面编程调用待开发代码的开发接口,基于用户的定制化需求,在相应的规范的内采用标准的代码编写方式,对目标业务需求对应的 JAVA代码进行二次开发,调用JAVA在线编译器,对二次开发后的目标业务需求对应的JAVA代码进行预编译,在预编译成功时,将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件,目标业务需求对应的class文件中包含JAVA 代码的版本号,class(A1)、class(A2)和class(A3);
第四步:在目标业务需求对应的JAVA代码为待发布代码时,将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件;
第五步:主程序基于切面调用,分别执行目标业务需求对应的各个版本的class文件的热加载命令,得到目标业务需求对应的各个版本的class文件的调用结果,结果1、结果2和结果3。
综上所述,本发明实施例通过:在调用软件主程序时,接收用户的目标业务需求;根据用户的目标业务需求,从代码库中查询目标业务需求对应的JAVA代码,其中,代码库中存储有多种业务需求对应的JAVA代码;将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件,基于切面调用,执行目标业务需求对应的class文件的热加载命令,得到目标业务需求对应的class文件的调用结果,进而通过在线编译JAVA代码提高了软件开发的可拓展性,能够及时满足用户需求,基于热加载,可以在主程序中嵌入目标业务需求对应的class文件,在不影响主程序运行的前提下测试class文件的运行结果,无需开发多个版本的软件,提高了软件开发的效率。
此外,本发明实施例通过在线编译JAVA代码,动态加载编译后的结果,实现在不重启服务器的情况下加载java类包,能够对JAVA代码加密存储、在线编译、在线查看、在线修复问题和动态运行,不会有代码反编译的风险,提高了软件开发的可拓展性,能够在已有的saas服务平台的基础上快速的满足用户更细致的需求。通过切面编程可以在用户常用的定制性地方,提供更简单的切面,普通开发人员只需要关注业务的实现即可,***的底层开发不用关注。
本发明实施例能够基于热加载,在同一个***中,部署不同版本的class文件,测试不同版本的class文件的运行效果,在***的运行过程中,可以随时嵌入调试级别的代码,在不影响***的运行过程中,观察运行结果,实时跟踪关键点的运行情况。
虽然本发明提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
本领域技术人员应明白,本说明书的实施例可提供为方法、装置(***)或计算机程序产品。因此,本说明书实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、装置(***)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/ 或方框图一个方框或多个方框中指定的功能的步骤。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于***实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。术语“上”、“下”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。本发明并不局限于任何单一的方面,也不局限于任何单一的实施例,也不局限于这些方面和/或实施例的任意组合和/或置换。而且,可以单独使用本发明的每个方面和/或实施例或者与一个或更多其他方面和/或其实施例结合使用。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围。
Claims (6)
1.一种软件在线开发的方法,其特征在于,包括:
在调用软件主程序时,接收用户的目标业务需求;
根据用户的目标业务需求,从代码库中查询目标业务需求对应的JAVA代码,其中,代码库中存储有多种业务需求对应的JAVA代码;
将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件;
基于切面调用,执行目标业务需求对应的class文件的热加载命令,得到目标业务需求对应的class文件的调用结果;其中,对于JAVA应用程序,热加载是在运行时更新JAVA类文件,包括:销毁已有的自定义ClassLoader;更新class类文件,创建新的ClassLoader去加载更新后的class类文件;
通过在线编译JAVA代码,动态加载编译后的结果,用于在不重启服务器的情况下加载JAVA类包,供用户在线编译及在线查看;
其中,在从代码库中查询目标业务需求对应的JAVA代码之前,还包括:
按照如下方式建立代码库;
在软件开发时,根据多种业务需求,开发多种业务需求对应的JAVA代码;
调用JAVA在线编译器,对多种业务需求对应的JAVA代码进行预编译;
将预编译成功的JAVA代码标记为待发布代码和/或待开发代码,将预编译失败的JAVA代码标记为待开发代码;
将待发布代码和待开发代码加密后存储至数据库;
其中,将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件,包括:
在目标业务需求对应的JAVA代码为待开发代码时,对目标业务需求对应的JAVA代码进行二次开发;
在目标业务需求对应的JAVA代码为待发布代码时,将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件;
调用JAVA在线编译器,对二次开发后的目标业务需求对应的JAVA代码进行预编译;
在预编译成功时,将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件。
2.如权利要求1所述的方法,其特征在于,所述目标业务需求对应的JAVA代码包括多个版本;目标业务需求对应的class文件中包含JAVA代码的版本号;
基于切面调用,执行目标业务需求对应的class文件的热加载命令,得到目标业务需求对应的class文件的调用结果,包括:
基于切面调用,分别执行目标业务需求对应的各个版本的class文件的热加载命令,得到目标业务需求对应的各个版本的class文件的调用结果。
3.一种软件在线开发的装置,其特征在于,包括:
目标业务需求接收模块,用于在调用软件主程序时,接收用户的目标业务需求;
JAVA代码查询模块,用于根据用户的目标业务需求,从代码库中查询目标业务需求对应的JAVA代码,其中,代码库中存储有多种业务需求对应的JAVA代码;
class文件编译模块,用于将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件;
热加载模块,用于基于切面调用,执行目标业务需求对应的class文件的热加载命令,得到目标业务需求对应的class文件的调用结果;其中,对于JAVA应用程序,热加载是在运行时更新JAVA类文件,包括:销毁已有的自定义ClassLoader;更新class类文件,创建新的ClassLoader去加载更新后的class类文件;
通过在线编译JAVA代码,动态加载编译后的结果,用于在不重启服务器的情况下加载JAVA类包,供用户在线编译及在线查看;
其中,该装置还包括:代码库建立模块,用于:
在从代码库中查询目标业务需求对应的JAVA代码之前,按照如下方式建立代码库;
在软件开发时,根据多种业务需求,开发多种业务需求对应的JAVA代码;
调用JAVA在线编译器,对多种业务需求对应的JAVA代码进行预编译;
将预编译成功的JAVA代码标记为待发布代码和/或待开发代码,将预编译失败的JAVA代码标记为待开发代码;
将待发布代码和待开发代码加密后存储至数据库;
其中,class文件编译模块具体用于:
在目标业务需求对应的JAVA代码为待开发代码时,对目标业务需求对应的JAVA代码进行二次开发;
在目标业务需求对应的JAVA代码为待发布代码时,将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件;
调用JAVA在线编译器,对二次开发后的目标业务需求对应的JAVA代码进行预编译;
在预编译成功时,将目标业务需求对应的JAVA代码动态编译为目标业务需求对应的class文件。
4.如权利要求3所述的装置,其特征在于,所述目标业务需求对应的JAVA代码包括多个版本;目标业务需求对应的class文件中包含JAVA代码的版本号;
热加载模块,具体用于:
基于切面调用,分别执行目标业务需求对应的各个版本的class文件的热加载命令,得到目标业务需求对应的各个版本的class文件的调用结果。
5.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1或2任一所述的方法。
6.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1或2任一所述方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110728573.6A CN113342323B (zh) | 2021-06-29 | 2021-06-29 | 软件在线开发的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110728573.6A CN113342323B (zh) | 2021-06-29 | 2021-06-29 | 软件在线开发的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113342323A CN113342323A (zh) | 2021-09-03 |
CN113342323B true CN113342323B (zh) | 2024-03-29 |
Family
ID=77481373
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110728573.6A Active CN113342323B (zh) | 2021-06-29 | 2021-06-29 | 软件在线开发的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113342323B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113703740A (zh) * | 2021-09-17 | 2021-11-26 | 厦门中盾安信科技有限公司 | 一种基于业务规则配置执行业务请求命令的方法和*** |
CN113703820A (zh) * | 2021-09-23 | 2021-11-26 | 中国银行股份有限公司 | 一种热加载源码的方法、装置、电子设备及存储介质 |
CN115373725B (zh) * | 2022-10-24 | 2023-02-03 | 布谷云软件技术(南京)有限公司 | 一种以需求为粒度的软件开发管理***及方法 |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6110226A (en) * | 1998-02-19 | 2000-08-29 | Cygnus Solutions | Java development environment using optimizing ahead-of-time compiler |
US6151703A (en) * | 1996-05-20 | 2000-11-21 | Inprise Corporation | Development system with methods for just-in-time compilation of programs |
US6842894B1 (en) * | 1999-04-05 | 2005-01-11 | Gateway, Inc. | Dynamic Compiling |
US6973646B1 (en) * | 2000-07-21 | 2005-12-06 | International Business Machines Corporation | Method for compiling program components in a mixed static and dynamic environment |
CN103885875A (zh) * | 2012-12-21 | 2014-06-25 | ***股份有限公司 | 脚本验证装置及方法 |
CN106250178A (zh) * | 2016-07-26 | 2016-12-21 | 北京北森云计算股份有限公司 | 通过多语言云编译实现***动态功能在线拦截扩展的方法 |
CN106648822A (zh) * | 2016-12-30 | 2017-05-10 | 深圳市九洲电器有限公司 | 界面字符串筛选方法及*** |
CN106775893A (zh) * | 2016-12-30 | 2017-05-31 | 北京小米移动软件有限公司 | 对程序预编译的方法及装置 |
CN107168758A (zh) * | 2017-04-12 | 2017-09-15 | 北京小米移动软件有限公司 | 多代码库的代码编译检查方法及装置 |
CN107832099A (zh) * | 2017-10-26 | 2018-03-23 | 咪咕数字传媒有限公司 | 一种客户端版本兼容的方法、装置及存储介质 |
CN108446223A (zh) * | 2018-03-06 | 2018-08-24 | 吉旗(成都)科技有限公司 | 一种基于动态编译的业务场景自动化测试方法 |
CN110262818A (zh) * | 2019-05-29 | 2019-09-20 | 北京达佳互联信息技术有限公司 | Java代码热更新方法、装置、电子设备及存储介质 |
CN111736916A (zh) * | 2020-06-08 | 2020-10-02 | 北京达佳互联信息技术有限公司 | 基于Java语言的动态扩展方法、装置、电子设备及存储介质 |
CN112199110A (zh) * | 2020-10-16 | 2021-01-08 | 上海睿成软件有限公司 | 一种免重启运维升级方法、***、装置和介质 |
CN112947934A (zh) * | 2021-02-25 | 2021-06-11 | 山东爱城市网信息技术有限公司 | 一种动态变换业务逻辑的方法、设备及介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7941797B2 (en) * | 2005-10-27 | 2011-05-10 | International Business Machines Corporation | Dynamically providing native libraries and their dependencies |
US8327351B2 (en) * | 2009-04-30 | 2012-12-04 | Sap Ag | Application modification framework |
US9058193B2 (en) * | 2013-11-14 | 2015-06-16 | Google Inc. | Methods and systems for providing compatibility of applications with multiple versions of an operating system |
US10275278B2 (en) * | 2016-09-14 | 2019-04-30 | Salesforce.Com, Inc. | Stream processing task deployment using precompiled libraries |
-
2021
- 2021-06-29 CN CN202110728573.6A patent/CN113342323B/zh active Active
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6151703A (en) * | 1996-05-20 | 2000-11-21 | Inprise Corporation | Development system with methods for just-in-time compilation of programs |
US6110226A (en) * | 1998-02-19 | 2000-08-29 | Cygnus Solutions | Java development environment using optimizing ahead-of-time compiler |
US6842894B1 (en) * | 1999-04-05 | 2005-01-11 | Gateway, Inc. | Dynamic Compiling |
US6973646B1 (en) * | 2000-07-21 | 2005-12-06 | International Business Machines Corporation | Method for compiling program components in a mixed static and dynamic environment |
CN103885875A (zh) * | 2012-12-21 | 2014-06-25 | ***股份有限公司 | 脚本验证装置及方法 |
CN106250178A (zh) * | 2016-07-26 | 2016-12-21 | 北京北森云计算股份有限公司 | 通过多语言云编译实现***动态功能在线拦截扩展的方法 |
CN106648822A (zh) * | 2016-12-30 | 2017-05-10 | 深圳市九洲电器有限公司 | 界面字符串筛选方法及*** |
CN106775893A (zh) * | 2016-12-30 | 2017-05-31 | 北京小米移动软件有限公司 | 对程序预编译的方法及装置 |
CN107168758A (zh) * | 2017-04-12 | 2017-09-15 | 北京小米移动软件有限公司 | 多代码库的代码编译检查方法及装置 |
CN107832099A (zh) * | 2017-10-26 | 2018-03-23 | 咪咕数字传媒有限公司 | 一种客户端版本兼容的方法、装置及存储介质 |
CN108446223A (zh) * | 2018-03-06 | 2018-08-24 | 吉旗(成都)科技有限公司 | 一种基于动态编译的业务场景自动化测试方法 |
CN110262818A (zh) * | 2019-05-29 | 2019-09-20 | 北京达佳互联信息技术有限公司 | Java代码热更新方法、装置、电子设备及存储介质 |
CN111736916A (zh) * | 2020-06-08 | 2020-10-02 | 北京达佳互联信息技术有限公司 | 基于Java语言的动态扩展方法、装置、电子设备及存储介质 |
CN112199110A (zh) * | 2020-10-16 | 2021-01-08 | 上海睿成软件有限公司 | 一种免重启运维升级方法、***、装置和介质 |
CN112947934A (zh) * | 2021-02-25 | 2021-06-11 | 山东爱城市网信息技术有限公司 | 一种动态变换业务逻辑的方法、设备及介质 |
Non-Patent Citations (1)
Title |
---|
陈丁等.Java EE程序设计教程.西安电子科技大学出版社,2018,第336-339页. * |
Also Published As
Publication number | Publication date |
---|---|
CN113342323A (zh) | 2021-09-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113342323B (zh) | 软件在线开发的方法及装置 | |
US10019256B2 (en) | Systems and methods for incremental software development | |
Dearle | Software deployment, past, present and future | |
US8607208B1 (en) | System and methods for object code hot updates | |
US8726255B2 (en) | Recompiling with generic to specific replacement | |
US9075596B2 (en) | Deployment | |
US7694277B2 (en) | Cross version customization of design environment | |
US9542175B2 (en) | Continuous deployment | |
US20070220492A1 (en) | Application verifier infrastructure and checks | |
US8266588B2 (en) | Creating projects in a rational application developer workspace | |
CN107678748B (zh) | 一种源代码文件编译方法及装置 | |
KR20150042297A (ko) | 동적으로 로딩하는 그래프 기반 계산 | |
JP2006099737A (ja) | テスト自動化のスタック階層化 | |
CN105159732B (zh) | 在移动终端安装或更新应用程序的方法和移动终端 | |
JP2008507775A (ja) | ソフトウェアアプリケーションリポジトリ内のアプリケーションメタ情報の抽出と作成のためのシステムおよび方法 | |
KR20140053756A (ko) | 어플리케이션을 보호하기 위한 링크와 로드 방법 | |
CN110059456B (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
US9542173B2 (en) | Dependency handling for software extensions | |
US20080271004A1 (en) | Computer-implemented method, system, and program product for optimizing a distributed application | |
CN105631337A (zh) | 控制机器代码的本机图像访问操作***资源的***及方法 | |
CN109857432B (zh) | 一种游戏应用的热更新方法和装置 | |
CN114610318A (zh) | 安卓应用程序的打包方法、装置、设备及存储介质 | |
US7987457B2 (en) | Targeted patching for native generation images | |
Islam et al. | Runtime software patching: Taxonomy, survey and future directions | |
US9760364B2 (en) | Checks for software extensions |
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 |