天天看點

maven 排除pom依賴_Maven dependency插件 排除依賴

依賴排除

最近在建構項目的時候,由于新引入了第三方包導緻項目build失敗,build log資訊如下:

maven 排除pom依賴_Maven dependency插件 排除依賴

失敗原因顯而易見,新引入的第三方包的依賴中有我們禁止的依賴,是以導緻build失敗。但是build日志資訊并沒有告訴我們是哪個第三方包的引入導緻建構失敗的,但是build資訊提示我們使用 dependency:tree來檢視項目依賴情況,以便找到root cause。

maven中一個專門用于依賴處理相關的插件: maven-dependency-plugin

tree:以樹形的形式顯示項目的依賴資訊

sources:解析依賴對應的附件和源代碼;

analyze:分析哪些依賴 申明且被使用 未申明被使用 未使用被聲明等情況;

.....

運作指令

mvn dependency:tree

maven 排除pom依賴_Maven dependency插件 排除依賴

經過一頓騷操作最終定位到引入禁止依賴的三方包,接下來就是如何排除該依賴了。

在pom檔案中顯式的排除該被禁止的依賴

如下所示(示意):

com.google.protobuf

protobuf-java-util

3.5.1

x.y.z

abc

本次依賴排除的正是令人頭疼的日志相關的jar包,slf4j-log4j12.jar,由于該項目使用的是指定的日志架構,是以顯式的禁止了其他三方包中引入的日志依賴,我們都知道常見的日志

架構有log4j, logback, java util log等,還有統一的日志抽象層slf4j,且類路徑下的不同的日志架構jar包會存在影響,是以在處理依賴的時候,大部分都在處理日志架構的沖突。關于slf4j, logback, log4j, java util log之間的聯系後面有機會再總結一篇部落格吧。

依賴分析

mvn dependency:analyze

maven 排除pom依賴_Maven dependency插件 排除依賴

該插件goal列出了未使用的依賴等資訊。

dependency 和 dependencyManagement

父pom中的dependencies,對全局的孩子pom生效,即使孩子pom不顯式的引入依賴。

而 dependencyManagement 主要是用于統一管理一些公共依賴的版本,子pom需要使用其中的依賴,還是需要顯式的聲明依賴,隻是不需要聲明版本号。

POM中大量存在引用的概念,pom檔案也可以作為一種特殊的依賴,并引入到pom中作為依賴。

maven 排除pom依賴_Maven dependency插件 排除依賴