<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2、下面这个依赖加了一个作用域scope=test是啥意思?还有其他的吗?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
4、下面这个依赖加了一个类型type=pom是啥意思?还有其他的吗?
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
一个依赖的标签,居然有那么多不了解的元素。
一、<dependency>依赖
<dependency>元素用于声明项目的依赖库。这些依赖库是项目在编译、测试、运行时所需要的。Maven会根据这些依赖下载相应的JAR包,并将它们添加到项目的类路径中。
<dependency>标签下的元素有:
1、<groupId>:依赖的组织或项目组ID。通常与artifactId一起唯一标识一个依赖项。
2、<artifactId>:定义依赖项的唯一标识符。通常表示依赖项的名称。
3、<version>:指定依赖项的版本号。Maven会根据groupId、artifactId和version唯一确定一个依赖项的具体版本。
4、<scope>:依赖项的作用范围
4.1、compile:默认值,适用于大多数情况。
表示依赖在编译、测试、运行三个阶段都有效,会被包含在最终的打包文件中(如 JAR 或 WAR 文件)。
4.2、provided:表示依赖在编译和测试阶段有效,但在打包阶段(如 WAR 文件生成)由目标环境(如应用服务器)提供,因此不会被打包到最终的部署包中。适用于那些由目标环境提供的标准库或容器相关的依赖。
4.3、runtime:表示依赖在运行时有效,但不参与编译。
在编译和测试阶段可见,但不会被打包,适用于运行时需要但不是编译时需要的库。
4.4、test:表示依赖仅在测试编译和运行测试时使用,不会被打包到最终的部署包中。主要用于测试相关的库或工具。
4.5、system:表示依赖与项目无关,由系统中指定路径下的 JAR 文件提供。应该避免使用,因为它会导致项目的可移植性降低。
4.6、import:默认为 false。该 scope 用于管理 Maven 的 BOM(Bill of Materials)依赖项,指示依赖的传递方式。
如果 import 属性设置为 true,表示这个依赖项会被项目的其他模块隐式地导入。这意味着不需要显式地在依赖它的模块的 pom.xml 文件中再次声明这个依赖项。
如果 import 属性设置为 false 或者未设置,则需要在依赖它的模块的 pom.xml 文件中显式地声明这个依赖项。
5、optional:标识依赖项是否为可选的。默认为false。
如果 optional 属性设置为 true,表示这个依赖项是可选的。这意味着它不是项目运行所必需的,如果没有找到该依赖项或者无法满足它的条件,Maven 会继续构建项目而不会报错。
如果 optional 属性设置为 false 或者未设置,则表示这个依赖项是必需的。Maven 将确保在构建项目时能够解析和满足这个依赖项的要求。如果 Maven 无法找到或者满足必需的依赖项,将会导致构建失败并显示相应的错误信息。
6、exclusions:允许排除传递性依赖。可以指定不希望引入的传递性依赖项的groupId和artifactId。
当一个项目依赖于某个库(库A),而该库又依赖于另一个库(库B),但是我们不希望引入库B,可以通过 exclusions 来排除库B的传递性依赖。
7、classifier:用于指定依赖项的附加分类器。通常用于指定依赖项的某个特定版本或构建类型。
7.1、sources: 源代码包。7.2、tests: 测试相关的依赖项。7.3、javadoc: Javadoc 文档包。7.4、executable: 可执行的二进制包或特定配置的构建。
8、type:指定依赖项的类型。默认为 jar,但可以指定为其他类型,如 war、pom 等。
8.1、jar: 默认的构建产物类型,包含编译后的字节码和相关资源。8.2、war: Web 应用程序的归档文件,通常用于部署到 Servlet 容器中。8.3、pom: 引入其他 Maven 项目的 pom.xml 文件作为依赖项,而不是其构建产物。8.4、sources: 源代码包,通常用于开发和调试目的。8.5、test-jar: 包含测试类的 JAR 包,用于共享测试代码。
9、systemPath:仅在 scope 设置为 system 时有效,指定系统中 JAR 文件的路径。
最后总结
在从maven的依赖库拷贝依赖的时候,大部分只使用到了<groupId>、<artifactId>、<version> 这三个标签,只有三个标签是必填项。
除此之外还有很多子标签,都是可选的,也都有默认值。虽然大部分都用不到,但是在有空的时候还是有必要了解一下。
了解了每个子标签的含义,在整理pom文件时相信会顺利很多。
https://maven.apache.org/guides/introduction/introduction-to-the-pom.html
本篇文章来源于微信公众号: 程就人生
微信扫描下方的二维码阅读本文

Comments NOTHING