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画的图。
相关推荐
在软件开发领域,Maven是一个广泛使用的项目管理和综合工具,主要负责构建、依赖管理和...在这个名为“maven依赖+继承+聚合”的示例中,我们可以期待看到如何实际应用这些概念,以实现一个简洁且易于管理的项目结构。
在压缩包中的“Maven依赖特性”可能包含了一些特定的示例或者配置,用于展示Maven如何处理不同类型的依赖特性,例如:范围(scope,如compile、test等)、排除依赖、强制版本等。通过实际操作这些例子,你可以更深入...
除了`provided`,Maven依赖的其他常见`scope`还包括: 1. **compile**:这是默认的`scope`,表示依赖在整个生命周期中都是可用的,并且会传递给依赖的项目。适用于所有阶段,会在最终的部署包中包含。 2. **...
#### 四、Maven依赖管理 **4.1 添加依赖:** 在pom.xml文件中,通过`<dependencies>`标签来声明项目的依赖库。例如: ```xml <groupId>junit <artifactId>junit <version>4.12 <scope>test</scope> ```...
《Maven POM 文件详解与配置指南》 Maven 是一个强大的Java项目管理工具,它的核心在于Project Object Model,简称POM。POM文件是Maven项目的核心配置文件,用于定义项目的构建、依赖管理和插件配置等信息。本文将...
### Maven POM详解 Maven 是一款非常强大的自动化构建工具,它通过一组生命周期构建规则,对软件项目构建、依赖管理等进行统一管理。POM(Project Object Model)是 Maven 的核心概念之一,它是一个 XML 文件,包含...
在Maven中,可以通过调整依赖的`<scope>`或者使用`<exclusions>`标签来避免冲突。 7. **测试与调试**:在实际项目中,使用JSONObject进行JSON操作后,通常需要进行单元测试以验证数据的正确转换。Maven也提供了集成...
**Maven 3.0 知识点详解** Apache Maven 是一个项目管理和综合工具,尤其在Java开发领域中被广泛使用。Maven 3.0是Maven的一个重要版本,它引入了许多改进和新特性,旨在提高开发效率,增强构建过程的可配置性和...
- Maven 允许在 POM 文件中使用 exclusions 来排除不需要的依赖。 - 例如,如果一个依赖项引入了一个不需要的依赖,可以通过 `<exclusions>` 节点来排除它。 9. **settings.xml 文件详解** - **Local ...
4. **Maven依赖管理** Maven通过`<dependencies>`标签管理项目依赖。当多个依赖库有相同但不同版本的依赖时,Maven会自动解决依赖冲突,遵循“最接近依赖原则”。同时,`<dependencyManagement>`可以用来统一管理子...
** Maven Web基础搭建详解 ** Maven是一款强大的项目管理和依赖管理工具,广泛应用于Java开发领域。在构建Web项目时,Maven能够自动化处理构建过程,包括编译、测试、打包、部署等步骤,极大地提高了开发效率。本...
** Maven实战:所有源代码详解 ** Maven是一款强大的项目管理和构建工具,广泛应用于Java开发领域。它通过一套约定优于配置的原则,简化了项目的构建、依赖管理以及文档生成等工作。本篇文章将深入探讨"Maven实战...
Maven是Java开发中的重要组成部分,它的核心功能是通过一个项目对象模型(Project Object Model,POM)来管理项目的构建、报告和依赖关系。Maven通过统一的构建生命周期和插件机制,使得项目构建过程标准化,大大...
依赖关系在Maven中具有作用域(scope)的限制,这些作用域包括compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围)等。compile是默认作用域,表示依赖在所有...
例如,Spring框架的`spring-core`模块依赖于`commons-codec`和`commons-logging`,用户只需要在`pom.xml`中声明对`spring-core`的依赖,Maven就会自动处理其传递性依赖,极大地简化了依赖管理。 **Maven坐标**是...
** Maven 知识点详解 ** Maven 是一个强大的项目管理和构建工具,广泛应用于Java开发领域。它通过提供一套标准的构建过程和依赖管理机制,极大地简化了项目的构建、依赖管理和部署工作。在这个“maven 已编译包”中...
#### Maven依赖管理 - **依赖排除**:在`pom.xml`中使用`<exclusions>`元素来排除不必要的依赖。 - **依赖传递**:当项目依赖另一个项目时,该依赖也会传递到当前项目中,除非明确排除。 #### Maven自动化部署 - ...
在现代的Java开发中,Maven已经成为构建管理和依赖管理的标准工具。它提供了一种强大的方法来管理项目的构建过程、依赖关系及其文档。 ##### 关于第三方JAR包管理 传统的项目开发过程中,如果需要使用第三方的库...
### Maven 使用入门详解 #### Maven 介绍与优势 Maven 是一款流行的 Java 项目管理和构建工具,它通过一套标准化的方法来简化项目的构建过程。Maven 的核心价值在于它能够简化项目构建过程,使得开发者能够更加...