问题一:我只能得到这个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包依赖冲突,排除后引入新版本的依赖即可