Maven pom.xml scope属性的使用

 更新时间:2025年01月03日 11:05:27   作者:学亮编程手记  
在Maven中,scope属性用于定义依赖关系在不同生命周期阶段的行为,影响依赖在构建过程中的下载和使用,以及是否传递给其他项目,常见的scope值包括compile、provided、runtime和test等

Maven pom.xml scope属性

在 Maven 中,scope 属性用于定义依赖关系在不同生命周期阶段的行为。

scope 会影响依赖关系在构建过程中的哪些阶段会被下载和使用,以及是否会传递到依赖于当前项目的其他项目中。

理解 scope 的设置对于优化构建过程和管理依赖关系非常重要。

scope 的常见值及含义

Maven 支持以下几种常见的 scope 值:

compile(默认)

  • 对应于整个构建生命周期,表示这个依赖对编译、测试和运行都是可用的。
  • 会被包含在最终的打包中。
  • 会传递给依赖当前项目的其他项目。

provided

  • 类似于 compile,但是它假定在运行时会由容器或类路径中的其他方式提供。
  • 一般用于那些由容器提供的类库,如 Servlet 容器提供的 JAR 文件。
  • 不会被包含在最终的打包中。
  • 不会传递给依赖当前项目的其他项目。

runtime

  • 表示这个依赖在运行和测试阶段是需要的,但在编译阶段不需要。
  • 会被包含在最终的打包中。
  • 会传递给依赖当前项目的其他项目。

test

  • 表示这个依赖仅在测试编译和测试运行阶段是需要的。
  • 不会被包含在最终的打包中。
  • 不会传递给依赖当前项目的其他项目。

system

  • 类似于 provided,但是需要显式地提供一个本地路径到 JAR 文件。
  • 已经很少使用,通常不推荐使用。

示例解释

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-clients</artifactId>
    <version>${flink.version}</version>
    <scope>provided</scope>
</dependency>

在这个示例中:

  • groupIdorg.apache.flink,表示依赖的组织或库。
  • artifactIdflink-clients,表示具体依赖的库或模块。
  • version${flink.version},表示依赖的版本,这里使用了一个属性 ${flink.version},该属性需要在 POM 文件的其他地方定义。
  • scopeprovided,表示这个依赖假定在运行时会被容器或其他方式提供。

使用场景

  • 当你开发的应用程序运行在一个容器环境中(如 Tomcat、Jetty 等),而该容器已经提供了某些类库(如 JSP API、Servlet API 等),这时就可以将这些类库的依赖设置为 provided
  • 如果你开发的应用程序运行在一个已经包含了 Flink 客户端的环境中,比如 Flink 集群本身,那么可以将 flink-clients 设置为 provided

注意事项

  • 使用 provided 时,需要确保运行时的确有相应的类库可用,否则应用程序会因为找不到必要的类而抛出 ClassNotFoundException
  • 如果你不确定运行时环境是否会提供这些类库,或者这些类库在不同的环境中可能不一致,那么最好不要使用 provided,而使用 compileruntime
  • provided 适用于那些由运行时环境提供的类库,可以减少最终打包的大小,同时也减少了传递依赖的风险。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java MyBatis-Plus之初始MyBatis

    Java MyBatis-Plus之初始MyBatis

    MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做修改,为简化开发、提高效率而生,本文给大家介绍MyBatis-Plus简介和快速入门教程,需要的朋友参考下吧
    2021-10-10
  • 使用Java实现加密之AES加解密

    使用Java实现加密之AES加解密

    这篇文章主要介绍了使用Java实现加密之AES加解密,AES为最常见的对称加密算法,对称加密算法也就是加密和解密用相同的密钥,需要的朋友可以参考下
    2023-05-05
  • java读取文件显示进度条的实现方法

    java读取文件显示进度条的实现方法

    当读取一个大文件时,一时半会儿无法看到读取结果,就需要显示一个进度条,是程序员明白已经读了多少文件,可以估算读取还需要多少时间,下面的代码可以实现这个功能
    2014-01-01
  • Springboot项目删除项目同步target文件问题解决方案

    Springboot项目删除项目同步target文件问题解决方案

    这篇文章主要介绍了Springboot项目删除项目同步target文件问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Spring声明式事务配置使用详解

    Spring声明式事务配置使用详解

    这篇文章主要介绍了在spring注解中,使用声明式事务,需要用到两个核心的注解:@Transactional注解和@EnableTransactionManagement注解。将@Transactional注解加在方法上,@EnableTransactionManagement注解加在配置类上
    2022-08-08
  • SpringData整合ElasticSearch实现CRUD的示例代码(超详细)

    SpringData整合ElasticSearch实现CRUD的示例代码(超详细)

    本文主要介绍了SpringData整合ElasticSearch实现CRUD的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • SpringBoot设置编码UTF-8的两种方法

    SpringBoot设置编码UTF-8的两种方法

    本文通过两种方式给大家介绍SpringBoot 设置编码UTF-8 ,每种方式通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • 使用注解进行Spring开发的全过程

    使用注解进行Spring开发的全过程

    使用注解(Annotation)是一种在代码级别进行说明和标记的技术,它从JDK 5.0开始引入,并在现代Java开发中得到了广泛应用,本文将详细介绍Spring框架中常用的注解及示例,帮助开发者快速掌握Spring注解开发的要点和技巧,需要的朋友可以参考下
    2023-11-11
  • SpringBoot整合HTTPS的项目实践

    SpringBoot整合HTTPS的项目实践

    HTTPS的主要作用是通过SSL证书保护用户数据的安全与隐私,增加网站信任度,防止数据被窃取和篡改,保护网站免受钓鱼攻击,本文就来介绍一下,感兴趣的可以了解一下
    2024-10-10
  • Java实现读取键盘输入保存到txt文件,再统计并输出每个单词出现次数的方法

    Java实现读取键盘输入保存到txt文件,再统计并输出每个单词出现次数的方法

    这篇文章主要介绍了Java实现读取键盘输入保存到txt文件,再统计并输出每个单词出现次数的方法,涉及java文件I/O操作及字符串遍历、运算实现统计功能相关技巧,需要的朋友可以参考下
    2017-07-07

最新评论