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实现新浪微博Oauth接口发送图片和文字的方法

    java实现新浪微博Oauth接口发送图片和文字的方法

    这篇文章主要介绍了java实现新浪微博Oauth接口发送图片和文字的方法,涉及java调用新浪微博Oauth接口的使用技巧,具有一定参考接借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Java动态数组Arraylist存放自定义数据类型方式

    Java动态数组Arraylist存放自定义数据类型方式

    这篇文章主要介绍了Java动态数组Arraylist存放自定义数据类型方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java中CompletableFuture四种调用模式的实现

    Java中CompletableFuture四种调用模式的实现

    CompletableFuture有就地执行、异步执行等三种模式,就地执行适合轻量级任务,但可能导致线程阻塞,异步执行有上下文切换开销,本文介绍了第四种调用模式,解决了以上问题
    2025-08-08
  • 2019年最新Java学习路线图

    2019年最新Java学习路线图

    不管你是不懂电脑的小白,还是已经步入开发的大牛,这套路线路绝对不容错过,路线图的宗旨就是分享,专业,便利,让喜爱Java的人,都能平等的学习,感兴趣的同学可以了解一下
    2019-03-03
  • java中double转化为BigDecimal精度缺失的实例

    java中double转化为BigDecimal精度缺失的实例

    下面小编就为大家带来一篇java中double转化为BigDecimal精度缺失的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • MybatisPlus中的删除和逻辑删除及区别介绍

    MybatisPlus中的删除和逻辑删除及区别介绍

    这篇文章主要介绍了MybatisPlus中的删除和逻辑删除的相关知识,删除又分为逻辑删除和物理删除,那么它们有什么区别呢?在本文给大家详细介绍,感兴趣的朋友跟随小编一起看看吧
    2020-08-08
  • Java多线程 CompletionService

    Java多线程 CompletionService

    这篇文章主要介绍了Java多线程 CompletionService,CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的Future对象,需要的朋友可以参考一下文章详细内容
    2021-10-10
  • 详谈Array和ArrayList的区别与联系

    详谈Array和ArrayList的区别与联系

    下面小编就为大家带来一篇详谈Array和ArrayList的区别与联系。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 使用IDEA如何拉取GitLab项目

    使用IDEA如何拉取GitLab项目

    使用IDEA拉取GitLab项目,首先需要组长提供的socket和账号密码登录内网的GitLab,打开IDEA,选择新建项目,选择Project from Version Control,然后在项目路径后面添加.git,以上步骤为个人操作经验,希望能为大家提供参考
    2024-10-10
  • Java终止线程的两种方法

    Java终止线程的两种方法

    本文主要介绍了Java终止线程的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论