一個(gè)大中型Java項(xiàng)目中,一般由若干個(gè)module組成,各個(gè)module各司其職,擔(dān)任整個(gè)工程中不同角色。大多數(shù)情況下,大多數(shù)module都會用到相同的jar包,或者插件。如果每個(gè)module中都引入自己喜歡的jar、插件,不僅冗余,而且太多冗余jar包,使得資源浪費(fèi)。為了統(tǒng)一管理各個(gè)module中的library jar plugin,讓所有子module都繼承一個(gè)父pom.xml。有同學(xué)說,既然有了繼承,我就直接在pom.xml 的 dependencies中聲明module中需要的library,不就好了!想想如果有一些module中不需要這樣的library,豈不是又要引進(jìn)冗余jar。而dependencyManagement正好解決了這一問題,他在父pom.xml中,不會直接到repository中解析你定義的依賴,而是在子module中,如果你用到了dependencyManagement中聲明的dependency包,這時(shí)你只需要聲明包的groupid, artifactid,即可,因?yàn)閐ependencyManagement已經(jīng)替你定義好了版本version,從而既實(shí)現(xiàn)了版本統(tǒng)一管理,又可以各取所需!
dependencyManagement用于在父項(xiàng)目中統(tǒng)一對子項(xiàng)目依賴管理,在pom的project節(jié)點(diǎn)中定義如下(舉例):
其實(shí),它和dependencyManagement有相似功能,即:由父pom.xml定義該元素,可統(tǒng)一子項(xiàng)目中的插件。引用stackoverflow的問題帖子:
http://stackoverflow.com/questions/10483180/maven-what-is-pluginmanagement
用自己的理解翻譯,ps:讀者可自行翻譯
在你的build中,pluginManagement僅僅是一種在所有module中分享相同插件配置的一種方式。
From Maven document:
pluginManagement: 它是一個(gè)被視作插件的一個(gè)元素。在很多module中,Plugin Management 以相同方式包含插件元素,而不是為某個(gè)特定項(xiàng)目構(gòu)建(build)配置插件信息
它是用來配置從它繼承的項(xiàng)目構(gòu)建(build)??墒?,這僅僅是配置在子module的plugins中確實(shí)引用到的插件。每個(gè)子module都有權(quán)利去覆蓋PluginManagement 的定義。
另:如跟各位有歧義,請不吝賜教,感激!