Maven座標和依賴

概述

Maven的一個重要的功能就是管理項目依賴。爲了能夠解析任何一個java構件,Maven就需要將它們唯一標識,這就是依賴管理的基礎------座標。

座標詳解

Maven座標是通過一系列元素來定義的,比如:groupId, artifactId, version, packaging, classifier。
例如:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>3.0.6.RELEASE</version>
</dependency>

groupId: 定義了當前Maven項目隸屬的實際項目。通常一個項目被劃分成多個模塊。groupId表示方式:通常與域名一一反向對應。
artifactId: 定義了實際項目中的一個Maven項目(模塊),推薦使用實際項目名作爲前綴。可以參靠SpringFramework的模塊命名。
version:該元素定義了當前Maven項目所處的版本。
packaging:該元素定義了Maven項目的打包方式。如果不定義packaging的時候,默認值爲jar。還有別的方式,如war。
classifier:該元素用來幫助定義構建輸出的一些附屬構件。例如利用一些插件,可以生成附屬構件,可以包括Java文檔和源代碼。注意,不能直接定義項目的classifier,因爲附屬構件不是項目直接默認生成的,而是由附加的插件幫助生成。

groupId,artifactId,version是必須定義的。packaging可選項。classifier 不可選的。

依賴的配置

根元素project下的dependencies可以包含一個或多個dependency元素,以聲明一個或多個項目依賴。
在pom.xml中進行配置,
在project元素下進行配置依賴:

<dependencies>
	<dependency>
		<groupId>...</groupId>
		<artifactId>...</artifactId>
		<version>...</version>
		<type>...</type>
		<scope>...</scope>
		<optional>...</optional>
		<exclusions>
			<exclusion>
			...
			</exclusion>
			
			...
		</exclusions>
	</dependency>
	
	...
</dependencies>

type:依賴的類型,一般不用聲明,默認爲jar。
scope:依賴的範圍,下面有介紹
optional:標記依賴是否可選
exclusions:用來排除傳遞性依賴

依賴範圍

就是用來控制依賴與三種classpath的關係(編譯classpath,測試classpath,運行classpath)

compile:編譯依賴範圍。如果沒有指定,就會默認使用該依賴範圍,該依賴範圍對於編譯,測試,運行都有效。
test:測試依賴範圍。只能適用與測試範圍,在編譯主代碼或運行項目時無效。
runtime:運行時依賴範圍。對於測試和運行classpath有效,但在編譯主代碼時無效。例如JDBC驅動實現。
provided:已提供依賴範圍。對於測試和編譯classpath有效,但在運行時無效。例如servlet-api。
system:系統依賴範圍。與三種classpath都有關係。

傳遞性依賴

舉例來說,我們在項目中使用Spring Framework時,需要在POM文件中寫對Spring的依賴(例如:spring-core),在本地倉庫中,它也是有自己的pom文件,這裏面就定義了該子項目或者jar包的依賴。Maven會解析各個直接依賴的pom,將那些必要的間接依賴,以傳遞性依賴的方式引入到當前項目。

傳遞性依賴和依賴範圍

例如:A依賴於B,B依賴於C,那麼A對於B來說是第一直接依賴,B對於C來說是第二直接依賴,A對於C來說就是傳遞性依賴。
依賴範圍,需要着重理解。

依賴調節

一共有兩個原則:
第一原則:路徑最近者優先
第二原則:從2.0.9版本開始,第一聲明者優先

最佳實踐

  1. 排除依賴
    使用exclusions元素聲明排除依賴
  2. 歸類依賴
    使用美元符號和大括號環繞的方式引用Maven屬性
  3. 優化依賴
    查看當前項目的已解析依賴,用下面的命令:
    mvn dependency:list
    
    查看當前項目的依賴樹,用下面的命令:
    mvn dependency:tree
    
    幫助分析當前項目的依賴,命令如下:
    mvn dependency:analyze
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章