美文网首页
Maven依赖的范围/作用域

Maven依赖的范围/作用域

作者: 4ea0af17fd67 | 来源:发表于2020-02-05 21:28 被阅读0次

依赖的基本元素

一个dependency的声明可以包含以下元素:

<dependencies>
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>0.8.2.2</version>
        <scope>compile</scope>
        <optional>false</optional> 可选依赖就是optional标签,默认false。
     排除依赖
        <exclusions>
            <exclusion>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>
  • groupId+artifactId+version构成了依赖的基本坐标,Maven根据坐标才能找到依赖。
  • scope定义了依赖的范围,默认是compile。
  • optional定义了是否为可选依赖,默认是false。
  • exclusion用来排除传递性依赖。

范围或作用域

  • compile:编译依赖范围,使用此依赖范围对于编译、测试、运行三种classpath都有效,即在编译、测试和运行时都要使用该依赖jar包;
  • test:测试依赖范围,只对测试有效,表明只在测试的时候需要,在编译和运行时将无法使用该类依赖,如 junit;
  • provided:已提供依赖范围。编译和测试有效,运行无效。如servlet-api,在项目运行时,tomcat等容器已经提供,无需Maven重复引入;
  • runtime:运行时依赖范围。测试和运行有效,编译无效。如 jdbc 驱动实现,编译时只需接口,测试或运行时才需要具体的 jdbc 驱动实现;
  • system:系统依赖范围,使用system范围的依赖时必须通过systemPath元素显示地指定依赖文件的路径,不依赖Maven仓库解析,所以可能会造成建构的不可移植,谨慎使用。
  • import: 等同于parent标签,在parent被占用时,引入父依赖用
    示例,spring cloud的依赖就这样引入,因为父依赖已经被占用
  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

/省略其他配置......

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
  </dependencyManagement>

相关文章

网友评论

      本文标题:Maven依赖的范围/作用域

      本文链接:https://www.haomeiwen.com/subject/dpeexhtx.html