CN117149206A - 许可证信息的采集方法、装置、电子设备及存储介质 - Google Patents
许可证信息的采集方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN117149206A CN117149206A CN202310926946.XA CN202310926946A CN117149206A CN 117149206 A CN117149206 A CN 117149206A CN 202310926946 A CN202310926946 A CN 202310926946A CN 117149206 A CN117149206 A CN 117149206A
- Authority
- CN
- China
- Prior art keywords
- license information
- target
- file
- collector
- acquisition
- 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 74
- 230000001419 dependent effect Effects 0.000 claims description 28
- 238000004590 computer program Methods 0.000 claims description 17
- 238000009434 installation Methods 0.000 claims description 16
- 238000012545 processing Methods 0.000 claims description 10
- 230000008569 process Effects 0.000 abstract description 14
- 238000004891 communication Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000011521 glass Substances 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001953 sensory effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
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/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/194—Calculation of difference between files
-
- 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)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种许可证信息的采集方法、装置、电子设备及存储介质。该方法包括:针对待进行许可证信息采集的目标软件,确定目标软件的编程语言;针对预先开发完成的用于采集许可证信息的至少一个候选采集器,根据至少一个候选采集器分别对应的编程语言,从至少一个候选采集器中确定出与目标软件的编程语言匹配的目标采集器;对目标采集器进行调用,以通过目标采集器,采集到与目标软件关联的许可证信息。本发明实施例的技术方案,可以实现可支持多种编程语言的许可证信息采集过程。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种许可证信息的采集方法、装置、电子设备及存储介质。
背景技术
随着软件行业的快速发展,建立健全软件物料清单(Software Bill ofMaterials,SBOM)规范和发展完善配套工具是今后软件发展的重心之一,而在SBOM收集或是软件构件分析(Software Composition Analysis,SCA)等场景下,针对软件的许可证信息管理越来越重要。
在实现本发明的过程中,发明人发现现有技术中存在以下技术问题:目前应用的许可证信息的采集方案的局限性较强,有待改进。
发明内容
本发明实施例提供了一种许可证信息的采集方法、装置、电子设备及存储介质,以实现可支持多种编程语言的许可证信息采集过程。
根据本发明的一方面,提供了一种许可证信息的采集方法,可以包括:
针对待进行许可证信息采集的目标软件,确定目标软件的编程语言;
针对预先开发出的用于采集许可证信息的至少一个候选采集器,根据至少一个候选采集器分别对应的编程语言,从至少一个候选采集器中确定出与目标软件的编程语言匹配的目标采集器;
对目标采集器进行调用,以通过目标采集器,采集到与目标软件关联的许可证信息。
根据本发明的另一方面,提供了一种许可证信息的采集装置,可以包括:
编程语言确定模块,用于针对于待进行许可证信息采集的目标软件,确定目标软件的编程语言;
目标采集器确定模块,用于针对预先开发出的用于采集许可证信息的至少一个候选采集器,根据至少一个候选采集器分别对应的编程语言,从至少一个候选采集器中确定出与目标软件的编程语言匹配的目标采集器;
许可证信息采集模块,用于对目标采集器进行调用,以通过目标采集器,采集到与目标软件关联的许可证信息。
根据本发明的另一方面,提供了一种电子设备,可以包括:
至少一个处理器;以及
与至少一个处理器通信连接的存储器;其中,
存储器存储有可被至少一个处理器执行的计算机程序,计算机程序被至少一个处理器执行,以使至少一个处理器执行时实现本发明任意实施例所提供的许可证信息的采集方法。
根据本发明的另一方面,提供了一种计算机可读存储介质,其上存储有计算机指令,该计算机指令用于使处理器执行时实现本发明任意实施例所提供的许可证信息的采集方法。
本发明实施例的技术方案,针对待进行许可证信息采集的目标软件,通过确定目标软件的编程语言;针对预先开发出的用于采集许可证信息的至少一个候选采集器,根据至少一个候选采集器分别对应的编程语言,从至少一个候选采集器中确定出与目标软件的编程语言匹配的目标采集器;调用目标采集器,以通过目标采集器,采集到目标软件关联的许可证信息。上述技术方案,通过预先开发出与多种编程语言分别匹配的候选采集器,从而可利用这些候选采集器中与目标软件的编程语言匹配的目标采集器,针对目标软件进行许可证信息采集,这一采集过程未局限于单一编程语言,实现了可支持多种编程语言的许可证信息采集过程,进而避免了SBOM中缺失许可证信息这一情况的出现。
应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或是重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例提供的一种许可证信息的采集方法的流程图;
图2是根据本发明实施例提供的另一种许可证信息的采集方法的流程图;
图3是根据本发明实施例提供的另一种许可证信息的采集方法的流程图;
图4是根据本发明实施例提供的另一种许可证信息的采集方法中可选示例的流程图;
图5是根据本发明实施例提供的一种许可证信息的采集装置的结构框图;
图6是实现本发明实施例的许可证信息的采集方法的电子设备的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。“目标”、“原始”等的情况类似,在此不再赘述。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
图1是本发明实施例中所提供的一种许可证信息的采集方法的流程图。本实施例可适用于许可证信息采集的情况,尤其适用于可支持多种编程语言的许可证信息采集的情况。该方法可由本发明实施例提供的许可证信息的采集装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在电子设备上,该电子设备可以是各种用户终端或是服务器。
参见图1,本发明实施例的方法具体包括如下步骤:
S110、针对待进行许可证信息采集的目标软件,确定目标软件的编程语言。
其中,软件许可证(即许可证文件)可理解为在软件开发和使用过程中,规定软件使用条件和限制的法律合同或授权文件,其定义了软件的许可范围、使用权、分发方式及修改和衍生作品的权利等方面的规定。在此基础上,许可证信息可理解为用于描述软件许可证的信息,例如可以是软件许可证的名称(即许可证名称)或是软件许可证中记载的内容等,在此未做具体限定。
目标软件可理解为待进行许可证信息采集的软件。编程语言可理解为用于编写得到目标软件的程序语言,例如可以是java、c++、php、javascript(即js)或python等,这与实际情况有关,在此未做具体限定。获取目标软件,并确定目标软件的编程语言。
S120、针对预先开发完成的用于采集许可证信息的至少一个候选采集器,根据至少一个候选采集器分别对应的编程语言,从至少一个候选采集器中确定出与目标软件的编程语言匹配的目标采集器。
其中,候选采集器可理解为针对某种编程语言预先开发出的用于实现许可证信息采集的工具。在实际应用中,可选的,候选采集器的数量可以是一个、两个或多个,这与实际情况有关,在此未做具体限定。需要说明的是,在不同的编程语言下,许可证信息的存储位置和采集方式等可能存在差异,因此可以针对不同的编程语言分别开发出相应的候选采集器,从而保证通过不同的编程语言编写得到的目标软件的许可证信息均可得到有效采集。
根据至少一个候选采集器分别对应的编程语言,从至少一个候选采集器中确定出与目标软件的编程语言匹配的目标采集器。在实际应用中,可选的,可将对应的编程语言为目标软件的编程语言的候选采集器作为目标采集器。这样设置的好处是,目标采集器正是针对目标软件的编程语言开发得到,因此利用目标采集器,可有效采集得到与目标软件关联的许可证信息。
S130、对目标采集器进行调用,以通过目标采集器,采集到与目标软件关联的许可证信息。
其中,调用目标采集器,从而可通过目标采集器,采集到与目标软件关联的许可证信息。实际应用中,可选的,该与目标软件关联的许可证信息,可以是目标软件(即软件包)的许可证信息;可以是软件包中使用的依赖组件(即依赖包)的许可证信息;也可以是与软件包对应的制品包的许可证信息;等等,这可根据实际情况进行设置,在此未做具体限定。
本发明实施例的技术方案,针对待进行许可证信息采集的目标软件,通过确定目标软件的编程语言;针对预先开发出的用于采集许可证信息的至少一个候选采集器,根据至少一个候选采集器分别对应的编程语言,从至少一个候选采集器中确定出与目标软件的编程语言匹配的目标采集器;调用目标采集器,以通过目标采集器,采集到目标软件关联的许可证信息。上述技术方案,通过预先开发出与多种编程语言分别匹配的候选采集器,从而可利用这些候选采集器中与目标软件的编程语言匹配的目标采集器,针对目标软件进行许可证信息采集,这一采集过程未局限于单一编程语言,实现了可支持多种编程语言的许可证信息采集过程,进而避免了SBOM中缺失许可证信息这一情况的出现。
一种可选的技术方案,许可证信息包括许可证名称,在采集到与目标软件关联的许可证信息之后,上述采集方法还包括:
获取预设的符合软件包数据交换规范的至少一个许可证名称;
将至少一个许可证名称以及采集到的许可证名称进行匹配,得到规范名称,并将规范名称更新为采集到的许可证名称。
其中,在本技术方案中,许可证信息通过许可证名称进行表示。需要说明的是,在实际应用中,利用目标采集器采集到的许可证名称不一定符合软件包数据交换(SoftwarePackage Data Exchange,SPDX)规范,这会给后续的信息共享和合规性管理等操作带来阻碍。因此,为避免造成这一阻碍,在采集得到与目标软件关联的许可证名称之后,可执行下述步骤:
获取预先设置的符合SPDX规范的至少一个许可证名称,在实际应用中,可选的,该至少一个许可证名称可理解为SPDX的许可证名称列表中的许可证名称。进一步,将获取的至少一个许可证名称与采集到的许可证名称进行匹配,得到规范名称,示例性的,可将获取的至少一个许可证名称中与采集到的许可证名称匹配的许可证名称作为规范名称;还可先从获取的至少一个许可证名称中确定出与采集到的许可证名称匹配的许可证名称,然后基于确定出的许可证名称,对采集到的许可证名称进行处理,得到规范名称;等等,在此未做具体限定。将规范名称更新为采集到的许可证名称。
上述技术方案,可得到符合SPDX规范的许可证名称。
图2是本发明实施例中提供的另一种许可证信息的采集方法的流程图。本实施例以上述各技术方案为基础进行优化。在本实施例中,可选的,上述采集方法还可包括:获取目标软件关联的工程文件,其中,工程文件与目标软件的编程语言适配;则对目标采集器进行调用,以通过目标采集器,采集到与目标软件关联的许可证信息,包括:对目标采集器进行调用,以通过目标采集器,针对工程文件进行许可证信息采集,得到与目标软件关联的许可证信息。其中,与上述各实施例相同或相应的术语的解释在此不再赘述。
参见图2,本实施例的方法具体可以包括如下步骤:
S210、针对待进行许可证信息采集的目标软件,获取目标软件关联的工程文件及确定目标软件的编程语言,其中,工程文件与目标软件的编程语言适配。
其中,工程文件可理解为与目标软件存在关联性的工程文件,例如可以是目标软件自身的工程文件,也可以是目标软件所在的当前工程的父工程的工程文件(这种情况多在通过java编写得到的目标软件中出现),等等,在此未做具体限定。需要说明的是,第一,工程文件与目标软件的编程语言适配,例如可以是基于目标软件的编程语言编写的文件,也可以是与目标软件的编程语言配合使用的文件,等等,在此未做具体限定;第二,工程文件可离线获取。
在此基础上,可选的,由于工程文件与目标软件的编程语言适配,因此可通过分析工程文件,识别出目标软件的编程语言。
S220、针对预先开发完成的用于采集许可证信息的至少一个候选采集器,根据至少一个候选采集器分别对应的编程语言,从至少一个候选采集器中确定出与目标软件的编程语言匹配的目标采集器。
S230、对目标采集器进行调用,以通过目标采集器,针对工程文件进行许可证信息采集,得到与目标软件关联的许可证信息。
其中,由于工程文件和目标采集器均与目标软件的编程语言相适配,而且针对目标软件关联的许可证信息,工程文件也与许可证信息有关,因此可通过目标采集器,针对工程文件进行许可证信息采集,得到许可证信息。
本发明实施例的技术方案,通过获取目标软件关联的工程文件,然后利用目标采集器,针对工程文件进行许可证信息采集,由于工程文件可离线获取,无需通过在线访问互联网获取,由此实现了在离线场景下采集到许可证信息。
一种可选的技术方案,在目标软件的编程语言是java的情况下,目标采集器为java采集器;
通过目标采集器,针对工程文件进行许可证信息采集,得到与目标软件关联的许可证信息,包括:
通过java采集器,获取工程文件中的至少一个目标采集文件,并于该至少一个目标采集文件内进行许可证信息采集,得到与目标软件关联的许可证信息。
其中,在目标软件的编程语言是java的情况下,目标采集器为java采集器,即与java这种编程语言对应的候选采集器。
目标采集文件可理解为与java适配的工程文件中可能记载有许可证信息的文件。目标采集文件的数量可以是一个、两个或是多个,这与实际情况有关,在此未做具体限定。结合到本发明实施例可能涉及的应用场景,可选的,至少一个目标采集文件可包括元数据文件、当前配置文件以及父配置文件中的至少一个,其中,当前配置文件可理解为目标软件的当前工程中的配置文件,而父配置文件可理解为当前工程的父工程中的配置文件。
通过java采集器,从工程文件中获取至少一个目标采集文件,然后于至少一个目标采集文件内进行许可证信息采集,得到与目标软件关联的许可证信息。实际应用中,可选的,可按照预先设置的文件采集顺序,于至少一个目标采集文件内采集许可证信息,也可于至少一个目标采集文件内同步采集许可证信息,等等,在此未做具体限定。
上述技术方案,实现了java环境下许可证信息的有效采集。
在此基础上,可选的,于至少一个目标采集文件内进行许可证信息采集,得到与目标软件关联的许可证信息,包括:
按照预先设置的文件采集顺序,从至少一个目标采集文件中确定当前采集文件,并于当前采集文件内进行许可证信息采集;
在于当前采集文件内采集失败的情况下,按照文件采集顺序,从至少一个目标采集文件中确定出当前采集文件的下一采集文件,并将下一采集文件更新为当前采集文件;
重复执行于当前采集文件内进行许可证信息采集的步骤;
在于当前采集文件内采集成功的情况下,将成功采集到的许可证信息,作为与目标软件关联的许可证信息。
其中,文件采集顺序可理解为预先设置的,用于表征在至少一个目标采集文件中的各个目标采集文件内采集许可证信息的先后顺序。实际应用中,可选的,可根据于各个目标采集文件内分别采集到许可证信息的可能性大小,设置文件采集顺序。这样一来,可先在更可能采集到许可证信息的目标采集文件内采集许可证信息,由此提高了许可证信息采集的命中率。
按照文件采集顺序,从至少一个目标采集文件中确定当前采集文件,并于当前采集文件内进行许可证信息采集。进一步,如果未在当前采集文件内成功采集到许可证信息,这可按照文件采集顺序,从至少一个目标采集文件中确定当前采集文件的下一采集文件,然后将下一采集文件更新为当前采集文件,以在当前采集文件内采集许可证信息;如果在当前采集文件内成功采集到许可证信息,则可将成功采集到的许可证信息作为目标软件关联的许可证信息。
上述技术方案,通过设置文件采集顺序,提高了许可证信息采集的命中率。
为了从整体上更好地理解java采集器的工作流程,下面结合具体示例,对其进行示例性说明。示例性的,通过java采集器,首先在元数据文件META-INF/MANIFEST.MF中采集许可证信息,并在采集成功的情况下结束,否则执行下述操作。在当前配置文件pom.xml中采集当前工程的许可证信息,并在采集成功的情况下结束,否则执行下述操作。在父配置文件(即父pom)中采集许可证信息,需要说明的是,在java Maven项目中,父pom(即parentpom)是一个用于管理子模块的pom文件,因此在当前工程的pom中缺少许可证信息的情况下,可从其的父pom中尝试获取许可证信息。
另一可选的技术方案,在目标软件的编程语言是c++的情况下,目标采集器为c++采集器;
通过目标采集器,针对工程文件进行许可证信息采集,得到与目标软件关联的许可证信息,包括:
通过c++采集器,针对与目标软件对应的包管理器,获取包管理器的类型和版本,并确定与类型和版本对应的采集命令;
检测采集命令的执行环境,并于执行环境下通过执行采集命令,针对工程文件进行许可证信息采集,得到目标软件关联的许可证信息。
其中,在目标软件的编程语言是c++的情况下,目标采集器为c++采集器,即与c++这种编程语言对应的候选采集器。
包管理器与目标软件对应,可理解为在用户终端上自动安装、配制、卸载以及升级软件包的工具组合。通过c++采集器,获取包管理器的类型和版本,从而可基于该类型和版本,确定用于实现许可证信息采集的采集命令,该采集命令具体来说可以是用于实现许可证信息采集的包管理器客户端命令。示例性的,在包管理器是conan包管理器的V2版本,即类型是conan并且版本是V2的情况下,采集命令可以是conan graph info。
检测采集命令的执行环境,从而于执行环境下,可以通过执行采集命令,针对工程文件进行许可证信息采集,得到目标软件关联的许可证信息。
上述技术方案,实现了c++环境下许可证信息的有效采集。
又一可选的技术方案,在目标软件的编程语言是javascript的情况下,目标采集器为javascript采集器;
通过目标采集器,针对工程文件进行许可证信息采集,得到与目标软件关联的许可证信息,包括:
通过javascript采集器,获取节点模块目录,并基于节点模块目录,从工程文件中查询到节点模块;
于节点模块中的包文件内进行许可证信息采集,得到与目标软件关联的许可证信息。
其中,在目标软件的编程语言是javascript的情况下,目标采集器为javascript采集器,即与javascript这种编程语言对应的候选采集器。
节点模块目录可理解为用于记录节点模块(node_modules)的目录。节点模块可理解为安装node后用来存放包管理工具(例如可以是webpack、gulp和grunt等)下载安装的包的文件夹。
通过javascript采集器,获取节点模块目录(read-installed),并基于节点模块目录,从工程文件中查询node_modules。在查询到node_modules的情况下,于node_modules中的包文件(package.json)内进行许可证信息采集,从而得到与目标软件关联的许可证信息。
上述技术方案,实现了javascript环境下许可证信息的有效采集。
再一种可选的技术方案,在目标软件的编程语言是python的情况下,目标采集器为python采集器;
通过目标采集器,针对工程文件进行许可证信息采集,得到与目标软件关联的许可证信息,包括:
通过python采集器,利用pip命令,获取当前python环境中已安装的依赖包,并检查依赖包的安装目录下的许可证文件,其中,依赖包为目标软件所依赖的组件,许可证文件属于工程文件;
在于安装目录下检查到许可证文件的情况下,于许可证文件内针对依赖包进行许可证信息采集,得到目标软件关联的许可证信息。
其中,在目标软件的编程语言是python的情况下,目标采集器可以为python采集器,即与python这种编程语言对应的候选采集器。
pip命令是用于安装python语言工程的依赖包的命令,该依赖包可理解为目标软件所依赖的组件。通过python采集器,利用pip命令,获取当前python环境中已安装的依赖包,并检查依赖包的安装目录下的许可证文件,该许可证文件属于与目标软件关联的工程文件,例如可以是LICENSE或是COPYING等。在于安装目录下检查到即存在许可证文件的情况下,可读取许可证文件,以从许可证文件内提取出依赖包的许可证信息,并将提取出的许可证信息,作为与目标软件关联的许可证信息。
上述技术方案,实现了python环境下许可证信息的有效采集。
在此基础上,可选的,在检查依赖包的安装目录下的许可证文件后,通过目标采集器,针对工程文件进行许可证信息采集,得到与目标软件关联的许可证信息,还包括:
在于安装目录下未检查到许可证文件的情况下,利用python库中的包资源模块,于工程文件内针对依赖包进行许可证信息采集,得到与目标软件关联的许可证信息。
换言之,在于安装目录下未存在许可证文件的情况下,可利用python库中的包资源(pkg_resources)模块,于工程文件内进行许可证信息采集。
上述技术方案,保证了python环境下许可证信息的成功采集。
图3是本发明实施例中提供的另一种许可证信息的采集方法的流程图。本实施例以上述各技术方案为基础进行优化。在本实施例中,可选的,上述采集方法,还包括:在通过目标采集器采集失败的情况下,调用预先开发出的信息比较器,以通过信息比较器,从工程文件中查找可代表许可证文件的代表文件,并将代表文件中记载的文本信息与预设的许可证信息进行比较,得到目标软件关联的许可证信息。其中,与上述各实施例相同或相应的术语的解释在此不再赘述。
参见图3,本实施例的方法具体可以包括如下步骤:
S310、针对待进行许可证信息采集的目标软件,获取目标软件关联的工程文件及确定目标软件的编程语言,其中,工程文件与目标软件的编程语言适配。
S320、针对预先开发完成的用于采集许可证信息的至少一个候选采集器,根据至少一个候选采集器分别对应的编程语言,从至少一个候选采集器中确定出与目标软件的编程语言匹配的目标采集器。
S330、对目标采集器进行调用,以通过目标采集器,针对工程文件进行许可证信息采集,并在采集成功的情况下,得到与目标软件关联的许可证信息。
其中,在通过目标采集器成功采集到许可证信息的情况下,可得到与目标软件关联的许可证信息。
S340、在通过目标采集器采集失败的情况下,调用预先开发出的信息比较器,以通过信息比较器,从工程文件中查找可代表许可证文件的代表文件,并将代表文件中记载的文本信息与预设的许可证信息进行比较,得到与目标软件关联的许可证信息。
其中,在通过目标采集器未成功采集到许可证信息的情况下,为了得到与目标软件关联的许可证信息,可以调用预先开发出的用于实现信息比较的信息比较器,从而通过信息比较器执行下述步骤,以得到许可证信息:
从工程文件中查找代表文件,该代表文件可理解为可作为许可证文件应用的文件,即可能代表许可证文件的文件,例如可以是license.md等。结合到本发明实施例可能涉及的应用场景,可从工程文件的根目录和二级目录查找代表文件。进一步,读取代表文件,将代表文件中记载的文本信息与预设的许可证信息进行比较,从而推断出目标软件关联的许可证信息,例如可将文本信息中与预设的许可证信息较为相似的相似信息,作为与目标软件关联的许可证信息。上述预设的许可证信息,可根据当前主流应用的许可证信息预先设置得到。
本发明实施例的技术方案,在通过目标采集器未成功采集到许可证信息的情况下,调用信息比较器,以通过信息比较器,对代表文件中记载的文本信息与预设的许可证信息进行比较,从而推断出目标软件关联的许可证信息。上述技术方案,通过信息比较器进行兜底,从而保证了许可证信息的成功采集。
一种可选的技术方案,将代表文件中记载的文本信息与预设的许可证信息进行比较,得到目标软件关联的许可证信息,包括:
对代表文件中记载的文本信息进行单词拆分,得到至少一个单词;
针对至少一个单词中的每个单词,确定单词在文本信息中的出现次数,并基于出现次数,为单词赋予权重;
基于至少一个单词以及至少一个单词分别对应的权重,构成加权词袋,并对加权词袋进行加权哈希处理,得到第一哈希值;
基于预设的许可证信息,生成第二哈希值,并通过比较第一哈希值和第二哈希值,得到与目标软件关联的许可证信息。
其中,将代表文件中记载的文本信息拆分为一个或是多个单词,即将文本信息中的每个单词(或称为词语)分离出来,然后针对这些单词中的每个单词,根据该单词在文本信息中的出现次数,为该单词赋予权重。示例性的,假设在文本信息中包含单词"apple"和"orange",其中,"apple"出现了3次并且"orange"出现了1次,则为"apple"赋予的权重可以是3,而为"orange"赋予的权重可以1。
进一步,基于至少一个单词以及至少一个单词分别对应的权重,构成加权词袋,该加权词袋可理解为一个字典,其中的每个单词分别对应有各自的权重。然后,对加权词袋进行加权哈希处理,得到第一哈希值。示例性的,可将加权词袋转换成数学向量,然后利用加权最小哈希算法对数学向量进行处理,得到固定长度的第一哈希值。
再进一步,基于预设的许可证信息,生成第二哈希值,从而可以通过比较第一哈希值和第二哈希值,以从文本信息中推断出目标软件关联的许可证信息。
上述技术方案,通过构建加权词袋,提高了许可证信息推断的准确性。
为了从整体上更好地理解上述的各个技术方案,下面结合具体示例,对其进行示例性说明。示例性的,参见图4:
1、在接收到许可证信息采集请求的情况下,初始化预处理器,以通过预处理器,对许可证信息采集请求中的入参进行校验,并对支持的所有候选采集器(例如java采集器、js采集器、c++采集器以及python采集器等)进行注册。结合本发明实施例可能涉及的应用场景,上述入参例如可以是目标软件的源码路径和制品包路径等。在入参校验通过的情况下,可执行后续步骤。
2、通过遍历工程文件来识别目标软件的编码语言,并启动对应编程语言的候选采集器(即目标采集器),针对工程文件采集软件包和依赖包的许可证信息。接下来对上述举例的几种候选采集器的工作流程进行示例性说明。
3、java采集器:首先从元数据文件META-INF/MANIFEST.MF中采集许可证信息,其次从当前配置文件pom.xml中采集当前工程的许可证信息,再次从父pom中采集许可证信息。至此,如果仍未采集到许可证信息,则可启动信息比较器,执行通用许可证信息相似度推断流程。
4、c++采集器:首先,判断包管理器的类型和版本,得到对应的包管理器客户端命令,同时检测包管理器客户端命令的执行环境;然后,于执行环境下通过执行包管理器客户端命令来采集许可证信息。至此,如果未采集到许可证信息,则可启动信息比较器,执行通用许可证信息相似度推断流程。
5、javascript(即js)采集器:获取node_modules目录read-installed,如果根据node_modules目录收集到node_modules列表,则查询node_modules列表的package.json以提取对应的许可证信息。至此,如果未采集到许可证信息,则可启动信息比较器,执行通用许可证信息相似度推断流程。
6、python采集器:利用pip命令来获取当前python环境中的已安装的全部依赖包,进而针对全部依赖包中的每个依赖包,检查依赖包的安装目录下是否存在许可证文件。如果存在,则读取该许可证文件以提取许可证信息;否则,尝试使用Python库pkg_resources模块来获取依赖包的许可证信息。至此,若未采集到许可证信息,则启动信息比较器,执行通用许可证信息相似度推断流程。
7、通用许可证信息相似度推断(即信息比较器):在工程文件的根目录及二级目录中查找可能代表许可证文件的代表文件,并将代表文件中记载的文本信息拆分为单词,进而根据单词在文本信息中的出现次数来为单词赋予权重,由此形成一个加权词袋。进一步,通过加权最小哈希算法处理加权词袋,并与预设的许可证信息进行比较,推断出许可证信息。
8、许可证名称规范匹配:许可证信息具体可为许可证名称,经过以上步骤获取的许可证名称可能不符合SPDX规范,因此通过将获取的许可证名称与SPDX的许可证名称列表进行匹配,从而得到符合SPDX规范的许可证名称。
上述技术方案,通过预处理器、编程语言识别、与多种编程语言分别适配的候选采集器、通用许可证信息相似度推断以及许可证名称规范匹配等内容,实现了可支持多种编程语言的许可证信息的离线采集与推断过程。
图5为本发明实施例所提供的许可证信息的采集装置的结构框图,该装置用于执行上述任意实施例所提供的许可证信息的采集方法。该装置与上述各实施例的许可证信息的采集方法属于同一个发明构思,在许可证信息的采集装置的实施例中未详尽描述的细节内容,可以参考上述许可证信息的采集方法的实施例。参见图5,该装置具体可包括:编程语言确定模块410、目标采集器确定模块420和许可证信息采集模块430。
其中,编程语言确定模块410,用于针对于待进行许可证信息采集的目标软件,确定目标软件的编程语言;
目标采集器确定模块420,用于针对预先开发出的用于采集许可证信息的至少一个候选采集器,根据至少一个候选采集器分别对应的编程语言,从至少一个候选采集器中确定出与目标软件的编程语言匹配的目标采集器;
许可证信息采集模块430,用于对目标采集器进行调用,以通过目标采集器,采集到与目标软件关联的许可证信息。
可选的,上述采集装置,还包括:
工程文件获取模块,用于获取目标软件关联的工程文件,其中,工程文件与目标软件的编程语言适配;
许可证信息采集模块430,包括:
许可证信息采集子模块,用于对目标采集器进行调用,以通过目标采集器,针对工程文件进行许可证信息采集,得到与目标软件关联的许可证信息。
在此基础上,一可选的,在目标软件的编程语言是java的情况下,目标采集器为java采集器;许可证信息采集子模块,包括:
许可证信息第一采集单元,用于通过java采集器,获取工程文件中的至少一个目标采集文件,并于至少一个目标采集文件内进行许可证信息采集,得到与目标软件关联的许可证信息。
在此基础上,可选的,许可证信息第一采集单元,包括:
许可证信息采集子单元,用于按照预先设置的文件采集顺序,从至少一个目标采集文件中确定当前采集文件,并于当前采集文件内进行许可证信息采集;
当前采集文件更新子单元,用于在于当前采集文件内采集失败的情况下,按照文件采集顺序,从至少一个目标采集文件中确定当前采集文件的下一采集文件,并将下一采集文件更新为当前采集文件;
重复执行子单元,用于重复执行于当前采集文件内进行许可证信息采集的步骤;
许可证信息得到子单元,用于在于当前采集文件内采集成功的情况下,将成功采集到的许可证信息,作为与目标软件关联的许可证信息。
另一可选的,在目标软件的编程语言是c++的情况下,目标采集器为c++采集器;许可证信息采集子模块,包括:
采集命令确定单元,用于通过c++采集器,针对与目标软件对应的包管理器,获取包管理器的类型和版本,并确定与类型和版本对应的采集命令;
许可证信息第二采集单元,用于检测采集命令的执行环境,于执行环境下通过执行采集命令,针对工程文件进行许可证信息采集,得到目标软件关联的许可证信息。
另一可选的,在目标软件的编程语言是javascript的情况下,目标采集器为javascript采集器;许可证信息采集子模块,包括:
节点模块查询单元,用于通过javascript采集器,获取节点模块目录,并基于节点模块目录,从工程文件中查询到节点模块;
许可证信息第三采集单元,用于在节点模块中的包文件内进行许可证信息采集,得到与目标软件关联的许可证信息。
另一可选的,在目标软件的编程语言是python的情况下,目标采集器为python采集器;许可证信息采集子模块,包括:
许可证文件检查单元,用于通过python采集器,利用pip命令,获取当前python环境中已安装的依赖包,并检查依赖包的安装目录下的许可证文件,其中,依赖包为目标软件所依赖的组件,许可证文件属于工程文件;
许可证信息第四采集单元,用于在于安装目录下检查到许可证文件的情况下,于许可证文件内针对依赖包进行许可证信息采集,得到与目标软件关联的许可证信息。
在此基础上,可选的,许可证信息采集子模块,还包括:
许可证信息第五采集单元,用于在检查依赖包的安装目录下的许可证文件后,在于安装目录下未检查到许可证文件的情况下,利用python库中的包资源模块,于工程文件内针对依赖包进行许可证信息采集,得到与目标软件关联的许可证信息。
另一可选的,上述采集装置,还包括:
许可证信息得到模块,用于在通过目标采集器采集失败的情况下,调用预先开发出的信息比较器,以通过信息比较器,从工程文件中查找可代表许可证文件的代表文件,并将代表文件中记载的文本信息以及预设的许可证信息进行比较,得到目标软件关联的许可证信息。
在此基础上,可选的,许可证信息得到模块,包括:
单词得到单元,用于对代表文件中记载的文本信息进行单词拆分,得到至少一个单词;
权重赋予单元,用于针对至少一个单词中的每个单词,确定该单词在文本信息中的出现次数,并基于出现次数,为该单词赋予权重;
第一哈希值得到单元,用于基于至少一个单词以及至少一个单词分别对应的权重,构成加权词袋,并对加权词袋进行加权哈希处理,得到第一哈希值;
许可证信息得到单元,用于基于预设的许可证信息,生成第二哈希值,并通过比较第一哈希值和第二哈希值,得到与目标软件关联的许可证信息。
可选的,许可证信息包括许可证名称,上述采集装置,还包括:
许可证名称获取模块,用于在采集到与目标软件关联的许可证信息之后,获取预设的符合软件包数据交换规范的至少一个许可证名称;
许可证名称更新模块,用于将至少一个许可证名称与采集到的许可证名称进行匹配,得到规范名称,并将规范名称更新为采集到的许可证名称。
本发明实施例所提供的许可证信息的采集装置,通过编程语言确定模块,针对待进行许可证信息采集的目标软件,通过确定目标软件的编程语言;通过目标采集器确定模块,针对预先开发出的用于采集许可证信息的至少一个候选采集器,根据至少一个候选采集器分别对应的编程语言,从至少一个候选采集器中确定与目标软件的编程语言匹配的目标采集器;通过许可证信息采集模块,调用目标采集器,以通过目标采集器,采集到与目标软件关联的许可证信息。上述装置,通过预先开发出与多种编程语言分别匹配的候选采集器,从而可以利用这些候选采集器中的与目标软件的编程语言匹配的目标采集器,针对目标软件进行许可证信息采集,这一采集过程并未局限于单一编程语言,实现了可支持多种编程语言的许可证信息采集过程,进一步避免了SBOM中缺失许可证信息这一情况的出现。
本发明实施例所提供的许可证信息的采集装置可执行本发明任意实施例所提供的许可证信息的采集方法,具备执行方法相应的功能模块和有益效果。
值得注意的是,上述许可证信息的采集装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
图6示出了可以用来实施本发明的实施例的电子设备10的结构示意图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
如图6所示,电子设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(ROM)12、随机访问存储器(RAM)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(ROM)12中的计算机程序或从存储单元18加载到随机访问存储器(RAM)13中的计算机程序,来执行各种适当的动作和处理。在RAM 13中,还可存储电子设备10操作所需的各种程序和数据。处理器11、ROM 12以及RAM 13通过总线14彼此相连。输入/输出(I/O)接口15也连接至总线14。
电子设备10中的多个部件连接至I/O接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许电子设备10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如许可证信息的采集方法。
在一些实施例中,许可证信息的采集方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由ROM 12和/或通信单元19而被载入和/或安装到电子设备10上。当计算机程序加载到RAM 13并由处理器11执行时,可以执行上文描述的许可证信息的采集方法的一个或多个步骤。备选地,在其他实施例中,处理器11可通过其他任何适当的方式(例如,借助于固件)而被配置为执行许可证信息的采集方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、以及至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、以及该至少一个输出装置。
用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或是其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行并且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在电子设备上实施此处描述的系统和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、区块链网络和互联网。
计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务中,存在的管理难度大,业务扩展性弱的缺陷。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (14)
1.一种许可证信息的采集方法,其特征在于,包括:
针对待进行许可证信息采集的目标软件,确定所述目标软件的编程语言;
针对预先开发出的用于采集许可证信息的至少一个候选采集器,根据所述至少一个候选采集器分别对应的编程语言,从所述至少一个候选采集器中确定出与所述目标软件的编程语言匹配的目标采集器;
对所述目标采集器进行调用,以通过所述目标采集器,采集到与所述目标软件关联的许可证信息。
2.根据权利要求1所述的方法,其特征在于,还包括:
获取所述目标软件关联的工程文件,其中,所述工程文件与所述目标软件的编程语言适配;
所述对所述目标采集器进行调用,以通过所述目标采集器,采集到与所述目标软件关联的许可证信息,包括:
对所述目标采集器进行调用,以通过所述目标采集器,针对所述工程文件进行许可证信息采集,得到与所述目标软件关联的许可证信息。
3.根据权利要求2所述的方法,其特征在于,在所述目标软件的编程语言是java的情况下,所述目标采集器为java采集器;
所述通过所述目标采集器,针对所述工程文件进行许可证信息采集,得到与所述目标软件关联的许可证信息,包括:
通过所述java采集器,获取所述工程文件中的至少一个目标采集文件,并于所述至少一个目标采集文件内进行许可证信息采集,得到与所述目标软件关联的许可证信息。
4.根据权利要求3所述的方法,其特征在于,所述于所述至少一个目标采集文件内进行许可证信息采集,得到与所述目标软件关联的许可证信息,包括:
按照预先设置的文件采集顺序,从所述至少一个目标采集文件中确定当前采集文件,并于所述当前采集文件内进行许可证信息采集;
在于所述当前采集文件内采集失败的情况下,按照所述文件采集顺序,从所述至少一个目标采集文件中确定出所述当前采集文件的下一采集文件,并将所述下一采集文件更新为所述当前采集文件;
重复执行所述于所述当前采集文件内进行许可证信息采集的步骤;
在于所述当前采集文件内采集成功的情况下,将成功采集到的许可证信息,作为与所述目标软件关联的许可证信息。
5.根据权利要求2所述的方法,其特征在于,在所述目标软件的编程语言是c++的情况下,所述目标采集器为c++采集器;
所述通过所述目标采集器,针对所述工程文件进行许可证信息采集,得到与所述目标软件关联的许可证信息,包括:
通过所述c++采集器,针对与所述目标软件对应的包管理器,获取所述包管理器的类型和版本,并确定与所述类型和所述版本对应的采集命令;
检测所述采集命令的执行环境,于所述执行环境下通过执行所述采集命令,针对所述工程文件进行许可证信息采集,得到所述目标软件关联的许可证信息。
6.根据权利要求2所述的方法,其特征在于,在所述目标软件的编程语言是javascript的情况下,所述目标采集器为javascript采集器;
所述通过所述目标采集器,针对所述工程文件进行许可证信息采集,得到与所述目标软件关联的许可证信息,包括:
通过所述javascript采集器,获取节点模块目录,并基于所述节点模块目录,从所述工程文件中查询到节点模块;
于所述节点模块中的包文件内进行许可证信息采集,得到与所述目标软件关联的许可证信息。
7.根据权利要求2所述的方法,其特征在于,在所述目标软件的编程语言是python的情况下,所述目标采集器为python采集器;
所述通过所述目标采集器,针对所述工程文件进行许可证信息采集,得到与所述目标软件关联的许可证信息,包括:
通过所述python采集器,利用pip命令,获取当前python环境中已安装的依赖包,并检查所述依赖包的安装目录下的许可证文件,其中,所述依赖包为所述目标软件所依赖的组件,所述许可证文件属于所述工程文件;
在于所述安装目录下检查到所述许可证文件的情况下,于所述许可证文件内针对所述依赖包进行许可证信息采集,得到所述目标软件关联的许可证信息。
8.根据权利要求7所述的方法,其特征在于,在所述检查所述依赖包的安装目录下的许可证文件之后,所述通过所述目标采集器,针对所述工程文件进行许可证信息采集,得到与所述目标软件关联的许可证信息,还包括:
在于所述安装目录下未检查到所述许可证文件的情况下,利用python库中的包资源模块,于所述工程文件内针对所述依赖包进行许可证信息采集,得到与所述目标软件关联的许可证信息。
9.根据权利要求2-8中任一所述的方法,其特征在于,还包括:
在通过所述目标采集器采集失败的情况下,调用预先开发出的信息比较器,以通过所述信息比较器,从所述工程文件中查找可代表许可证文件的代表文件,并将所述代表文件中记载的文本信息与预设的许可证信息进行比较,得到所述目标软件关联的许可证信息。
10.根据权利要求9所述的方法,其特征在于,所述将所述代表文件中记载的文本信息与预设的许可证信息进行比较,得到所述目标软件关联的许可证信息,包括:
对所述代表文件中记载的文本信息进行单词拆分,得到至少一个单词;
针对所述至少一个单词中的每个单词,确定所述单词在所述文本信息中的出现次数,并基于所述出现次数,为所述单词赋予权重;
基于所述至少一个单词以及所述至少一个单词分别对应的权重,构成加权词袋,并对所述加权词袋进行加权哈希处理,得到第一哈希值;
基于预设的许可证信息,生成第二哈希值,并通过比较所述第一哈希值和所述第二哈希值,得到与所述目标软件关联的许可证信息。
11.根据权利要求1所述的方法,其特征在于,所述许可证信息包括许可证名称,在所述采集到与所述目标软件关联的许可证信息后,上述方法还包括:
获取预设的符合软件包数据交换规范的至少一个许可证名称;
将所述至少一个许可证名称以及采集到的许可证名称进行匹配,得到规范名称,并将所述规范名称更新为所述采集到的许可证名称。
12.一种许可证信息的采集装置,其特征在于,包括:
编程语言确定模块,用于针对于待进行许可证信息采集的目标软件,确定所述目标软件的编程语言;
目标采集器确定模块,用于针对预先开发出的用于采集许可证信息的至少一个候选采集器,根据所述至少一个候选采集器分别对应的编程语言,从所述至少一个候选采集器中确定出与所述目标软件的编程语言匹配的目标采集器;
许可证信息采集模块,用于对所述目标采集器进行调用,以通过所述目标采集器,采集到与所述目标软件关联的许可证信息。
13.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器执行如权利要求1-11中任一项所述的许可证信息的采集方法。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现如权利要求1-11中任一所述的许可证信息的采集方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310926946.XA CN117149206A (zh) | 2023-07-26 | 2023-07-26 | 许可证信息的采集方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310926946.XA CN117149206A (zh) | 2023-07-26 | 2023-07-26 | 许可证信息的采集方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117149206A true CN117149206A (zh) | 2023-12-01 |
Family
ID=88897640
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310926946.XA Pending CN117149206A (zh) | 2023-07-26 | 2023-07-26 | 许可证信息的采集方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117149206A (zh) |
-
2023
- 2023-07-26 CN CN202310926946.XA patent/CN117149206A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20150220332A1 (en) | Resolving merge conflicts that prevent blocks of program code from properly being merged | |
CN107506256B (zh) | 一种崩溃数据监控的方法和装置 | |
CN108494622A (zh) | 监控规则配置方法、装置及服务器 | |
CN109450969B (zh) | 从第三方数据源服务器中获取数据的方法、装置和服务器 | |
CN110858172A (zh) | 一种自动化测试代码生成方法和装置 | |
CN111314063A (zh) | 一种基于物联网大数据信息管理方法、系统及装置 | |
CN111124480A (zh) | 应用程序包的生成方法、装置、电子设备及存储介质 | |
CN114116065A (zh) | 获取拓扑图数据对象的方法、装置、及电子设备 | |
CN113641544B (zh) | 用于检测应用状态的方法、装置、设备、介质和产品 | |
CN114328029B (zh) | 一种应用资源的备份方法、装置、电子设备及存储介质 | |
CN116881156A (zh) | 一种自动化测试方法、装置、设备及存储介质 | |
CN110147223B (zh) | 组件库的生成方法、装置及设备 | |
CN110719200A (zh) | 信息识别方法和装置 | |
CN112433757A (zh) | 一种确定接口调用关系的方法和装置 | |
CN117149206A (zh) | 许可证信息的采集方法、装置、电子设备及存储介质 | |
CN111736848B (zh) | 包冲突定位方法、装置、电子设备及可读存储介质 | |
CN112596814B (zh) | 项目的集成打包方法、装置、设备、介质和程序产品 | |
CN112989066A (zh) | 数据处理方法和装置、电子设备、计算机可读介质 | |
CN112784596A (zh) | 一种识别敏感词的方法和装置 | |
CN113268987B (zh) | 一种实体名称识别方法、装置、电子设备和存储介质 | |
CN116483735B (zh) | 一种代码变更的影响分析方法、装置、存储介质及设备 | |
CN108536362B (zh) | 用于识别操作的方法、装置及服务器 | |
CN112527802B (zh) | 基于键值数据库的软链接方法及装置 | |
CN116954689A (zh) | 标识生成、标识验证方法、装置、电子设备及存储介质 | |
CN108932263B (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 |