在Maven中依賴的域有:compile、provided、runtime、system、test、importjava
1、compile(默認)web
當依賴的scope爲compile的時候,那麼當前這個依賴的包,會在編譯的時候被加入進來,而且在打包(mvn package)的時候也會被加入進來。
編譯範圍有效,在編譯與打包時都會加入進去。spring
2、providedapi
當依賴的scope爲provided的時候,在編譯和測試的時候有效,在執行(mvn package)進行打包時不會加入。好比, 咱們開發一個web應用,在編譯時咱們須要依賴servlet-api.jar,可是在運行時咱們不須要該 jar包,由於這個jar 包已由web服務器提供,若是在打包時又被加入進去,那麼就可能產生衝突。此時咱們就可使用 provided 進行範圍修飾。springboot
3、system服務器
與provided相同,不過被依賴項不會從maven倉庫獲取,而是從本地文件系統拿,須要配合systemPath屬性使用。好比:maven
<dependency> <groupId>org.open</groupId> <artifactId>open-core</artifactId> <version>1.5</version> <scope>system</scope> <systemPath>${basedir}/WebContent/WEB-INF/lib/open-core.jar</systemPath> </dependency>
4、runtimeide
當依賴的scope爲runtime的時候,在運行的時候纔會依賴,在編譯的時候不會依賴。好比,在編譯的時候咱們不須要JDBC API的jar包,而在運行的時候咱們才須要JDBC驅動包。就可使用runtime修飾。spring-boot
5、test測試
當依賴的scope爲test的時候,指的的是在測試範圍有效,在編譯與打包的時候都不會使用這個依賴。
6、import
maven多模塊項目結構中,可使用parent 定義父項目,實現從父項目中繼承依賴。但maven只能單繼承,即一個項目只能使用一個parent標籤訂義父項目。
maven2.9以後的版本引入了一個新的功能,能夠實現依賴上的多重繼承。這個功能能夠將依賴配置複雜的pom文件拆分紅多個獨立的pom文件。這樣處理可使得maven的pom配置更加簡潔,同時能夠複用這些pom依賴。
好比,咱們在開發spring boot 項目的時候,pom中會有以下配置:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.3.RELEASE</version> </parent>
可是,若是該項目是個maven子模塊的話,就會出現問題。因爲maven相似java是單繼承,不能有兩個parent,如今<parent></parent>標籤已經用來引用父模塊,如今又用來引用springboot,就會產生衝突。
那解決辦法就是:使用dependencyManagement引入dependency,而且把scope屬性改成import。以下:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.6.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
注意:scope的import 屬性只能在<dependencyManagement> 中使用,表示從其它的pom文件中導入dependency配置。
https://www.jianshu.com/p/584d28186ea0 //maven經常使用配置