CN115357898B - 一种java组件的依赖分析方法、装置及介质 - Google Patents
一种java组件的依赖分析方法、装置及介质 Download PDFInfo
- Publication number
- CN115357898B CN115357898B CN202210808417.5A CN202210808417A CN115357898B CN 115357898 B CN115357898 B CN 115357898B CN 202210808417 A CN202210808417 A CN 202210808417A CN 115357898 B CN115357898 B CN 115357898B
- Authority
- CN
- China
- Prior art keywords
- dependency analysis
- dependency
- information
- gav
- file
- 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
- 238000004458 analytical method Methods 0.000 title claims abstract description 175
- 238000000034 method Methods 0.000 claims abstract description 28
- 230000006870 function Effects 0.000 claims description 26
- 238000007781 pre-processing Methods 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 10
- 238000004891 communication Methods 0.000 claims description 4
- 230000008569 process Effects 0.000 abstract description 12
- 238000001514 detection method Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 239000011148 porous material Substances 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013499 data model Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- 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)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种JAVA组件的依赖分析方法、装置及介质,包括:在本地端启动maven工具,将待分析的JAVA组件导入maven工具中,执行maven工具的插件功能,将中央仓库内与JAVA组件对应的开源组件信息下载至本地端,通过maven工具对POM文件进行依赖分析,得到JAVA组件的依赖分析结果。通过本申请的实施,仅需要将处于网络端的POM文件进行下载,无需下载开源组件包(即内含有若干信息的jar文件,该文件大小一般超过10GB),通过减少网络IO请求来减少下载所需要时间,从而减少依赖性分析所化费时间。并且在解析过程中无需对开源组件包进行分析,仅对POM文件进行分析,进一步提高依赖性分析效率。
Description
技术领域
本发明属于软件开发技术领域,尤其涉及一种JAVA组件的依赖分析方法、装置及介质。
背景技术
目前,随着软件行业不断发展,软件项目也日益庞大,要使复杂的软件项目在运行中不出错,就要对软件项目质量进行严格把关。计算机软件归根结底都是程序代码,如果程序代码中存在安全漏洞,那其他的安全策略则无从谈起,所以计算机软件代码安全是整个计算机系统安全的基石。源代码的安全漏洞检测则是保证软件安全最强有力的措施之一。源代码安全漏洞检测主要分为动态分析方法和静态分析方法。动态分析方法需要运行被测程序,其检测依赖外部环境和测试用例,具有一定的不确定性。静态分析方法主要对源代码进行分析,能发现较多的潜在安全漏洞,能避免动态检测的不足,例如依赖性分析就是静态分析方法中的一种。
在开源组件的开发过程中需要检查JAVA组件是否可复用时,则可以对JAVA组件进行依赖性分析,通过分析结果来进行判定。事实上,据估计,每个应用程序的80%-90%都由开源组件组成。目前市场上存在的相关技术和产品一般通过数据和执行命令来分析组件依赖,存在组件识别错误、遗漏和速度慢的问题。
因此,现有技术有待于改善。
发明内容
本发明的主要目的在于提出一种JAVA组件的依赖分析方法、装置及介质,以至少解决现有依赖性分析速度慢的技术问题。
本发明的第一方面,提供了一种JAVA组件的依赖分析方法,包括:
在本地端启动maven工具,将待分析的JAVA组件导入所述maven工具中;
执行所述maven工具的插件功能,将中央仓库内与所述JAVA组件对应的开源组件信息下载至所述本地端;其中,所述开源组件信息包括POM文件,所述中央仓库用于将开源组件信息存储于网络端;
通过所述maven工具对所述POM文件进行依赖分析,得到所述JAVA组件的依赖分析结果。
本发明的第二方面,提供了一种电子装置,包括存储器、处理器和总线,所述总线用于实现所述存储器、处理器之间的连接通信,所述处理器用于执行存储在所述存储器上的计算机程序,所述处理器执行所述计算机程序时,实现第一方面的方法中的步骤。
本发明的第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面的JAVA组件的依赖分析方法的步骤。
本发明提供的一种JAVA组件的依赖分析方法、装置及介质,通过在本地端启动maven工具,将待分析的JAVA组件导入maven工具中,执行maven工具的插件功能,将中央仓库内与JAVA组件对应的开源组件信息下载至本地端,通过maven工具对POM文件进行依赖分析,得到JAVA组件的依赖分析结果。通过本申请的实施,仅需要将处于网络端的POM文件进行下载,无需下载开源组件包(即内含有若干信息的jar文件,该文件大小一般超过10GB),通过减少网络IO请求来减少下载所需要时间,从而减少依赖性分析所化费时间。并且在解析过程中无需对开源组件包进行分析,仅对POM文件进行分析,进一步提高依赖性分析效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明第一实施例提供的JAVA组件的依赖分析方法的流程图;
图2为本发明中POM文件所包括的元素的示意图;
图3为本发明第二实施例提供的JAVA组件的依赖分析方法的流程图;
图4为本发明的本地端所下载到的POM文件、所得到的jar文件(空文件)的示意图;
图5-6为现有技术中将POM文件、jar文件从网络端下载至本地端所需要的时间以及下载位置的示意图;
图7为本发明第三实施例提供的电子装置的模块连接示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
需要注意的是,相关术语如“第一”、“第二”等可以用于描述各种组件,但是这些术语并不限制该组件。这些术语仅用于区分一个组件和另一组件。例如,不脱离本发明的范围,第一组件可以被称为第二组件,并且第二组件类似地也可以被称为第一组件。以及实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图示中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
请参阅图1,本发明所提供的一种JAVA组件的依赖分析方法,包括:
步骤S10,在本地端启动maven工具,将待分析的JAVA组件导入maven工具中;
在本实施例中,可以将用户所在操作端(例如PC端)作为本地端,即在PC端启动maven工具,在打开maven工具后,可以将待分析的JAVA组件导入maven工具。其中,maven工具为一款现有的自动构建化工具,服务于java平台。
其中,maven工具是一个项目管理、综合工具,提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,maven工具使用标准的目录结构和默认构建生命周期。在多个开发团队环境时,maven工具可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,maven工具让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。当然,也可以完成一些依赖性分析的功能。
步骤S20,执行maven工具的插件功能,将中央仓库内与JAVA组件对应的开源组件信息下载至本地端;
在本实施例中,在将待分析的JAVA组件导入maven工具后,执行maven工具的插件功能,插件功能可以将中央仓库内与JAVA组件对应的开源组件信息下载至本地端;其中,开源组件信息包括POM文件,中央仓库用于将开源组件信息存储于网络端。也即该具插件功能将开源组件信息中的POM文件从网络端下载至本地端。实际上,该插件功能是maven工具上的一个插件所对应的功能。
如图2所示,POM文件至少包括project信息(项目信息)、modelVersion信息(模型版本信息)、groupId信息(组织名称信息)、artifactId信息(组件名称信息)、version信息(版本号信息),也即POM文件是Maven工具中的基本工作单元。它是一个XML文件,其中包含有关项目信息和Maven用于构建项目的配置详细信息。它包含大多数项目的默认值。这方面的示例是构建目录,即target;源目录,即src/main/java;测试源目录,即src/test/java;等等。执行任务或目标时,Maven工具在当前目录中查找POM文件。它读取POM文件,获取所需的配置信息,然后执行目标。也可以在POM文件中指定的一些配置是项目依赖项、可以执行的插件或目标、构建配置文件等。也可以指定其他信息,例如项目版本、描述、开发人员、邮件列表等。
步骤S30,通过maven工具对POM文件进行依赖分析,得到JAVA组件的依赖分析结果;
具体的,由于POM文件已下载至本地端,则maven工具可以执行dependency:tree指令,从而对已处于本地端的POM文件进行依赖分析,得到JAVA组件的依赖分析结果。这种依赖分析结果可以是多个分析结果,例如分析列表、依赖关系树等。也即通过本申请的实施,仅需要将处于网络端的POM文件进行下载,无需下载开源组件包(即内含有若干信息的jar文件,该文件大小一般超过10GB),通过减少网络IO请求来减少下载所需要时间,从而减少依赖性分析所需要化费时间。并且在解析过程中无需对开源组件包进行分析,仅对POM文件进行分析,进一步提高依赖性分析效率。
参阅图3,将中央仓库内与所述JAVA组件对应的开源组件信息下载至本地端的步骤,具体包括:
步骤S300,启动maven工具的dependency插件,并执行dependency插件的预处理功能;
具体的,dependency插件的预处理功能为用户在maven工具中对dependency插件进行预处理后所形成的功能;简单来讲,用户对maven工具的dependency插件进行二次开发所形成的功能。
由于本申请的主要目的是对java软件使用的组件信息进行依赖分析,所以仅对开源组件的pom文件进行分析即可,实际并不需要使用组件的实际功能,也就是不需要实际去下载开源组件包即jar文件(包含有若干文件的jar文件)。jar文件是开源组件的主要组成部分,下载的过程中会较长时间的占用网络IO,且对解析过程是阻塞的,严重影响了组件的解析速度。
步骤S301,通过dependency插件的预处理功能将中央仓库内与JAVA组件对应的POM文件以及jar文件包进行下载;其中,jar文件包中的文件数量为0(也即本申请所得到的jar文件是空文件,大小为0kb,如图4所示);
步骤S302,将POM文件以及jar文件包存储于本地端的本地仓库。
具体的,dependency插件的预处理功能是将中央仓库内与JAVA组件对应的POM文件以及jar文件包进行下载,也即本申请无需去下载开源组件包即jar文件(包含有若干文件的jar文件),能够有效减少网络IO请求,从而优化整个组件解析过程。
在本实施例中,通过dependency插件的预处理功能将中央仓库内与JAVA组件对应的POM文件以及jar文件包进行下载的步骤,具体包括:通过dependency插件的预处理功能登录预设网址,并访问中央仓库,根据JAVA组件的组件名称检索与JAVA组件相关的开源组件信息,将开源组件信息中的POM文件以及所生成的jar文件包进行下载。
其中,预设网址为预先存储于maven工具中的网站链接,其作用是通过这些网址链接来到达对应的中央仓库。例如,预设网址至少包括以下:
https://repo1.maven.org/maven2/;
https://repo.hortonworks.com/content/repositories/releases/;
https://packages.atlassian.com/mvn/maven-atlassian-external/;
https://oss.sonatype.org/content/repositories/releases/;
https://repo.spring.io/plugins-release/;
https://repo.spring.io/libs-milestone/;
https://jcenter.bintray.com/。
应当理解的是,maven工具中开源组件都统一存储在开放的中央仓库中,个别组织会创建自己的开源组件仓库,根据开源组件仓库中的组件数,选择一些开放的仓库,对开源组件使用的POM文件进行收集。而在本实施例中下载对应开源组件的POM文件,存储在本地文件系统中,在后续的maven工具解析中做为本地仓库使用。也就是说利用本地仓库替代网络仓库,实现快速分析。
在本实施例中,通过maven工具对POM文件进行依赖分析,得到JAVA组件的依赖分析结果的步骤,具体包括:通过maven工具提取POM文件的GAV信息,在所述maven工具中将GAV信息进行依赖分析,得到JAVA组件的依赖分析结果。具体的,由于GAV信息为开源组件信息的标识信息,GAV信息包括groupId信息(组织名称信息)、artifactId信息(组件名称信息)和version信息(版本号信息),这三项可以简称为GAV,可以唯一确定一个开源组件,也是本专利进行组件分析的重要依据。由此,仅需要对于GAV信息进行依赖分析,从而快速、简单得到JAVA组件的依赖分析结果。
具体的,当dependency插件的功能未经用户进行预处理时,其对应功能是需要下载POM文件以及jar文件包(含有若干文件,大小大约为5-10GB,如图5-图6所示)。而本申请在maven工具的dependency插件的基础上,由于dependency插件的预处理功能是对dependency插件进行预处理后所得到的,相当于对dependency:tree进行扩展,省去下载组件jar包的步骤,直接分析已经收集完成的本地仓库pom文件;因事先准备好了pom文件,解析过程中可以使用本地仓库中的文件进行组件识别,大大的加快了解析的速度。对dependency插件进行预处理可以是在原有dependency插件的基础上,修改dependency插件的源代码,并减少组件解析前的网络下载行为,来直接执行dependency:tree命令的处理。
在本实施例中,通过maven工具提取POM文件的GAV信息的步骤之后,还包括:读取GAV信息的文件大小以及文件占用空间,根据文件大小和文件占用空间计算分析时间;其中,分析时间为对所述GAV信息进行依赖分析所需要的时间。
例如,当GAV信息的文件大小为100MB,以及文件占用空间为99.8MB时,可以按照以下计算公式:T表示分析时间,μ1表示与文件大小相关的第一相关系数,μ2表示与文件占用空间大小相关的第二相关系数,A表示文件大小(单位为KB),B表示文件占用空间(单位为KB),*表示相乘运算。通过计算出分析GAV信息所需要的时间,从而有利于快速、准确确定后续进行依赖分析时的分析策略选择。
在本实施例中,在maven工具中将GAV信息进行依赖分析,得到JAVA组件的依赖分析结果的步骤,具体包括:
若分析时间大于预设时间阈值,在所述maven工具中采用第一依赖分析规则对GAV信息进行依赖分析,得到第一依赖性分析结果;
若分析时间小于或者等于预设时间阈值,在所述maven工具中采用第二依赖分析规则对GAV信息进行依赖分析,得到第二依赖性分析结果;其中,JAVA组件的依赖分析结果包括第一依赖性分析结果以及第二依赖性分析结果。
具体的,当分析时间大于预设时间阈值,也即分析时间减去预设时间阈值的差值大于0时,采用第一依赖分析规则对GAV信息进行依赖分析,得到第一依赖性分析结果,该第一依赖分析规则为maven工具中的一种依赖分析规则,该第一依赖分析规则所获取到的第一依赖性分析结果可以包括依赖性分析列表;
具体的,当分析时间小于或者等于预设时间阈值,也即分析时间减去预设时间阈值的差值小于或者等于0时,采用第二依赖分析规则对GAV信息进行依赖分析,得到第二依赖性分析结果,该第二依赖分析规则为maven工具中的另一种依赖分析规则,该第二依赖分析规则所获取到的第二依赖性分析结果可以包括AST格式的依赖性分析结果。
在本实施例中,在maven工具中采用第一依赖分析规则对GAV信息进行依赖分析,得到第一依赖性分析结果的步骤,具体包括:根据GAV信息的语言类型从源码语言分析器中确定与语言类型对应的依赖分析插件,在maven工具中利用依赖分析插件对GAV信息进行依赖分析,得到依赖性分析列表。
具体的,源码语言分析器为一种分析工具,其与maven工具独立;而依赖分析插件为集成于maven工具中的一个插件。在进行具体实施时,先通过源码语言分析器确定与语言类型对应的依赖分析插件,从而选择适配的依赖分析插件来进行依赖分析,得到依赖性分析列表。
例如,源码语言分析器内集成有Java解析器、Php解析器、Python解析器等。因此无论是Java语言类型、Python语言类型还是Python语言类型的源代码,源码语言分析器都能调用对应的解析器实施解析,形成具有统一格式的数据模型信息。
在本实施例中,在maven工具中采用第二依赖分析规则对GAV信息进行依赖分析,得到第二依赖性分析结果的步骤,具体包括:生成GAV信息的抽象语法树,基于GAV信息的抽象语法树,在maven工具中对GAV信息的所有语句进行依赖性分析,得到AST格式的依赖性分析结果。
具体的,在生成GAV信息的抽象语法树(Abstract Syntax Tree,AST)的过程中就是一种初步解析过程,当执行完初步解析后,得到的GAV信息的抽象语法树类似以树状的形式的语法结构,树上的每个节点都表示源代码中的一种结构。例如,其中,生成的抽象语法树包括声明节点、表达式节点和块节点;
声明节点,其用于记录文本中与声明有关的语句或块,包括Package声明、import声明、类声明、方法声明和变量声明;
表达式节点,其用于记录一切除了声明节点以及块节点的语句,包括方法调用语句、类创建语句和赋值语句;
块节点,其用于表示带有花括号{}中的语句,包括类声明的类内容、方法声明中的方法内容、if语句、try语句、catch语句和for语句。
在得到上述声明节点、表达式节点和块节点后,对GAV信息的所有语句进行依赖性分析,得到AST格式的依赖性分析结果;可以理解的是,该AST格式的依赖性分析结果就是包含所有语句分析后的分析结果。
本发明提供的一种JAVA组件的依赖分析方法、装置及介质,通过在本地端启动maven工具,将待分析的JAVA组件导入maven工具中,执行maven工具的插件功能,将中央仓库内与JAVA组件对应的开源组件信息下载至本地端,通过maven工具对POM文件进行依赖分析,得到JAVA组件的依赖分析结果。通过本申请的实施,仅需要将处于网络端的POM文件进行下载,无需下载开源组件包(即内含有若干信息的jar文件,该文件大小一般超过10GB),通过减少网络IO请求来减少下载所需要时间,从而减少依赖性分析所化费时间。并且在解析过程中无需对开源组件包进行分析,仅对POM文件进行分析,进一步提高依赖性分析效率。并具有以下优势:开源组件库收集及更新阶段,大大减少网络请求,可显著提高解析速度;maven工具的dependency插件调整,通过减少jar文件大小的下载(所下载到的jar文件是空的),显著提高了java组件的整体依赖分析效率、速度。
图7示出了本发明第三实施例所提供的电子装置,该电子装置可用于实现前述任一实施例中的JAVA组件的依赖分析方法。该电子装置包括:
存储器701、处理器702、总线703及存储在存储器701上并可在处理器702上运行的计算机程序,存储器701和处理器702通过总线703连接。处理器702执行该计算机程序时,实现前述实施例中的JAVA组件的依赖分析方法。其中,处理器的数量可以是一个或多个。
存储器701可以是高速随机存取记忆体(RAM,Random Access Memory)存储器,也可为非不稳定的存储器(non-volatile memory),例如磁盘存储器。存储器701用于存储可执行程序代码,处理器702与存储器701耦合。
进一步的,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以是设置于上述各实施例中的电子装置中,该计算机可读存储介质可以是存储器。
该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现前述实施例中的JAVA组件的依赖分析方法。进一步的,该计算机可存储介质还可以是U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个可读存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的可读存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (9)
1.一种JAVA组件的依赖分析方法,其特征在于,所述方法包括:
在本地端启动maven工具,将待分析的JAVA组件导入所述maven工具中;
启动所述maven工具的dependency插件,并执行所述dependency插件的预处理功能;其中,所述dependency插件的预处理功能为用户在所述maven工具中对所述dependency插件进行预处理后所形成的功能;
通过所述dependency插件的预处理功能将中央仓库内与所述JAVA组件对应的POM文件以及jar文件包进行下载;其中,所述jar文件包中的文件数量为0;
将所述POM文件以及所述jar文件包存储于本地端的本地仓库;
通过所述maven工具对所述POM文件进行依赖分析,得到所述JAVA组件的依赖分析结果。
2.如权利要求1所述JAVA组件的依赖分析方法,其特征在于,所述通过所述dependency插件的预处理功能将中央仓库内与所述JAVA组件对应的POM文件以及jar文件包进行下载的步骤,具体包括:
通过所述dependency插件的预处理功能登录预设网址,并访问中央仓库;其中,所述预设网址为预先存储于maven工具中的网站链接;
根据所述JAVA组件的组件名称检索与所述JAVA组件相关的开源组件信息;
将所述开源组件信息中的POM文件以及所生成的jar文件包进行下载。
3.如权利要求1所述JAVA组件的依赖分析方法,其特征在于,所述通过所述maven工具对所述POM文件进行依赖分析,得到所述JAVA组件的依赖分析结果的步骤,具体包括:
通过所述maven工具提取所述POM文件的GAV信息;其中,所述GAV信息为所述POM文件的标识信息;
在所述maven工具中将所述GAV信息进行依赖分析,得到所述JAVA组件的依赖分析结果。
4.如权利要求3所述JAVA组件的依赖分析方法,其特征在于,所述通过所述maven工具提取所述POM文件的GAV信息的步骤之后,还包括:
读取所述GAV信息的文件大小以及文件占用空间;
根据所述文件大小和文件占用空间计算分析时间;其中,所述分析时间为对所述GAV信息进行依赖分析所需要的时间。
5.如权利要求4所述JAVA组件的依赖分析方法,其特征在于,所述在所述maven工具中将所述GAV信息进行依赖分析,得到所述JAVA组件的依赖分析结果的步骤,具体包括:
若所述分析时间大于预设时间阈值,在所述maven工具中采用第一依赖分析规则对所述GAV信息进行依赖分析,得到第一依赖性分析结果;
若所述分析时间小于或者等于所述时间阈值,在所述maven工具中采用第二依赖分析规则对所述GAV信息进行依赖分析,得到第二依赖性分析结果;
其中,所述JAVA组件的依赖分析结果包括所述第一依赖性分析结果以及所述第二依赖性分析结果。
6.如权利要求5所述JAVA组件的依赖分析方法,其特征在于,所述在所述maven工具中采用第一依赖分析规则对所述GAV信息进行依赖分析,得到第一依赖性分析结果的步骤,具体包括:
根据所述GAV信息的语言类型从源码语言分析器中确定与所述语言类型对应的依赖分析插件;其中,所述依赖分析插件为集成于所述maven工具中的一个插件;
在所述maven工具中利用所述依赖分析插件对所述GAV信息进行依赖分析,得到第一依赖性分析结果;其中,所述第一依赖性分析结果包括依赖性分析列表。
7.如权利要求5所述JAVA组件的依赖分析方法,其特征在于,所述在所述maven工具中采用第二依赖分析规则对所述GAV信息进行依赖分析,得到第二依赖性分析结果的步骤,具体包括:
生成所述GAV信息的抽象语法树;
基于所述GAV信息的抽象语法树,在所述maven工具中对所述GAV信息的所有语句进行依赖性分析,得到第二依赖性分析结果;其中,所述第二依赖性分析结果包括AST格式的依赖性分析结果。
8.一种电子装置,其特征在于,包括存储器、处理器和总线,所述总线用于实现所述存储器、处理器之间的连接通信,所述处理器用于执行存储在所述存储器上的计算机程序,所述处理器执行所述计算机程序时,实现权利要求1至7中任意一项所述JAVA组件的依赖分析方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述JAVA组件的依赖分析方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210808417.5A CN115357898B (zh) | 2022-07-08 | 2022-07-08 | 一种java组件的依赖分析方法、装置及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210808417.5A CN115357898B (zh) | 2022-07-08 | 2022-07-08 | 一种java组件的依赖分析方法、装置及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115357898A CN115357898A (zh) | 2022-11-18 |
CN115357898B true CN115357898B (zh) | 2024-08-16 |
Family
ID=84031068
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210808417.5A Active CN115357898B (zh) | 2022-07-08 | 2022-07-08 | 一种java组件的依赖分析方法、装置及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115357898B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117075956A (zh) * | 2023-09-04 | 2023-11-17 | 上海易立德信息技术股份有限公司 | 一种应用于模块化项目的配置插拔方法和系统 |
CN117707547B (zh) * | 2024-02-05 | 2024-05-28 | 云筑信息科技(成都)有限公司 | 一种解析java项目间引用关系的方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113515303A (zh) * | 2021-05-19 | 2021-10-19 | 中国工商银行股份有限公司 | 一种项目转型方法、装置和设备 |
CN114443043A (zh) * | 2021-12-17 | 2022-05-06 | 深圳开源互联网安全技术有限公司 | Maven源码包第三方组件的检测方法及系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8813031B2 (en) * | 2012-03-02 | 2014-08-19 | Oracle International Corporation | System and method for automatically resolving dependencies of Java Archive files for use with Maven |
CN111783103B (zh) * | 2020-07-03 | 2024-06-04 | Oppo广东移动通信有限公司 | 基于Maven的依赖管理方法、装置、电子装置及存储介质 |
CN112115473A (zh) * | 2020-09-15 | 2020-12-22 | 四川长虹电器股份有限公司 | 一种用于Java开源组件安全检测的方法 |
-
2022
- 2022-07-08 CN CN202210808417.5A patent/CN115357898B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113515303A (zh) * | 2021-05-19 | 2021-10-19 | 中国工商银行股份有限公司 | 一种项目转型方法、装置和设备 |
CN114443043A (zh) * | 2021-12-17 | 2022-05-06 | 深圳开源互联网安全技术有限公司 | Maven源码包第三方组件的检测方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN115357898A (zh) | 2022-11-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11797298B2 (en) | Automating identification of code snippets for library suggestion models | |
US20220269594A1 (en) | Automating Identification of Test Cases for Library Suggestion Models | |
CN115357898B (zh) | 一种java组件的依赖分析方法、装置及介质 | |
US11494181B2 (en) | Automating generation of library suggestion engine models | |
US9747190B2 (en) | Analysis system, analysis method, and computer program product | |
US9811325B2 (en) | Systems and methods for dynamically replacing code objects for code pushdown | |
CN112394942B (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
EP3234851B1 (en) | A system and method for facilitating static analysis of software applications | |
Hills et al. | PHP air: Analyzing PHP systems with rascal | |
Obbink et al. | An extensible approach for taming the challenges of JavaScript dead code elimination | |
De Macedo et al. | Webassembly versus javascript: Energy and runtime performance | |
McIntosh et al. | Identifying and understanding header file hotspots in c/c++ build processes | |
CN110347588B (zh) | 软件验证方法、装置、计算机设备和存储介质 | |
CN117632710A (zh) | 测试代码的生成方法、装置、设备及存储介质 | |
US9116713B1 (en) | System and method for expression evaluation in a distributed networking environment | |
US9507592B2 (en) | Analysis of data integration job | |
CN112632333A (zh) | 查询语句生成方法、装置、设备及计算机可读存储介质 | |
CN117008920A (zh) | 引擎系统、请求处理方法、装置、计算机设备及存储介质 | |
CN116775034A (zh) | 内核观测程序的构建方法、装置及设备 | |
Capuano et al. | A Graph-Based Java Projects Representation for Antipatterns Detection | |
CN110321130B (zh) | 基于系统调用日志的不可重复编译定位方法 | |
Patil | Design and implementation of combinatorial testing based test suites for operating systems used for internet of things | |
CN116127464A (zh) | 安全测试方法、装置、设备及存储介质 | |
Patil | Regression Testing in Era of Internet of Things and Machine Learning | |
US20230075295A1 (en) | Automatic denoising of machine learning projects |
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 |