`

Maven依赖中的scope详解

阅读更多

Maven的一个哲学是惯例优于配置(Convention Over Configuration), Maven默认的依赖配置项中,scope的默认值是compile,项目中经常傻傻的分不清,直接默认了。今天梳理一下maven的scope。

scope的分类

compile

默认就是compile,什么都不配置也就是意味着compile。compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。

test

scope为test表示依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。比较典型的如junit。

runntime

runntime表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过编译而已,说实话在终端的项目(非开源,企业内部系统)中,和compile区别不是很大。比较常见的如JSR×××的实现,对应的API jar是compile的,具体实现是runtime的,compile只需要知道接口就足够了。oracle jdbc驱动架包就是一个很好的例子,一般scope为runntime。另外runntime的依赖通常和optional搭配使用,optional为true。我可以用A实现,也可以用B实现。

provided

provided意味着打包的时候可以不用包进去,别的设施(Web Container)会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是在打包阶段做了exclude的动作。

system

从参与度来说,也provided相同,不过被依赖项不会从maven仓库抓,而是从本地文件系统拿,一定需要配合systemPath属性使用。

scope的依赖传递

A–>B–>C。当前项目为A,A依赖于B,B依赖于C。知道B在A项目中的scope,那么怎么知道C在A中的scope呢?答案是: 
当C是test或者provided时,C直接被丢弃,A不依赖C; 
否则A依赖C,C的scope继承于B的scope。

 

下面是一张nexus画的图。 
依赖传递时scope的计算

分享到:
评论

相关推荐

    maven依赖+继承+聚合

    在软件开发领域,Maven是一个广泛使用的项目管理和综合工具,主要负责构建、依赖管理和...在这个名为“maven依赖+继承+聚合”的示例中,我们可以期待看到如何实际应用这些概念,以实现一个简洁且易于管理的项目结构。

    Maven的依赖验证项目

    在压缩包中的“Maven依赖特性”可能包含了一些特定的示例或者配置,用于展示Maven如何处理不同类型的依赖特性,例如:范围(scope,如compile、test等)、排除依赖、强制版本等。通过实际操作这些例子,你可以更深入...

    maven依赖关系中的<scope>provided</scope>使用详解

    除了`provided`,Maven依赖的其他常见`scope`还包括: 1. **compile**:这是默认的`scope`,表示依赖在整个生命周期中都是可用的,并且会传递给依赖的项目。适用于所有阶段,会在最终的部署包中包含。 2. **...

    maven介绍及配置详解

    #### 四、Maven依赖管理 **4.1 添加依赖:** 在pom.xml文件中,通过`<dependencies>`标签来声明项目的依赖库。例如: ```xml <groupId>junit <artifactId>junit <version>4.12 <scope>test</scope> ```...

    maven:pom文件详解.docx

    《Maven POM 文件详解与配置指南》 Maven 是一个强大的Java项目管理工具,它的核心在于Project Object Model,简称POM。POM文件是Maven项目的核心配置文件,用于定义项目的构建、依赖管理和插件配置等信息。本文将...

    maven Pom详解.pdf

    ### Maven POM详解 Maven 是一款非常强大的自动化构建工具,它通过一组生命周期构建规则,对软件项目构建、依赖管理等进行统一管理。POM(Project Object Model)是 Maven 的核心概念之一,它是一个 XML 文件,包含...

    JSONObject相关jar包和maven管理jar包

    在Maven中,可以通过调整依赖的`<scope>`或者使用`<exclusions>`标签来避免冲突。 7. **测试与调试**:在实际项目中,使用JSONObject进行JSON操作后,通常需要进行单元测试以验证数据的正确转换。Maven也提供了集成...

    maven3.0 maven3.0

    **Maven 3.0 知识点详解** Apache Maven 是一个项目管理和综合工具,尤其在Java开发领域中被广泛使用。Maven 3.0是Maven的一个重要版本,它引入了许多改进和新特性,旨在提高开发效率,增强构建过程的可配置性和...

    maven使用文档,maven使用文档

    - Maven 允许在 POM 文件中使用 exclusions 来排除不需要的依赖。 - 例如,如果一个依赖项引入了一个不需要的依赖,可以通过 `<exclusions>` 节点来排除它。 9. **settings.xml 文件详解** - **Local ...

    第一个maven工程案例

    4. **Maven依赖管理** Maven通过`<dependencies>`标签管理项目依赖。当多个依赖库有相同但不同版本的依赖时,Maven会自动解决依赖冲突,遵循“最接近依赖原则”。同时,`<dependencyManagement>`可以用来统一管理子...

    Maven Web基础搭建示例

    ** Maven Web基础搭建详解 ** Maven是一款强大的项目管理和依赖管理工具,广泛应用于Java开发领域。在构建Web项目时,Maven能够自动化处理构建过程,包括编译、测试、打包、部署等步骤,极大地提高了开发效率。本...

    maven 实战 所有源代码

    ** Maven实战:所有源代码详解 ** Maven是一款强大的项目管理和构建工具,广泛应用于Java开发领域。它通过一套约定优于配置的原则,简化了项目的构建、依赖管理以及文档生成等工作。本篇文章将深入探讨"Maven实战...

    Maven权威指南 中文完整版清晰 完整目录

    Maven是Java开发中的重要组成部分,它的核心功能是通过一个项目对象模型(Project Object Model,POM)来管理项目的构建、报告和依赖关系。Maven通过统一的构建生命周期和插件机制,使得项目构建过程标准化,大大...

    Maven之pom.xml配置文件详解.pdf

    依赖关系在Maven中具有作用域(scope)的限制,这些作用域包括compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围)等。compile是默认作用域,表示依赖在所有...

    Maven pom.xml与settings.xml详解

    例如,Spring框架的`spring-core`模块依赖于`commons-codec`和`commons-logging`,用户只需要在`pom.xml`中声明对`spring-core`的依赖,Maven就会自动处理其传递性依赖,极大地简化了依赖管理。 **Maven坐标**是...

    maven已编译包

    ** Maven 知识点详解 ** Maven 是一个强大的项目管理和构建工具,广泛应用于Java开发领域。它通过提供一套标准的构建过程和依赖管理机制,极大地简化了项目的构建、依赖管理和部署工作。在这个“maven 已编译包”中...

    maven教程-v1.0

    #### Maven依赖管理 - **依赖排除**:在`pom.xml`中使用`<exclusions>`元素来排除不必要的依赖。 - **依赖传递**:当项目依赖另一个项目时,该依赖也会传递到当前项目中,除非明确排除。 #### Maven自动化部署 - ...

    maven第三方仓库配置

    在现代的Java开发中,Maven已经成为构建管理和依赖管理的标准工具。它提供了一种强大的方法来管理项目的构建过程、依赖关系及其文档。 ##### 关于第三方JAR包管理 传统的项目开发过程中,如果需要使用第三方的库...

    Maven 使用入门.pdf

    ### Maven 使用入门详解 #### Maven 介绍与优势 Maven 是一款流行的 Java 项目管理和构建工具,它通过一套标准化的方法来简化项目的构建过程。Maven 的核心价值在于它能够简化项目构建过程,使得开发者能够更加...

Global site tag (gtag.js) - Google Analytics