统计分析工程的依赖项

统计分析工程的依赖项

最近在完成本身的想为本身的开源项目application-center增长一个功能:java

  • 统计某个jar在哪些工程中被使用
  • 统计某个版本的jar在哪些工程中被使用

应用场景

为何我想增长一个这个功能呢?设想一下:tomcat

某个开源项目的某个版本的代码出现bug或者存在严重的安全隐患,咱们想在整个公司层面禁止使用这个开源项目的这个版本。须要知道有哪些工程使用了这个版本的jar。安全

大体思路

为了解决上面提出的问题,咱们的解决思路会是app

  • 知道每一个工程的依赖项
  • 而后在查找这个工程是否依赖了某个版本的jar

思路很清晰,其实上面两步的重点就是如何知道每一个工程的依赖项,有两种思路:rest

  • 第一种办法是:解析project中的pom.xml文件,分析其中的<dependencyManagement><dependencies>标签,获得工程的依赖项
  • 第二种办法是:由于我这边的工程所有是采用tomcat来运行的,所以能够访问project的/WEB-INF/lib/目录,获得依赖的jars的名称

显然第一种实现思路会比较复杂,由于须要寻找到工程中全部的pom文件,而后须要去解析每一个pom文件中的两个标签,而后合并去重等等的一系列操做,比较麻烦。code

而第二种就比较取巧了,实现起来比较简单。所以咱们采用第二种思路去实现xml

具体实现

思路明确之后,实现起来很是简单,核心代码只有下面几行:ci

@Resource
    private ServletContext servletContext;
    
    public List<String> getJarInfos() {
        String realPath = servletContext.getRealPath("/WEB-INF/lib/");
        return Lists.newArrayList(new File(realPath).list());
    }

这样咱们就会获得一个列表,这个列表就是工程的依赖项get

aopalliance-1.0.jar, c3p0-0.9.1.2.jar, classmate-1.1.0.jar, commons-lang3-3.4.jar, ecj-4.4.2.jar, guava-18.0.jar, hamcrest-core-1.3.jar,.....
相关文章
相关标签/搜索