compile(默认)
依赖的包,会在编译的时候被加入进来
并且在打包(mvn package)的时候也会被加入进来。
provided
在编译和测试的时候有效
在执行(mvn package)进行打包时不会加入
比如, 我们开发一个web应用,在编译时我们需要依赖servlet-api.jar,但是在运行时我们不需要该 jar包
因为这个jar 包已由web服务器提供
如果在打包时又被加入进去,那么就可能产生冲突
system
与provided相同
不过被依赖项不会从maven仓库获取,而是从本地文件系统拿,需要配合systemPath属性使用
<dependency><br> <groupId>org.open</groupId><br> <artifactId>open-core</artifactId><br> <version>1.5</version><br> <scope>system</scope><br> <systemPath>${basedir}/WebContent/WEB-INF/lib/open-core.jar</systemPath><br></dependency>
runtime
在运行的时候才会依赖
在编译的时候不会依赖
比如,在编译的时候我们不需要JDBC API的jar包
而在运行的时候我们才需要JDBC驱动包。就可以使用runtime修饰。
test
在测试范围有效,在编译与打包的时候都不会使用这个依赖
import
maven多模块项目结构中,可以使用parent 定义父项目,实现从父项目中继承依赖。但maven只能单继承,<b><font color="#f44336">即一个项目只能使用一个parent标签定义父项目</font></b>
<parent><br> <groupId>org.springframework.boot</groupId><br> <artifactId>spring-boot-starter-parent</artifactId><br> <version>1.3.3.RELEASE</version><br></parent>
但是,如果该项目是个maven子模块的话,就会出现问题。由于maven类似java是单继承,不能有两个parent
maven2.9之后的版本引入了一个新的功能,可以实现依赖上的多重继承
这样处理可以使得maven的pom配置更加简洁,同时可以复用这些pom依赖。
scope的<b><font color="#f44336">import 属性只能在<dependencyManagement> 中使用</font></b>,表示<b><font color="#2196f3">从其它的pom文件中导入dependency配置</font></b>。
<dependencyManagement><br> <dependencies><br> <dependency><br> <groupId>org.springframework.boot</groupId><br> <artifactId>spring-boot-dependencies</artifactId><br> <version>2.1.6.RELEASE</version><br> <b><font color="#f44336"> <type>pom</type><br> <scope>import</scope</font></b>><br> </dependency><br> </dependencies><br></dependencyManagement>
type标签的默认值是jar,代表我们依赖导入的是一个jar包,现在我们<b><font color="#f44336">设置成了pom,说明导入的是一个父模块</font></b>
import代表把父模块中的jar包导入进来
如果scope是import形式的,那么这个dependency不参与依赖传递。
只是把dependency需要的依赖都取过来,像个占位符一样替换了就行。
import配合类型pom来一起使用。import字面意思就是导入
这里就是字如其意,就是把项目(这个项目也是pom类型的项目)中的在<dependencyManagement>标签的中的依赖导入到当前的pom文件中使用
father项目中import了grandpa的项目,其中绿框内的依赖能在father中使用(不加版本号的使用),蓝框中侧不能<br><br>