从公司gitlab获取所有依赖的jar包坐标

本文档介绍了如何通过GitLab API获取公司所有Java项目的依赖Jar包坐标,以解决安全专员需要快速查找项目依赖并监控潜在安全漏洞的问题。文中详细描述了从最初的直接从GitLab拷贝代码到改进后的通过API获取项目信息和依赖的过程,并提供了相关代码片段和执行策略。
摘要由CSDN通过智能技术生成

从公司gitlab获取所有java项目依赖的jar包坐标

背景

公司“安全专员”想方便的拿到公司所有java项目依赖的jar包坐标,方便他从“论坛”上发现什么jar存在安全漏洞时,及时知道我们公司是否也有对该jar包的依赖,以及对应的项目和负责人。

分析

我们内部代码管理工具是gitlab,采用master分支发布,只需分析master依赖即可。

思路是先拿到所有项目的代码,然后通过maven dependency插件获取到依赖的jar包坐标,然后分析出其中jar包坐标整理到文档中。最好也拿到项目的负责人信息。

初步想到步骤:

  1. 从内部gitlab机器用盘上拷贝
  2. 执行mvn dependency:tree --log-file xxx
  3. 从产生的日志中分析出依赖的jar坐标

这个想想都觉得慢的受不了,好几个G的小文件,光从用盘上拷贝都要花费不少时间。

另外直接执行maven dependency:tree也不能成功,因为依赖的本项目中的其他module不存在,需要先打包。

另外拿不到项目负责人信息。

改进版本一:

  1. 通过gitlab api拿到所有项目信息,包括负责人信息,每个执行git clone xxx得到所有代码,再次执行时执行git pull origin master
  2. 执行mvn clean package -Dmaven.test.skip=true -Dmaven.javadoc.skip=true dependency:tree --log-file xxx
  3. 从产生的日志中分析出依赖的jar坐标

能够拿到应用负责人信息,但仍然慢的让人崩溃。

另外有些项目执行mvn package因为代码原因会失败,导致mvn dependency:tree无法继续执行。

改进版本二:

  1. 通过gitlab api拿到所有项目信息,包括负责人信息, 通过gitlab api下载每个项目master分支中的所有pom.xml
  2. 对于根目录存在pom.xml的项目执行mvn install -f xxx/xxx/pom.xml,web模块通常会失败,不过没关系, 其他模块成功就行。
  3. 执行mvn dependency:tree -f xxx/xxx/pom.xml
  4. 使用apachecommons-exec执行dependency:tree命令,同时分析产生的日志。

第二步对只有pom.xml的项目执行mvn installweb模块通常会失败,不过没关系,需要的是其他模块,因为执行mvn dependency:treeweb模块需要依赖到其他模块。

一两百个java项目,2核的机器20多分钟跑完,产生结果,基本满意。
也可以继续优化下,借助jprofiler等工具找到耗时点、调整执行线程池大小等。

代码

maven依赖

 <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-exec</artifactId>
            <version>1.3</version>
        </dependency>
        <dependency>
            <groupId>org.gitlab4j</groupId>
            <artifactId>gitlab4j-api</artifactId>
            <version>4.4.3</version>
        </dependency>

代码片段说明

Pattern pattern = Pattern.compile("(([\\w\\-\\.\\d]+):([\\w\\-\\.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值