Maven scope属性:
1.compile
compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath 中可用,同时它们也会被打包(编译运行,测试编译运行(测试环境))。
2.provided
provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用(编译需要,运行是外部提供)。例如, 如果你开发了一个web 应用,你可能在编译 classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;这个Servlet API JAR 由你的应用服务器或者servlet 容器提供。已提供范围的依赖在编译classpath (不是运行时)可用。它们不是传递性的,也不会被打包。
3.runtime
runtime 依赖在运行的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动。这种主要是指代码里并没有直接引用而是根据配置在运行时动态加载并实例化的情况(就是通过反射实例化,并没有参加编译,如runtime 用在 Class.forName(“com.mysql.jdbc.Driver”))。
4.test
test范围依赖 在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
5.system
system是系统范围依赖与provided比较相似,在编译需要,运行阶段不需要。但是它必须要一个显示的路径,也就是JAR在磁盘上的路径。这么做是为了允许基于本地对象编译。Maven 也不会在本地仓库或者中央仓库中去寻找它。如果将一个依赖范围设置成系统范围,那就必须同时提供一个<systemPath></systemPath>元素,其中是JAR在磁盘的位置。该范围一般是不推荐使用的,最好去从公共或本地的 Maven 仓库中引用依赖。
5.import
import为导入一个pom文件的依赖,因为maven是单依赖的,直接导入一个pom将里面所有的依赖关系全部导入,仅支持在<dependencyManagement>中的类型依赖项,也就是一个版本管理。必须添加<type>而且类型为<type>pom</type>.
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
通过上面方式,就可以获取spring-boot-dependencies.2.0.1.BUILD-SNAPSHOT的.pom文件中dependencyManagement配置的jar包依赖。