Maven依赖简介之依赖范围

    首先贴出maven依赖配置语法java

<dependencies>
  	<dependency>
  		<groupId></groupId>
  		<artifactId>spring-core</artifactId>
  		<version></version>
  	    <type></type>
        <scope></scope>
        <optional></optional>
        <exclusions>
          <exclusion>
          </exclusion>
        <exclusions>
    </dependency>
</dependencies>

    groupId,artifactId,version就再也不介绍了,这是基本坐标。spring

    type为依赖的类型,scope依赖的范围,optional标记依赖是否可选,exclusions用来排除传递性依赖。api

    基础概念如上,今天重点理解依赖的范围。maven

    在maven构建的时候,会有三套classpath(就比如java的classpath)。在编译项目主代码的时候会用到一套classpath,在进行编译和测试的时候也会用到一套classpath,在真正运行的时候,也会用到一套classpath。ide

    依赖的范围有如下几种:compile,test,provided,runtime,system,import。测试

    其中system通常不推荐,由于从字面意思就能够了解到引用了系统的环境变量,因此极可能不具有可移植性。spa

    compile是默认的依赖范围。在没有写scope的时候,就是指定了compile范围。code

    test,测试依赖范围。在我以前使用maven的时候,junit的scope就是test。xml

    provided,已提供的依赖范围。此依赖在编译和测试classpath有效,在运行时无效。就行servlet api,编译的时候用到了,运行的时候就不须要了。接口

    runtime,运行时依赖范围。此依赖在测试和运行的时候有效,可是在编译的时候无效。就像jdbc驱动,项目主代码的编译只须要提供jdk提供的jdbc驱动,只有在执行测试或者运行项目的时候才须要实现上述接口的具体jdbc驱动。

    import,导入依赖范围。(暂时没学到)

scope 编译   测试 运行 example
compile Y   Y     Y spring-core
test --      Y -- JUnit
provided Y Y -- servlet-api
runtime -- Y Y JDBC驱动实现
system Y Y -- 本地的,maven仓库以外的类库文件
相关文章
相关标签/搜索