# Scope 的作用

概述:

Maven 中使用 scope 来指定当前包的依赖范围和依赖的传递性。常见的可选值有: complie、provide、runtime、test、system 等

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>3.2.1.RELEASE</version>
            <scope>test</scope>
        </dependency>

# scope 取值

  • complie
    • 范围:all
    • 依赖传递:是
    • 例子:spring-core
    • 详解:complie 为默认的依赖有效范围。如果没有明确指定依赖有效范围的花,则默认采用该值。在编译、运行、测试时均有效
  • provided
    • 范围:complie、test
    • 依赖传递:否
    • 例子:servlet-api
    • 详解:provided 在编译、测试时有效,但是在运行时无效。例如 servlet-api 依赖,在部署到 tomcat 服务器中,容器已经提供了,就不再需要 maven 重复引入了
  • runtime
    • 范围:runtime、test
    • 依赖传递:是
    • 例子:JDBC 驱动
    • 详解:runtime 在运行、测试时有效,但是在编译时无效。例如 JDBC 的驱动实现
  • test
    • 范围:test
    • 依赖传递:否
    • 例子:JUnit
    • 详解:只在测试时有效,例如 Junit
  • system
    • 范围:complie、test
    • 依赖传递:是
    • 例子:
    • 详解:system 在编译、测试时有效,但是在运行时无效。与 provided 的区别是,使用 system 范围依赖时,必须通过 systemPath 元素显示指定依赖文件的路径。此依赖时通过本机绑定的,不可移植使用,因此要谨慎使用。systemPath 元素可以引用环境变量。例如:
              <dependency>
                  <groupId>javax.sql</groupId>
                  <artifactId>jdbc-stdext</artifactId>
                  <version>2.0</version>
                  <scope>system</scope>
                  <systemPath>${java.home}/lib/rt.jar</systemPath>
              </dependency>
      

在编译或者是运行时有效的范围依赖,在打包时会一起打包