定義
構件:在Maven中,任何依賴(jar包,tomcat等),或項目(本身打包的jar,war等)輸出均可成爲構件。每一個構件都有本身的惟一標識(惟一座標),由groupId,artifactId,和version等信息構成,由此,Maven就能夠對構件進行版本控制,管理。java
- groupId:當前Maven構件隸屬的項目名。實際開發中,項目每每會模塊化開發,如spring-core,spring-aop等,他們都是Spring項目下不一樣的模塊。命名方式與Java包名相似,一般是域名的反向書寫。如ch.qos.logback,事實上項目管理組織的網址是:http://logback.qos.ch/ 。(必須)
- artifactId:隸屬項目中的模塊名。(必須)
- version:當前版本。(必須)
- packaging:打包方式,如jar,war... (必須)
- classifier:幫助定義構建輸出的一些附屬構件。如spring-core.jar,還生成有文檔javadoc.jar,源碼sources.jar。
特性
- 構件具備依賴傳遞。例如:項目依賴構件A,而構件A又依賴B,Maven會將A和B都視爲項目的依賴。
- 構件之間存在版本衝突時,Maven會依據 「短路優先」 原則加載構件。此外,咱們也能夠在POM.XML中,使用<exclusions></exclusions>顯式排除某個版本的依賴,以確保項目可以運行。
- 項目依賴構件A和B,構件A → C → D(version:1.0.0),構件B → D(version:1.1.0),此時,Maven會優先解析加載D(version:1.1.0)。
- 項目依賴構件A和B,構件A → D(version:1.0.0), 構件B → D(version:1.1.0),此時,Maven會優先解析加載D(version:1.0.0)。
- 構件的依賴範圍。Maven在項目的構建過程當中,會編譯三套classpath,分別對應:編譯期,運行期,測試期。而依賴範圍,就是爲構件指定它能夠做用於哪套classpath。
|
編譯期 |
測試期 |
運行期 |
說明 |
compile |
√ |
√ |
√ |
默認範圍 |
provided |
√ |
√ |
|
如servlet-api.jar,運行期由web容器提供 |
runtime |
|
√ |
√ |
編譯期無需直接引用。 |
test |
|
√ |
|
如junit.jar |
system |
√ |
√ |
|
必須經過 <systemPath></systemPath> 元素,顯示指定依賴文件的路徑,與本地系統相關聯,可移植性差。web |
import |
|
|
|
表示繼承父POM.XML中的依賴範圍設置 |