一种判断JAR包是否被引用的方法及设备与流程

文档序号:12719014阅读:1274来源:国知局
一种判断JAR包是否被引用的方法及设备与流程

本发明涉及Java 应用开发领域,尤其涉及一种判断JAR包是否被引用的方法及设备。



背景技术:

JAVA是一种功能全面的面向对象编程语言。因此,JAVA程序通过建立彼此交互作用的软件部件的结构化集合而产生期望效果。这些部件称为对象,并且可以安排在对象类体系结构中,对象类也简称为类。JAVA程序不是直接在计算机的操作系统上运行,而是在JAVA虚拟机JVM上运行,该JAVA虚拟机本身就是在计算机操作系统上运行的程序。由于JAVA的面向对象特性及JVM的标准化,JAVA程序可实现“一次编译,到处执行”的跨平台特性。

在一个应用项目的开发过程中,通常会涉及大量的class 文件,为了便于存储和使用,通常采用JAR 包的形式。JAR(Java Archive)包是JAVA的一种压缩包,也可以认为是一系列class 文件的集合,要在项目中使用某个JAR 包时,需要在用于指定类加载路径的相关参数( 通常是classpath 参数) 中设置所述JAR 包的路径,虚拟机就可以在运行时动态加载所述JAR 包中包含的类。

如今的大型的JAVA应用程序,尤其是JAVA WEB程序,动辄须要引用大量的第三方JAR包,这样虽然可能提高开发效率,但是不当的引用JAR包,很容易引起包冲突。尤其是随着开源框架的兴起,大量框架依赖一系列的组件,但是初学者往往无法分辨哪些是核心JAR包,哪些是附加性的高级功能,于是全部下载引用,经常会出现和另一个框架的某个JAR包冲突的情况。比如经典的开发框架组合struts2 spring2 hibernate3就存在asm.jar等好几个包冲突的情况。

此外,还有一种情况就是开发人员已经不记得曾经添加过某个JAR包,但是这个包是从始至终可能完全就是个多余的。多余的JAR包不仅存在应用风险,而且很多时候JAR包需要spring容器托管,极易导致内存浪费。

现有技术中,通常有经验的开发人员是按照相应JAR包的说明规范来应用,即完全按照说明文档来处理。再或者初学者更多的是完全依靠人力,把JAR包内的所有包和类都和自己的源码一一对比,依次尝试删除被怀疑的JAR,然后编译运行,但是这样太过费时费力,而且也容易出错。



技术实现要素:

针对上述现有技术的缺点,本发明的目的是提供一种判断JAR包是否被引用的方法及设备,通过对比JAVA源文件中引用的外部包和所引用的每个JAR包文件中的包,初步判断哪些包是多余的,从而给与编码人员删除非必要包的建议,不仅给源码程序瘦身,而且也规避了因为JAR包不当引入而引起的包冲突等风险,提高程序安全性。

本发明实施例提供的一种判断JAR包是否被引用的方法,该方法包括:

解压JAR包,建立每个JAR包文件和其中包含的包路径的对应关系;

记录源码所引用的所有的包和类,建立每个类文件和所引用包路径的对应关系;

对比JAR包文件中是否包含源码所引用的包中的任何一个,如是,则该JAR包是必须包,否则为可疑包。

进一步地,上述方法中,解压JAR包之后,还包括:

建立JAR包文件中每个包路径和其中包含的具体的类的对应关系。

进一步地,上述方法中,记录源码所引用的所有的包和类之后,还包括:

建立源码所引用的每个包路径和其中包含的具体的类的对应关系。

进一步地,上述方法中,若解压的JAR包文件的包路径和源码所引用的包路径一致,则比对JAR包文件中是否包含源码所引用的包路径中包含的具体的类,如是,则该JAR包是必须包,否则为可疑包。

进一步地,上述方法中,所述源码所引用的所有类对外部类的引用在头部以import来引用。

本发明实施例提供的一种判断JAR包是否被引用的设备,该设备包括:

JAR包解压器,用于解压JAR包,建立每个JAR包文件和其中包含的包路径的对应关系;

源码阅读器,用于记录源码所引用的所有的包和类,建立每个类文件和所引用包路径的对应关系;

比对器,用于对比JAR包文件中是否包含源码所引用的包中的任何一个,如是,则该JAR包是必须包,否则为可疑包。

进一步地,所述JAR包解压器,还用于:

建立JAR包文件中每个包路径和其中包含的具体的类的对应关系。

进一步地,所述源码阅读器,还用于:

建立源码所引用的每个包路径和其中包含的具体的类的对应关系。

进一步地,所述比对器,还用于:

若解压的JAR包文件的包路径和源码所引用的包路径一致,则比对JAR包文件中是否包含源码所引用的包路径中包含的具体的类,如是,则该JAR包是必须包,否则为可疑包。

进一步地,所述源码阅读器中源码所引用的所有类对外部类的引用在头部以import来引用。

与现有技术相比,本发明从自身源码中输出所依赖的包路径,再从JAR文件中输出已有的包路径,最后比对两个路径从而决定是否将JAR文件列为可疑包。本发明实施例通过对比JAVA源文件中引用的外部包类和所引用的JAR包中的包类,初步判断哪些包是多余的,从而给与编码人员删除非必要包的建议,不仅给源码程序瘦身,而且也规避了因为JAR包不当引入而引起的包冲突等风险,提高了程序的安全性。本发明比对过程自动化,替代手动,提升效率。最终结果虽然只是减少JAR包,但又可能提高性能。同时,也在一定程度上减少了JAR包冲突的可能性。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的一种判断JAR包是否被引用的方法流程图一;

图2为本发明提供的一种解压JAR包的示意图;

图3为本发明提供的一种源码所引用的包和类示例图;

图4为本发明提供的一种判断JAR包是否被引用的方法流程图二;

图5为本发明提供的一种判断JAR包是否被引用的设备结构示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

本发明从自身源码中输出所依赖的包路径,再从JAR文件中输出已有的包路径,最后比对两个路径从而决定是否将JAR文件列为可疑包。本发明实施例通过对比JAVA源文件中引用的外部包类和所引用的JAR包中的包类,初步判断哪些包是多余的,从而给与编码人员删除非必要包的建议,不仅给给源码程序瘦身,而且也规避了因为JAR包不当引入而引起的包冲突等风险,提高了程序的安全性。

下面结合说明书附图对本发明实施例作进一步详细描述。

如图1所示,本发明实施例公开了一种判断JAR包是否被引用的方法,该方法包括:

步骤S101,解压JAR包,建立每个JAR包文件和其中包含的包路径的对应关系;

步骤S102,记录源码所引用的所有的包和类,建立每个类文件和所引用包路径的对应关系;

步骤S103,对比JAR包文件中是否包含源码所引用的包中的任何一个,如是,则该JAR包是必须包,否则为可疑包。

具体的,在上述步骤S101中,JAR包也是一种压缩包,和ZIP压缩包一样也可以解压。例如,JAR文件:test. Jar,使用命令:jar xf xxx. Jar,即可解开看到所有的包结构和包中所有的类,如图2所示。所以只需要一个JAVA运行时,运行JAR命令产生即可。

在上述步骤S102中,源码是指开发者自己写的代码类,记录该源码所引用的所有的包和类。如图3所示,源码:package com. mike,就引用了java.io.*、java.net.*、java.util.*三个包的10来个类。

在上述步骤S103中,绝大多数实际情况下,只要从包这个级别进行对比即可,即对比JAR包文件中是否包含源码所引用的包中的任何一个。例如:一个JAR包文件test. Jar通过解压器输出后,只要包含java.io.*、java.net.*、java.util.*中任何一个,则该JAR包就是必须包,否则,如果test. Jar任何一个都不包含,则列为可疑包。

本发明实施例从自身源码中输出所依赖的包路径,再从JAR文件中输出已有的包路径,最后比对两个路径从而决定是否将JAR文件列为可疑包。

与现有技术相比,本发明比对过程自动化,替代手动,提升效率。最终结果虽然只是减少JAR包,但又可能提高性能。同时,也在一定程度上减少了JAR包冲突的可能性。

具体实施中,本发明实施例可将上述步骤S102置于步骤S101之前,即本发明并不对上述步骤S101和步骤S102的先后顺序予以限定。

可选的,如图4所示,本发明实施例公开了一种判断JAR包是否被引用的方法,该方法包括:

步骤S401,记录源码所引用的所有的包和类,建立每个类文件和所引用包路径的对应关系;

步骤S402,解压JAR包,建立每个JAR包文件和其中包含的包路径的对应关系;

步骤S403,对比JAR包文件中是否包含源码所引用的包中的任何一个,如是,则该JAR包是必须包,否则为可疑包。

本发明实施例通过对比JAVA源文件中引用的外部包类和所引用的JAR包中的包类,初步判断哪些包是多余的,从而给予编码人员删除非必要包的建议,不仅给源码程序瘦身,而且也规避了因为JAR包不当引入而引起的包冲突等风险,提高了程序的安全性。

进一步地,上述方法中,解压JAR包之后,还包括:

建立JAR包文件中每个包路径和其中包含的具体的类的对应关系。

本发明实施例,解压JAR包之后,可以有以下两项输出:

(一)建立每个JAR包文件和其中包含的包路径的对应关系;

(二)建立JAR包文件中每个包路径和其中包含的具体的类的对应关系。

进一步地,上述方法中,记录源码所引用的所有的包和类之后,还包括:

建立源码所引用的每个包路径和其中包含的具体的类的对应关系。

本发明实施例,记录源码所引用的所有的包和类之后,可以有以下两项输出:

(一)建立每个类文件和所引用包路径的对应关系;

(二)建立源码所引用的每个包路径和其中包含的具体的类的对应关系;

进一步地,上述方法中,若解压的JAR包文件的包路径和源码所引用的包路径一致,则比对JAR包文件中是否包含源码所引用的包路径中包含的具体的类,如是,则该JAR包是必须包,否则为可疑包。

实施中,本发明实施例,如果发现有两个JAR文件有一样的包路径(这种情况较少出现),就须要从类这个级别进行对比,即比对JAR包文件中是否包含源码所引用的包路径中包含的具体的类。如图2和 3所示,例如:test1.jar和test2.jar通过解压输出后,都包含java.net.*包,那么,test1.jar和test2.jar应该列为待定。继续启动类级别比对,其中,test1.jar和test2.jar哪个包含java.net.URI和java.net.HttpURLConnection,则为必须包,另一个则为可疑包。

进一步地,上述方法中,所述源码所引用的所有类对外部类的引用在头部以import来引用。

本发明实施例,按照JAVA编码规范,所有类对外部类的引用通通在头部以import来引用,所以,只要读取头部以import开头的所有行即可。

需要注意的是,本发明实施例仅输出一个可能不被引用的建议,并非是一个确定的值。有些时候JAR包未必是在类中引用,有可能是在运行后加载;也可能是在配置文件中由容器(例如spring框架的容器)引用的,这两点都不能漏掉;此外,所引用的JAR包虽然不被自身开发的源码直接引用,但是有可能它们自身之间有循环引用。所以,不可贸然删除操作,需要反复测试。

基于相同的技术构思,本发明实施例还提供一种判断JAR包是否被引用的设备,该设备可执行上述方法实施例,由于该设备解决问题的原理与前述一种判断JAR包是否被引用的方法相似,因此该设备的实施可以参见方法的实施。

如图5所示,本发明实施例提供的一种判断JAR包是否被引用的设备,该设备包括:

JAR包解压器501,用于解压JAR包,建立每个JAR包文件和其中包含的包路径的对应关系;

源码阅读器502,用于记录源码所引用的所有的包和类,建立每个类文件和所引用包路径的对应关系;

比对器503,用于对比JAR包文件中是否包含源码所引用的包中的任何一个,如是,则该JAR包是必须包,否则为可疑包。

具体的,JAR包也是一种压缩包,和ZIP压缩包一样也可以解压。例如,JAR文件:test. Jar,使用命令:jar xf xxx. Jar,即可解开看到所有的包结构和包中所有的类。所以只需要一个JAVA运行时,运行JAR命令产生即可。

源码是指开发者自己写的代码类,源码阅读器502是一个简单的记录器,记录了该源码所引用的所有的包和类。例如,源码:package com. mike,引用了java.io.*、java.net.*、java.util.*三个包的10来个类。

在绝大多数实际情况下,比对器503只要从包这个级别进行对比即可,即对比JAR包文件中是否包含源码所引用的包中的任何一个。例如:一个JAR包文件test. Jar通过解压器输出后,只要包含java.io.*、java.net.*、java.util.*中任何一个,则该JAR包就是必须包,否则,如果test. Jar任何一个都不包含,则列为可疑包。

本发明实施例从自身源码中输出所依赖的包路径,再从JAR文件中输出已有的包路径,最后比对两个路径从而决定是否将JAR文件列为可疑包。

与现有技术相比,本发明比对过程自动化,替代手动,提升效率。最终结果虽然只是减少JAR包,但又可能提高性能。同时,也在一定程度上减少了JAR包冲突的可能性。

进一步地,所述JAR包解压器501,还用于:

建立JAR包文件中每个包路径和其中包含的具体的类的对应关系。

本发明实施例,所述JAR包解压器501,用于:

(一)建立每个JAR包文件和其中包含的包路径的对应关系;

(二)建立JAR包文件中每个包路径和其中包含的具体的类的对应关系。

进一步地,所述源码阅读器502,还用于:

建立源码所引用的每个包路径和其中包含的具体的类的对应关系。

本发明实施例,所述源码阅读器502,用于:

(一)建立每个类文件和所引用包路径的对应关系;

(二)建立源码所引用的每个包路径和其中包含的具体的类的对应关系;

进一步地,所述比对器503,还用于:

若解压的JAR包文件的包路径和源码所引用的包路径一致,则比对JAR包文件中是否包含源码所引用的包路径中包含的具体的类,如是,则该JAR包是必须包,否则为可疑包。

实施中,本发明实施例,如果发现有两个JAR文件有一样的包路径(这种情况较少出现),所述比对器就须要从类这个级别进行对比,即比对JAR包文件中是否包含源码所引用的包路径中包含的具体的类。例如:test1.jar和test2.jar通过解压输出后,都包含java.net.*包,那么,test1.jar和test2.jar应该列为待定。继续启动类级别比对,其中,test1.jar和test2.jar哪个包含java.net.URI和java.net.HttpURLConnection,则为必须包,另一个则为可疑包。

进一步地,所述源码阅读器502中源码所引用的所有类对外部类的引用在头部以import来引用。

本发明实施例,按照JAVA编码规范,所有类对外部类的引用通通在头部以import来引用,所以,源码阅读器只要读取头部以import开头的所有行即可。

综上,本发明从自身源码中输出所依赖的包路径,再从JAR文件中输出已有的包路径,最后比对两个路径从而决定是否将JAR文件列为可疑包。本发明实施例通过对比JAVA源文件中引用的外部包类和所引用的JAR包中的包类,初步判断哪些包是多余的,从而给与编码人员删除非必要包的建议,不仅给给源码程序瘦身,而且也规避了因为JAR包不当引入而引起的包冲突等风险,提高了程序的安全性。本发明比对过程自动化,替代手动,提升效率。最终结果虽然只是减少JAR包,但又可能提高性能。同时,也在一定程度上减少了JAR包冲突的可能性。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1