【Maven】006-Maven 依赖传递和依赖冲突 一、依赖传递 1、概述 概念: Maven 依赖传递是指当一个项目依赖于另一个项目或库时,Maven 会自动解析和获取这些依赖,确保项目能够顺利构建和运行...依赖传递包括直接依赖和间接依赖。直接依赖是项目直接引用的库,而间接依赖是直接依赖所引用的其他库。...作用: 简化项目管理:Maven 通过依赖传递简化了项目的管理,开发者只需声明直接依赖,Maven 会负责解析和获取所有的间接依赖。...版本控制:Maven 可以管理不同库的版本冲突,确保项目使用的是正确的版本,避免冲突和不一致性。...传递的原则: 传递性: Maven 会自动传递依赖,确保直接依赖所需的库的所有间接依赖也能够被正确解析和获取。
OpenInstall_v1.1.0.jar -DgroupId=OpenInstall -DartifactId=OpenInstall -Dversion=1.1.0 -Dpackaging=jar 这样就将jar发布到本地...Maven仓库中了。...命令说明: mvn install:install-file -Dfile=这儿是jar包的完整名字 -DgroupId=这儿随便取名,比如为A ,但是maven依赖在引用时要用这个名字...-DartifactId=这儿随便取名,比如为B ,但是maven依赖在引用时要用这个名字。 -Dversion=这儿是版本号随便写,比如为C,但是maven依赖在引用时要用这个版本号。...在工程的pom.xml中加上maven依赖: A B</artifactId
maven的核心就是依赖管理,在模块过多,之间的依赖关系也很复杂,maven提高了一个高效的管理方法。...B 依赖C。...类似JDBC system 编译测试 从本地系统指定路径获取systemPath import 导入阶段 只用在dependencyManagement中,和pom配合使用...依赖冲突 依赖冲突产生的原因:就像A引入了B和C,但是在B和C中都依赖了D,B依赖的D的1.0版本,C依赖了D的1.1版本。...解决方式:mvn denpendency:treee -->tree.tex 在当前目录打印出maven 依赖树生成tree.txt 文件,找出冲突的jar。
org.springframework.boot spring-boot-maven-plugin
参考: 1. dubbo调用和maven依赖的区别 2. maven依赖和dubbo服务暴露调用区别? dubbo:跨系统通信。...maven依赖:在一个多module的maven项目中,maven子模块间提供依赖实现调用。...而dubbo的提供者和消费者是两个独立的服务(A只是调用B,并未拥有B)。...---- 一般dubbo会有服务提供端和服务调用端,服务提供端会提供接口interface和接口的实现类class,而常见的开发方法都是接口和实现类在不同的项目里面,接口所在的项目一般打包成jar形式,...它需要使用Maven安装到本地仓库中,实现类打包得看情况,如果是Spring MVC的项目,一般打包成war形式,如果是Spring Boot项目,一般打包成jar形式,我们在调用端调用的时候,只需要引入接口打包好的
大家肯定遇到过想在pom文件中加入自己开发的依赖包,这些包肯定是不是在Maven仓库(http://repo1.maven.org/maven2/)的。...那我们怎么将那些不存在Maven仓库中的包加入到本地的Maven库中呢?很简单。这里以IKAnalyzer.jar包为例进行讲解。 ...,同样将pom文件存放在上述jar文件同一文件夹下,IKAnalyzer.jar坐标及依赖代码如下: maven.apache.org/POM/4.0.0"...本地的库文件夹相应目录中。...Maven库中,而是通过下面配置引入,效果和上面的差不多: org.wltea
这还得说说maven的 依赖范围。 依赖范围 maven引入依赖,并不是把jar包拷贝到项目中来,而是把jar包下载到本地仓库,然后通过制定classpath来在项目中引入具体的jar包。...例子:junit provided: 已提供依赖范围。对编译和测试classpath有效。例子:servlet-api runtime: 运行时依赖范围。对测试和运行classpath有效。...结论是:第一直接依赖的范围和第二直接依赖的范围决定了传递性依赖的范围。...比如slf4j-log4j和logback这两个依赖是不能同时出现的,但是因为他们的坐标不一样,所以maven不会对齐进行处理。这个时候我们就需要手动进行 排除依赖 了。...对于重复和冲突的依赖,会提示omitted for duplicate和omitted for conflict with x.x.x。 第二个方法是使用maven的enforcer插件。
之所以会有依赖范围,是因为Maven在编译、测试和运行项目时会各自使用一套classpath,依赖范围就是用来控制这三种classpath的。...使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。典型的例子是spring-core,在编译,测试和运行的时候都需要使用该依赖。 provided 已提供依赖范围。...使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。...典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍。 runtime 运行时依赖范围。...使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译时无效。
① Maven 解析依赖信息时,首先会到本地仓库中查找依赖的 Jar 包 对于本地仓库中没有的依赖,就会去中央仓库查找,通过 Maven 坐标来获取 jar 包,获取到后会先下载到本地仓库 对于中央仓库中不存在的依赖包...,就会显示编译失败 ② 如果依赖的是自己或者团队开发的 Maven 工程,需要先使用 install 命令把被依赖的 maven 工程的 jar 包安装到本地仓库中 ③ 依赖范围,scope 配置就是依赖的范围...1. compile:默认值,适用于所有阶段(开发、测试、部署、运行),本 jar 会一直存在所有的阶段 2. provided:只在开发、测试阶段使用,目的是不让 Servlet 容器和本地仓库的 jar...包冲突,如 servlet.jar 3. runtime:只在运行时使用,如 JDBC 驱动,适用于运行和测试阶段 4. test:只在测试时使用,用于编译和运行测试代码,不会随项目发布 5. system...:类似 provided,需要显式提供包含依赖的 jar,Maven 不会在 Repository 中进行查找
我们知道,maven的依赖关系是有传递性的。如:A-->B,B-->C。但有时候,项目A可能不是必需依赖C,因此需要在项目A中排除对A的依赖。...在maven的依赖管理中,有两种方式可以对依赖关系进行,分别是可选依赖(Optional Dependencies)以及依赖排除(Dependency Exclusions)。...二、依赖排除 当一个项目A依赖项目B,而项目B同时依赖项目C,如果项目A中因为各种原因不想引用项目C,在配置项目B的依赖时,可以排除对C的依赖。...artifactId> 参考资料: 1、maven...官网: http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html
经常会用到,所以记录下 如下List-1所示,重点是scope和systemPath的值 scope的值要设置为system systemPath的值,指向jar的路径 List-1 <dependency
Maven 为什么使用坐标?...依赖 ? 依赖范围 scope 用来控制依赖和编译,测试,运行的 classpath 的关系。...4) runtime:运行域,表示被依赖项目不会参与项目的编译,但项目的测试期和 运行时期会参与。与 compile 相比,跳过了编译这个环节。...依赖的传递 A(maven_web1)项目,B(maven_web2)项目 ,C(maven_test2)项目 首先A项目中添加依赖包,保存后项目中会自动导入包 ? ?...排除依赖 在 pom 中的依赖节点中,如果引入的依赖包含了很多其它的传递依赖,而且 项目需要的这些依赖的版本和传递依赖的不相符;那么可以在依赖节点中设置排 除依赖节点 B项目进行排除依赖,C项目也不接收
摘要 作为开发者,我们一直使用 Maven 来作为版本依赖管理工具,不过我们经常会遇到依赖冲突等问题,我们这边文章就来明确一下 Maven 是如何管理依赖与版本的。...BuildNumber ] ] MajorVersion, MinorVersion, IncrementalVersion 和 BuildNumber 都需要是数字, Qualifier 是一个字符串...那我们在构建的时候,哪些依赖会包含在构建中呢? 这就涉及到Maven的依赖选择策略,Maven 有两条依赖选择规则: 1. 距离根节点最近的依赖会被选择使用 2....我们可以使用 exclude 方式将 Z 1.0 排除出依赖 总结 Maven的依赖管理很灵活,但是当有很多的依赖时,很容易会造成依赖选择的不正确。...其实更真实的说法是,Maven 使用的这种依赖选择策略是有问题的,当遇到依赖冲突时,抛出异常由程序员决定选择哪个依赖是更好的选择,Maven 的这种选择依赖的方式运气好一点的在启动或测试时发现,运气不好等到上线甚至埋藏很久才会运行异常
项目引用 也就是把其他的项目当成jar包放入仓库中,进行依赖的引用,就跟从网上下载jar包到本地一样。 被项目在被引用前必须先 clean install 到仓库中。...例如: project03 要引用 project01 和 project02 时,project01 和 project02必须先打包发布到了本地仓库中。...project03在pom.xml中添加依赖,这样project01 和 project02 就都被当做依赖打成了jar包入进 project03 的 Maven Library 中。...provided: 编译和测试过程中有效,最后生成war不会加入依赖,如servlet-api tomcat有带,打包时就没必要了,只在测试时添加就可以了。...system: 特殊,这个使用的时本地的依赖,不使用maven仓库。 默认是compile。假设如果,scope是依test,不会产生依赖。
Maven依赖范围, 使用scope表示的。...scope的值有 compile, test, provided ,默认是compile scope:表示依赖使用的范围,也就是在maven构建项目的那些阶段中起作用。...maven构建项目 编译, 测试 ,打包, 安装 ,部署过程(阶段) junit的依赖范围是 test junit UTF-8 生成报告的编码 指定资源位置 src/main/java 和...src/test/java 这两个目录中的所有*.java 文件会分别在 comile 和 test-comiple 阶段被编译,编译结果分别放到了 target/classes 和 targe/test-classes
异常标识信息:Could not transfer artifact org.springframework.boot:spring-boot-maven-plugin(证书失效) 解决方式:更改VM
Maven依赖范围 Maven的简介与安装->IDEA配置Maven->Maven依赖范围 ->如何用Maven打包 通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、...如下图所示给 junit 依赖通过 scope 标签指定依赖的作用范围。 那么这个依赖就只能作用在测试环境,其他环境下不能使用。 那么 scope 都可以有哪些取值呢?...依赖范围 编译classpath 测试classpath 运行classpath 例子 compile Y Y Y logback test - Y - Junit provided Y Y - servlet-api...runtime - Y Y jdbc驱动 system Y Y - 存储在本地的jar包 compile :作用于编译环境、测试环境、运行环境。
Maven 坐标 3. 依赖冲突 3.1 冲突产生原因 3.2 解决冲突的办法 1....前言 在我们创建使用 Maven 项目的过程中,当需要用到第三方的控件时,都是通过依赖管理来达成,也就是 Maven 项目中必有的 pom.xml 文件。...依赖冲突 3.1 冲突产生原因 Maven 项目中,通常都会定义血多 dependency,每个 dependency 内部也会定义它的 dependency,而有时各个依赖之间会产生冲突,冲突的原因通常主要是...「由于 jar 包依赖的传递性」,如果在一个项目中同时引入了一个依赖的不同版本,就可能导致依赖冲突。...「移除依赖:用于排除某项依赖的依赖包」 除开上述策略外,我们也可以手动在 pom.xml 中使用 标签来排除发生冲突的依赖包,如下面用于排除 sring-core 冲突的例子:
mvn dependency:analyze:分析项目的依赖关系,并确定哪些依赖是:使用和声明、使用和未声明、未使用和声明。 依赖的传递性 如有依赖关系为A->B->C,A依赖B,称为直接依赖。...通过mvn dependency:list查看A项目的依赖列表,可以看到依赖B和C: [INFO] --- maven-dependency-plugin:2.8:list (default-cli...Maven在编译、测试、运行时都会使用不同的classpath,依赖范围是用来控制依赖和三种classpath的关系。...runtime:运行时依赖范围,只对于测试和运行classpath有效,但在编译主代码时无效。 test:测试依赖范围,只对于测试的classpath有效,仅适用于测试编译和执行阶段,如junit。...system:系统依赖范围,该依赖于三种classpath的关系和provided依赖范围完全一致。区别在于system依赖范围必须通过systemPath元素显示的指定依赖文件的路径。
场景描述:父项目有一个Mysql的依赖,子项目不需要该依赖,也不想配置 Mysql 的配置信息,但是有了依赖不配置信息SpringBoot项目就无法启动,就单纯想排除一下依赖。