当前位置: 首页 > news >正文

统计分析工程的依赖项

统计分析工程的依赖项

最近在完成自己的想为自己的开源项目application-center增加一个功能:

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

应用场景

为什么我想增加一个这个功能呢?设想一下:

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

大致思路

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

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

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

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

显然第一种实现思路会比较复杂,因为需要寻找到工程中所有的pom文件,然后需要去解析每个pom文件中的两个标签,然后合并去重等等的一系列操作,比较麻烦。

而第二种就比较取巧了,实现起来比较简单。因此我们采用第二种思路去实现

具体实现

思路明确以后,实现起来非常简单,核心代码只有下面几行:

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

这样我们就会得到一个列表,这个列表就是工程的依赖项

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,.....

相关文章:

  • Java使用SSLSocket通信
  • Open-E DSS V7 应用系列之一 系统简介
  • iOS开发之深复制和浅复制
  • 不要在要序列化的dto中随便写getter方法
  • 获取request和response
  • pfx证书与cer证书的区别
  • mysql互换表中两列数据方法
  • ASP.NET Core 指定环境发布(hosting environment)
  • [android] 手机卫士黑名单功能(ListView优化)
  • sqlserver去重复数据
  • Quartz学习总结(1)——Spring集成Quartz框架
  • Gearman + PHP 实现分布式对象调用
  • JAVA数据库编程
  • DEDECMS之三 首页、列表页怎么调用文章内容
  • 在opencv中实现中文输出
  • android 一些 utils
  • gf框架之分页模块(五) - 自定义分页
  • git 常用命令
  • happypack两次报错的问题
  • java8-模拟hadoop
  • java概述
  • Map集合、散列表、红黑树介绍
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • spring学习第二天
  • 彻底搞懂浏览器Event-loop
  • 简单易用的leetcode开发测试工具(npm)
  • 配置 PM2 实现代码自动发布
  • ​io --- 处理流的核心工具​
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • (4)logging(日志模块)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (分布式缓存)Redis分片集群
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (黑马C++)L06 重载与继承
  • (汇总)os模块以及shutil模块对文件的操作
  • (七)Java对象在Hibernate持久化层的状态
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (算法设计与分析)第一章算法概述-习题
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)插入排序
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • .Net 8.0 新的变化
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET 中的轻量级线程安全
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET6实现破解Modbus poll点表配置文件
  • .net程序集学习心得
  • .net和jar包windows服务部署
  • .net与java建立WebService再互相调用
  • .Net语言中的StringBuilder:入门到精通
  • .net中应用SQL缓存(实例使用)
  • @angular/cli项目构建--http(2)