maven依赖配置和依赖范围

一:依赖配置 

我们在实际开发汇中最常见的maven依赖如下,读者可以看到最基本的groupId,artifactId,version等元素组成。

 1 <dependency>
 2    <groupId>...</groupId>
 3    <artifactId>...</artifactId>
 4    <version>..</version>
 5    <type>...</type>
 6    <scope>...<scope>
 7    <optional>...<optional>
 8    <exclusions>
 9     <exclusion>
10       </exclusion>
11    </exclusions>
12 <dependency>

1.groupId、artifactId和version:依赖的基本坐标,对于任何一个依赖来说,基本坐标最重要,Maven根据坐标才能找到需要的依赖。

2.type依赖类型,对于项目坐标定义的packaging。大部分情况下,该元素不必要声明,其默认值为jar。

3.scope 依赖范围。我们会在后面详细介绍。

4.optional:标记依赖是否可选。

5.exclusions:用来排除传递性依赖。

在实际应用中只包含最基本的坐标,然而在一些特殊情况下,其他元素至关重要。

二.依赖范围

依赖范围就是用来控制依赖与这三种classpath(编译classpath、测试classpath、运行classpath)的关系,Maven有以下几种依赖范围。

1.compile: 编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的maven依赖,对于编译 测试 运行三种的classpath都有效。

2.test:测试依赖范围。使用此依赖范围的Maven依赖,只对于测试的classpath有效,在编译主代码或者运行主代码的时候都无法依赖此类依赖。典型的例子是jUnit,它只有在编译测试代码及运行测试代码的时候才有效。

3.provided:以提供依赖范围。使用此依赖范围的maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行的时候,由于容器已经提供,就不需要maven重复地引入一遍。打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作

4.runtime:运行时依赖范围。使用此依赖范围的maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。典型的例子是JDBC驱动实现,项目主代码的编译只需要jdk提供的jdbc的接口,只有在执行测试或者运行测试的时候才需要实现上述接口的jdbc的驱动

5.system:系统依赖范围。从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径,该依赖与三种范围的classpath

和provided依赖范围完全一致。可能造成不可移植,谨慎使用。

6.import:导入依赖范围。该依赖范围不会对三种classpath产生实际的影响。只有在dependencyManagement下才有效果。

3.传递性依赖

A依赖B,B依赖C。当前项目为A,只当B在A项目中的scope,那么c在A中的scope是如何得知呢?

当C是test或者provided时,C直接被丢弃,A不依赖C;(排除传递依赖)

否则A依赖C,C的scope继承与B的scope。maven会解析各个依赖的pom,将那些必要的间接依赖,一传递性依赖的形式引入到当前的项目中。

原文地址:https://www.cnblogs.com/caibixiang123/p/9373674.html

时间: 2024-11-09 00:05:00

maven依赖配置和依赖范围的相关文章

如何在Maven中配置Spring依赖

如何在Maven中配置Spring依赖 *前言: 这篇文章讨论了如何在Maven配置Spring的一些细节,这里介绍了一些主要的Maven依赖管理内容,当然还存在一些没有讨论到的内容,不过这篇文章应该是在项目中使用Spring的一个好的起点.最新的Spring发布版可以在Maven仓库中找到.* 在Maven中Spring的基础配置 Spring是高度模块化的,可以单独使用Spring的某个库而不需要依赖Spring的其他库.比如,使用Spring Context库不需要依赖Spring Per

[Maven实战](8)依赖配置与依赖范围

 1. 依赖配置 依赖基本配置: <project> <dependencies> <dependency> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <exclusions> <exclusion> <groupId>...</groupId>

Maven之——坐标和依赖(上)

Maven之--坐标和依赖(上) 1.    Maven坐标概念 Maven通过构件的坐标来在Maven仓库中定位到详细的构件.Maven的坐标元素包含groupId.artifactId.versiion.packaging.classifier.Maven内置了一个中央仓库地址.须要时Maven会依据坐标到当中下载.详细关于中央仓库的介绍在后面. 2.    Maven坐标具体解释 比方以下一组坐标: <groupId>org.andy.items</groupId> <

gradle学习之旅(九) 依赖配置

包括本节的接下来三节中分别学习gradle依赖管理中是三个重要感念:依赖配置.依赖声明.仓库配置和使用 什么是配置 配置就是依赖的配置 插件可以引入配置来定义依赖的作用域(第四节的java插件),比如java插件通过compile配置添加编译产品源代码所需的依赖. 配置的API表示 配置可以直接在项目的根级别添加和访问,可以直接使用插件提供的配置,也可以声明自己的配置. 类似于taskContainer,每个项目也有一个ConfigurationContainer类的容器来管理相应的配置 配置在

Android Gradle 依赖配置:implementation &amp; api

背景: Android Gradle plugin 3.0开始(对应Gradle版本 4.1及以上),原有的依赖配置类型compile已经被废弃,开始使用implementation.api和annotationProcessor类型分别替代.对应的,这三种替代配置类型针对具体的使用场景,具有不同的依赖行为.其中,implementation和api依赖又相对最为常用,对其具体含义也需要理解清,在实际项目中选择依赖配置时,也才能游刃有余. 首先看一下Android官方文档中关于依赖配置的详细介绍

ideal环境maven自动下载项目依赖配置

开篇序言 最近在使用ideal软件对springboot进行开发研究,中间遇到的环境和创建springboot遇到的问题真是玲琅满目,但是遇到问题就要克服这是万年不变的真理. 该文档会后续不断的补充,准备做成一个系列,以ideal环境熟悉.spring boot及搭建ssm和ssh. spring cloud为主. PS:ideal果然是开发的好帮手,提示很到位的. 今天先开篇为主: spring boot的好处: 以往在用ssh,ssm开发项目时要配置大量的文件.信息才能跑通一个项目,但是若只

maven 依赖配置以及 包的对应关系

springMVC 相关依赖 <!--Spring MVC 相关依赖--> <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <versio

Maven(2)-坐标和依赖

本文简要介绍Maven里面的坐标(coodinate)以及maven依赖管理(Dependency) 一.坐标 先来个截图: 在上图peoject栏目有groupId,artifactId,version,这个就是maven中坐标的概念,这三个属性能够唯一定位一个java架包,其中: groupId代表架包所在的组织(package的概念),比如com.cnblogs artifactId是一个单独架包(项目)的唯一表示 version代表当前项目的版本号 另外坐标还有个packaging属性,

Maven exclusions(排除依赖)

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>2.5.6</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artif