Maven依赖通过和冲突,继承和聚集
1。依赖性交付和冲突1.1 Maven依赖交付功能1.1.1概念
如果有三个Maven项目A,B和C,其中A项目取决于B和B和 b和取决于C。我们可以说A依赖于C。 C当我们执行项目A时,我们将自动下载B和C到项目A的JAR软件包文件夹中。这是依赖性的传统。
1.1.2功能
1。简化依赖关系导入过程
2.确保依赖性版本正确
1.1.3传输原则
在以下前提是a取决于b和b的取决于c,是否可以将c传递到a,取决于依赖关系范围和b依赖于C时使用的配置。
1。B取决于C的使用范围:可以通过
2。B使用测试或范围在无法传递C:无法传递时,因此,当需要这样的JAR包装时,您必须在需要的情况下清楚地配置依赖项。
3。当B取决于C时,如果配置了以下标签,则无法传递。
com.alibaba
druid
1.2.15
true
1.1.4依赖性交付中止
1。依赖性交付是在非范围内进行的
2。使用配置终止交付
3。依赖性冲突(已传播依赖关系已经存在)
1.1.5案例
例如,当我们使用它时,我们需要导入以下三个依赖项。
com.fasterxml.jackson.core
jackson-databind
2.14.2
com.fasterxml.jackson.core
jackson-core
2.14.2
com.fasterxml.jackson.core
jackson-annotations
2.14.2
但是,根据依赖性传播关系,其他两个依赖关系取决于,也就是说,只需要一个,如下图所示:
1.2 Maven依赖冲突特征1.2.1依赖性冲突简介
当相同的JAR软件包直接或间接出现时,将出现在项目中的相同重复的JAR软件包,这被认为是冲突。如下图所示:
Maven具有自动解决依赖性冲突问题的能力,并将根据自己的原则进行重复的依赖选择。它还提供了一种手动解决冲突的方法。
1.2.2自动选择1.2.2.1短路优先级(第一原理)
下面的第二个路径很短(依赖关系水平很小),因此a将取决于x(0.0.2)
1。a - > b - > c - > d - > e - > x(0.0.1)
2。a - > f - > x(0.0.2)
1.2.2.2声明优先级第一(第二个原理)
如果依赖关系路径长度相同,那么首先声明的人是优先级。也就是说,在项目A的POM中,如果首先声明E,则X依赖于(0.0.1)。如果首先声明f,则x依赖于(0.0.2)版本。
1。A - > e—> x(0.0.1)
2。a —> f-> x(0.0.2)
1.2.3手动排除
您可以将标签添加到标签中以排除依赖项,如下所示:
com.maven
pro01-maven-java
1.0-SNAPSHOT
compile
commons-logging
commons-logging
2。继承与聚合2.1 Maven项目继承关系2.1.1继承概念
Maven继承是指一个项目从Maven项目中的另一个项目继承配置信息的机制。继承使我们能够在多个项目中共享相同的配置信息,从而简化项目管理和维护。
2.1.2继承
在父项目中统一地管理项目中的依赖性信息。
2.1.3背景
1。一个相对较大的项目被模块化。
2。一个下面创建了许多。
3。每个人都需要配置自己的依赖性信息。
2.1.4要求
1。很容易引起每个依赖性信息,并且以统一的方式管理不容易管理。
2。在同一框架内使用不同的JAR软件包,它们应该是同一版本,因此整个项目中使用的框架版本需要统一。
3。需要长时间探索和调试使用框架时所需的JAR软件包组合(或相关信息组合)才能最终确定可用组合。该计划已付出了巨大的努力,不应在新项目中再次探讨。
4。通过维护父项目中整个项目的依赖信息的组合,整个项目不仅可以确保标准化和准确的JAR包装;它还可以积累过去的经验并节省时间和精力。
2.1.5继承语法
pom.xml在父项目中的内容如下:
com.maven
maven-parent
1.0-SNAPSHOT
pom
poM.xml在子标记中的含量如下:
com.maven
maven-parent
1.0-SNAPSHOT
maven-module
2.1.6案例
首先创建一个maven模块作为父项目,如下所示:
此SRC目录是没有用的,因为它只是一个父项目,不会在内部编写代码,因此可以删除。最终效果如下:
maven-pom.xml的内容如下:
4.0.0
com.maven
maven-parent
1.0-SNAPSHOT
8
8
UTF-8
右键单击maven模块,并创建一个子项目Maven-son,如下图所示:
该项目的整体结构如下图所示:
maven-son的pom.xml的内容如下:
4.0.0
com.maven
maven-parent
1.0-SNAPSHOT
maven-son
8
8
UTF-8
目前,成功创建了一个卑鄙的父子项目。
2.1。标签
如果子项目想要完全继承父项目的Maven依赖关系,那么您只需要使用标签即可在父项目中添加依赖项,如下图所示,遗传依赖关系的关系不受标签中的属性。
儿童项目不需要在pom.xml中配置任何依赖项即可享受父项目的所有依赖关系。
2.1.T标签
通常,家长项目具有更多的依赖性。如果儿童项目不需要依靠所有项目,而只依靠其中一些,那么您需要使用标签。
首先,使用Maven项目中的标签来管理依赖项,如下所示:
4.0.0
com.maven
maven-parent
1.0-SNAPSHOT
pom
maven-son
8
8
UTF-8
com.fasterxml.jackson.core
jackson-databind
2.14.2
org.projectlombok
lombok
1.16.20
provided
org.junit.jupiter
junit-jupiter-api
5.9.2
test
一旦父项目使用标签,Maven-son项目的依赖性变为0,如下图所示
目前,您需要在Maven-son项目中指定所需的依赖关系。如下图所示,您不需要编写版本编号,您只需要编写前两个坐标,并配置Maven-SON的依赖性,如下图所示:
4.0.0
com.maven
maven-parent
1.0-SNAPSHOT
maven-son
8
8
UTF-8
com.fasterxml.jackson.core
jackson-databind
您可以看到所需的依赖性出现,如下图所示
2.2 Maven工程聚合关系2.2.1聚合概念
Maven聚合是指将多个项目组织成要合并和管理的父项目的机制。汇总可以帮助我们更好地管理一组相关的子项目,同时简化其构建和部署过程。
2.2.2合作社
1。管理多个子项目。通过汇总,可以一起组织多个子项目,以方便管理和维护。
2。构建并发布一组相关项目。通过汇总,可以在一个命令中构建和发布多个相关项目,从而简化部署和维护工作。
3。优化构造序列。通过汇总,可以依次控制多个项目,以避免施工依赖性混乱导致施工失败的情况。
4。依赖关系的统一管理。通过汇总,可以在父项目中管理公共依赖性和插件,以避免重复定义。
2.2.3聚合语法
父母项目中包含的子项目列表。如下所示,主要是标签。
4.0.0
com.maven
maven-parent
1.0-SNAPSHOT
pom
maven-son
8
8
UTF-8
2.2.4聚合演示
让我们构建一个maven项目,看看它是否可以自动构建其 maven-son,如下所示: