SCOPE是什么?
SCOPE用于说明依赖的范围,用于控制哪些依赖在CLASSPATH中可用,哪些依赖会包含在应用中。
<scope>runtime</scope>,在运行和测试时需要
<optional>true</optional>,option标签的作用是让依赖只被当前项目使用,而不会在模块间进行传递依赖。
SCOPE属性范围有哪些?
1.compile(编译):MAVNE默认的依赖范围。如果没有提供一个范围,那该依赖的默认范围就是编译范围。编译范围的依赖在所有的classpath中可用,同时它们也会被打进包中;
2.provided(已提供):当JDK或者一个容器中已提供该依赖时,在引入依赖时才使用provided属性。例如,如果你开发了一个web应用,你可能在编译classpath中需要可用的Servlet API来编译一个servlet,但是你不想在打包好的JAR/WAR中包含这个Servlet API, 这个Servlet API的相关JAR包已经在你的应用服务器或者servlet容器提供。已提供范围的依赖在编译classpath可用,不是运行是可用,它们不是传递性的,也不会被打进包中;
3.runtime(运行时): 在运行和测试时需要,但在编译时不需要。例如,你可能在编译的时候只需要JDBC API的相关JAR包,而只有在运行的时候才需要JDBC的驱动实现包。
4.test(测试):在一般的编译和运行时都不需要,它们只有在测试编译和测试运行时需要。
5.system(系统):与provided类似,用于通过本地目录寻找相应的依赖,使用该属性时必须显式通过systemPath元素,提供一个本地系统中JAR文件的路径,Maven也不会再去仓库中去寻找相关依赖。当基于本地对象编译或者MAVEN仓库中没有对应的依赖时可以使用这种方式。该范围是不推荐使用的(建议尽量去从公共或定制的Maven 仓库中引用依赖)。
6.import(导入):仅仅支持在<dependencyManagement>标签内使用生效,且仅用于type=pom的dependency。如果想表达将spring-boot-dependencies工程中,在dependencyManagement标签内的所有的dependencies,全部引入到当前工程的dependencyManagement中,则使用以下配置:
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.12.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>