在Maven中依賴的域有:compile、provided、runtime、system、test、import
一、compile(默認)
當依賴的scope為compile的時候,那么當前這個依賴的包,會在編譯的時候被加入進來,並且在打包(mvn package)的時候也會被加入進來。
編譯范圍有效,在編譯與打包時都會加入進去。
二、provided
當依賴的scope為provided的時候,在編譯和測試的時候有效,在執行(mvn package)進行打包時不會加入。比如, 我們開發一個web應用,在編譯時我們需要依賴servlet-api.jar,但是在運行時我們不需要該 jar包,因為這個jar 包已由web服務器提供,如果在打包時又被加入進去,那么就可能產生沖突。此時我們就可以使用 provided 進行范圍修飾。
三、system
與provided相同,不過被依賴項不會從maven倉庫獲取,而是從本地文件系統拿,需要配合systemPath屬性使用。比如:
<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>
四、runtime
當依賴的scope為runtime的時候,在運行的時候才會依賴,在編譯的時候不會依賴。比如,在編譯的時候我們不需要JDBC API的jar包,而在運行的時候我們才需要JDBC驅動包。就可以使用runtime修飾。
五、test
當依賴的scope為test的時候,指的的是在測試范圍有效,在編譯與打包的時候都不會使用這個依賴。
六、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常用配置