Maven Dependency Scope(Maven依赖作用域)

依赖作用域用于限制依赖项的传递性,并影响用于各种构建任务的 classpath。

一共有6个:

  • compile:

默认项,编译依赖项在项目的所有类路径中都可用。此外,这些依赖项将打包到依赖的项目。

  • provided:

跟默认项类似,不同的是在运行时JDK会提供依赖,例如,当为Java Enterprise Edition构建web应用程序时,您将对Servlet API和相关Java EE API的依赖设置为 provided,因为web容器提供了这些类。仅在编译和测试类路径上使用,且不打入包内。

  • runtime:

此范围指示此依赖项不是编译所需的,而是执行所需的。它位于运行时和测试类路径中,但不在编译类路径中。

  • test

此范围表示应用程序的正常使用不需要依赖项,仅在测试编译和执行阶段可用。这个范围将不会对依赖项进行打包。

  • system

除了必须显式地提供包含它的JAR之外,此范围与 provided 的类似。被标识的依赖项是可用的,并且不会在仓库中查找。样例:

    <project>
      ...
      <dependencies>
        <dependency>
          <groupId>javax.sql</groupId>
          <artifactId>jdbc-stdext</artifactId>
          <version>2.0</version>
          <scope>system</scope>
          <systemPath>${java.home}/lib/rt.jar</systemPath>
        </dependency>
      </dependencies>
      ...
    </project>
  • import

仅支持 pom 类型的 <dependencyManagement> 节点中使用。它指示要用指定POM的<dependencyManagement>节中的有效依赖项列表替换依赖项。由于替换了依赖项,具有 import 范围的依赖项实际上并不参与限制依赖项的传递性。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

每个范围(导入 import )都以不同的方式影响传递依赖关系,如下表所示。如果将依赖项设置为左列中的作用域,则该依赖项与第一行中的作用域的传递依赖项将导致主项目中的依赖项,其作用域列在交集处。如果没有列出范围,则意味着将省略依赖项。

 

 compileprovidedruntimetest
compilecompile(*)-runtime-
providedprovided-provided-
runtimeruntime-runtime-
testtest-test-

注意:

我们希望这应该是运行时范围,以便所有编译依赖项都必须显式列出。但是,如果您所依赖的库从另一个库扩展了一个类,那么这两个库必须在编译时可用。因此,即使编译时依赖项是传递的,它们仍然作为编译范围。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值