问题一:我只能得到这个jar包的名字,如果得知这个jar包的maven坐标(groupId以及artifactId)?
思路1:将jar包的名字(去除版本号)在mvn仓库中搜索,地址:https://mvnrepository.com/,看能不能找到
思路2:反编译这个jar包,使用JD-GUI反编译工具
思路3:如果已经在IDEA中,直接定位到当前jar包的位置,
问题二:多模块的java工程中,存在一些依赖冲突,会出现多版本的依赖,比如当前模块1依赖A,A依赖B,当前模块2依赖C,C依赖B的另一个版本,这样打包的过程中会存在多个版本的B,如何解决?
子问题1:究竟是哪些依赖引入了B呢?需要找到是哪些依赖引入B
思路:使用maven命名查找
比如查找com.fasterxml.jackson.core:jackson-databind这个依赖有哪些依赖引入,使用maven命令:
mvn dependency:tree -Dverbose -Dincludes=com.fasterxml.jackson.core:jackson-databind
使用这个命令就能找到所有的引入com.fasterxml.jackson.core:jackson-databind依赖的引入路径。
从结果中可以看到是哪个模块,哪个依赖引入的,以及依赖引入的scope,注意provided不会打包进去,解决这个问题应该是从最基础的模块开始解决。
子问题2:接上一个问题的解答,现在我们已经知道了有很多其他的依赖引入了B的不同版本,由于B的老版本存在CVE漏洞,那么需要升级这个依赖的版本,如何做?
思路:首先需要排除掉多余的依赖引入,可以在相关的依赖上用
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
<!-- 排除低版本的依赖 -->
<exclusions>
<exclusion>
<artifactId>jackson-annotations</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
</exclusion>
<exclusion>
<artifactId>jackson-core</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
</exclusion>
<exclusion>
<artifactId>jackson-databind</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入高版本的依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
IDEA有dependency Analyzer工具,可以方便解决jar包依赖冲突,排除后引入新版本的依赖即可