maven scope标签的作用

pom scope标签的作用


在 Maven 中,dependency 元素用于指定项目所依赖的库或模块。其中,scope 标签用于控制依赖的范围,即指定依赖的有效范围,以便在不同的环境下进行不同的构建或部署。scope 标签有以下可选项:

  1. compile:依赖在编译、测试和运行时都可用(默认值)。
  2. provided:依赖在编译和测试时可用,但在运行时由运行环境提供。
  3. runtime:依赖在测试和运行时可用,但在编译时不需要。
  4. test:依赖只在测试时可用。
  5. system:类似 provided,但需要显式地指定依赖的路径或文件。
  6. import:该 scope 只用于在 pom.xml 中使用 dependencyManagement 元素来管理依赖版本号,不会实际被引入到项目中。

煮个栗子

provided用法
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.26</version>
    <scope>provided</scope>
</dependency>

通常情况下,lombok 依赖的 scope 被定义为 provided。这是因为 lombok 库在编译时需要在 classpath 中存在,但在运行时不需要被打包到部署包中,因为它只是一个编译时工具库。因此,将其设置为 provided 可以避免将不必要的 jar 包打包到部署包中,从而减小部署包的大小。同时,在使用 lombok 时,需要将其添加到 IDE 或编译器的插件中,以确保在编译时正常使用 lombok 注解。

import用法

Maven 的 dependencyManagement 元素用于管理项目的依赖版本号,它可以集中管理项目的依赖版本号,避免在多个模块中重复声明版本号,同时方便版本的统一升级。如某版本的
spring-boot-starter-parent:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.3.12</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.3.12</version>
    </dependency>
  </dependencies>
</dependencyManagement>

自己的项目在使用spring-boot-starter-parent作为parent,同时在需要使用这些依赖的子模块中,不需要再指定依赖的版本号,只需要声明对应的 groupId 和 artifactId。例如:

<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
  </dependency>
</dependencies>

这样,子模块会自动使用父 POM 中声明的版本号来获取依赖。如果需要升级依赖的版本,只需要在父 POM 中修改对应的版本号即可,所有子模块都会自动继承这个版本号。
注意,dependencyManagement 只是用于管理依赖版本号,它并不会引入实际的依赖。如果需要在子模块中引入依赖,还需要在 dependencies 元素中声明具体的依赖信息。
如果子模块的作用于是import:

<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <scope>import</scope>
  </dependency>
</dependencies>

由于 scope 被设置为 import,这些依赖也不会被实际引入到子模块中,而是只用于管理版本号。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值