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 适用于那些由运行时环境提供的类库,可以减少最终打包的大小,同时也减少了传递依赖的风险。

总结

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

相关文章

  • SpringBoot如何根据目录结构生成API接口前缀

    SpringBoot如何根据目录结构生成API接口前缀

    这篇文章主要介绍了SpringBoot如何根据目录结构生成API接口前缀,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java设计模式之Adapter适配器模式

    Java设计模式之Adapter适配器模式

    这篇文章主要为大家详细介绍了Java设计模式之Adapter适配器模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • java实现从网上下载图片到本地的方法

    java实现从网上下载图片到本地的方法

    这篇文章主要介绍了java实现从网上下载图片到本地的方法,涉及java针对文件操作的相关技巧,非常简单实用,需要的朋友可以参考下
    2015-07-07
  • SpringBoot项目访问任意接口出现401错误的解决方案

    SpringBoot项目访问任意接口出现401错误的解决方案

    今天小编就为大家分享一篇关于SpringBoot项目访问任意接口出现401错误的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • JavaWeb评论功能实现步骤以及代码实例

    JavaWeb评论功能实现步骤以及代码实例

    项目初始版本上线,有时间写点东西记录一下项目中的心得体会,通过这个项目学习了很多,要写下来的有很多,先从评论功能开始吧,下面这篇文章主要给大家介绍了关于JavaWeb评论功能实现步骤以及代码的相关资料,需要的朋友可以参考下
    2023-01-01
  • Spring事务框架之TransactionDefinition源码解析

    Spring事务框架之TransactionDefinition源码解析

    这篇文章主要为大家介绍了Spring事务框架之TransactionDefinition源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Java实现二叉树的建立、计算高度与递归输出操作示例

    Java实现二叉树的建立、计算高度与递归输出操作示例

    这篇文章主要介绍了Java实现二叉树的建立、计算高度与递归输出操作,结合实例形式分析了Java二叉树的创建、遍历、计算等相关算法实现技巧,需要的朋友可以参考下
    2019-03-03
  • Java 实现滑动时间窗口限流算法的代码

    Java 实现滑动时间窗口限流算法的代码

    这篇文章主要介绍了Java 实现滑动时间窗口限流算法的代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 关于SaCheckPermission权限校验注解

    关于SaCheckPermission权限校验注解

    在若依框架(RuoYi)的前后端分离版4.8.x中,SaCheckPermission注解用于权限校验,这个注解可以应用在方法上,以确保只有具有相应权限的用户才能访问该方法
    2024-11-11
  • Java实战之多线程模拟站点售票

    Java实战之多线程模拟站点售票

    今天带大家来练习Java实战,文中多线程模拟站点售票这个问题作了详细的介绍,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05

最新评论