Maven 为什么使用坐标?...具 体的依赖范围有如下 6 种: 1) compile: 编译域,这个是 Maven 中 scope 的默认值,我们平时不写 scpoe 配置时默认就是使用这个值。...compile 表示被依赖项目需要同当前项目编译 时一起进行编译,项目测试期以及本项目运行时期同样生效,打包的时候需 要包含进去。...然后A项目的包传递到B项目中,在B项目中依赖: ? ? c项目中依赖B项目的包(因为B也依赖了A项目的包,因此C会依赖A,B项目的包): ? ? 说明: ?...排除依赖 在 pom 中的依赖节点中,如果引入的依赖包含了很多其它的传递依赖,而且 项目需要的这些依赖的版本和传递依赖的不相符;那么可以在依赖节点中设置排 除依赖节点 B项目进行排除依赖,C项目也不接收
说maven依赖冲突之前需要先说说maven的 依赖传递。 依赖传递 当前项目引入了一个依赖,该依赖的依赖也会被引入项目。...更加准确的说法是,maven会解析直接依赖的POM,将那些必要的间接依赖,以传递依赖的形式引入到当前项目中。 为什么说是’必要的间接依赖‘呢?这是因为不是所有的间接依赖都会被引入的。...这还得说说maven的 依赖范围。 依赖范围 maven引入依赖,并不是把jar包拷贝到项目中来,而是把jar包下载到本地仓库,然后通过制定classpath来在项目中引入具体的jar包。...如果依赖范围合适的话,B中依赖的X也是会传递到A项目中的。而两个X的版本不一致,这就产生了依赖冲突。 在依赖冲突发生时,maven不会直接提示错误,而是用一套规则来进行 依赖调解。...,如果有许多相同的间接依赖需要排除的话,会比较麻烦,可以参考:maven实现依赖的“全局排除” 检查依赖冲突 因为maven在依赖冲突发生时使用依赖调解,所以不会有任何提示。
仓库是基于简单文件系统存储的,我们也理解其存储方式、因此,当遇到一些与仓库相关的问题时,可以很方便的查找相关文件,方便定位问题。...当 Maven 在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。...maven 本身并不是一个单元测试框架,maven 做的只是在构建执行到特定生命周期阶段的时候,通过插件来执行 Junit 或 TestNG 的测试用例。...即使没有任何测试也不要报错,否侧maven-surefire-plugin找不到任何匹配的测试类,就会报错并导致构建失败。...PS:上述命令行动态指定测试类的方法都应该只是临时使用,否则失去测试本身意义 包含与排除测试用例 maven 提倡约定优于配置原则 maven 自动运行测试: org.apache.maven.plugins
为什么要使用Maven 使用Maven轻松实现项目jar包依赖管理、子模块管理、构建jar/war包、管理jar/war包、执行单元/集成测试、执行代码分析/代码质量检查等等,开箱即用让开发者无需花更多的时间...当执行Maven构建命令查找项目依赖时,首先从本地仓库搜索,如果本地仓库找不到,再从中央仓库搜索,如果中央仓库也找不到,又配置过远程仓库,那么再从远程仓库搜索。...--如果值为test,则用于test任务时使用-->compile依赖时,从依赖列表中排除某些不需要的依赖-->依赖传递会导致依赖的版本冲突,可以通过配置exclusions排除某些不需要的依赖,当然也可以通过optional标记某传递依赖是可选的。 时使用-->compile依赖时,从依赖列表中排除某些不需要的依赖--><!
本节介绍Maven中的可选依赖和依赖性排除功能。...为了解决这个情况,maven 2.x 包含了显示排除依赖的概念exclusion。...Exclusions 用于排除在你的pom中的某个指定的依赖,当你build你的project时,这个依赖不会打包到你的类路径下。 如何使用 exclusion依赖?...要完成此功能一样的效果,你也可以在ProjectA中将ProjectB的optional设置为true。...Optional 和 Exclusions 依赖的总结 Optional 是保证依赖向上不扩散 Exclusions 是排除依赖的子(孙…)依赖关系
打开 maven 的配置文件(一般在 maven 安装目录的 conf/settings.xml),在 标签中添加 mirror 子节点(当然也可以在用户 home...Maven 仓库是基于简单文件系统存储的,我们也理解其存储方式、因此,当遇到一些与仓库相关的问题时,可以很方便的查找相关文件,方便定位问题。 仓库的分类 ?...本地仓库 一般来说,在 Maven 项目目录下,没有诸如 lib/ 这样用来存放依赖文件的目录。当 Maven 在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。...即使没有任何测试也不要报错,否侧maven-surefire-plugin找不到任何匹配的测试类,就会报错并导致构建失败; PS:上述命令行动态指定测试类的方法都应该只是临时使用,否则失去测试本身意义...包含与排除测试用例 maven 提倡约定优于配置原则。
4)exclusions:排除传递依赖,解决jar冲突问题 依赖传递的意思就是,A项目 依赖 B项目,B项目 依赖 C项目,当使用A项目时,就会把B也给加载进来,这是传递依赖,依次类推,C也会因此给加载进来...使用exclusions来配置 即使struts2-spring-plugin 配置在前面,也需要使用3.2.0版本。...:有效 是否参与打包:不参与 是否参与部署:不参与 典型例子:Junit 表示只在测试时当前jar生效,在别的范围内就不能使用该jar包。...此处不写也不报错,因为默认是compile,compile包扩了测试 3)provided 范围依赖 对主程序是否有效:有效 对测试程序是否有效:有效 是否参与打包:不参与 是否参与部署...这个例子就可以解释上面创建maven web时产生的错误和解决方案了。 4)runtime 范围依赖 在测试、运行的时候依赖,在编译的时候不依赖。
,当前项目间接依赖其他资源 如上图所示,在当前项目中的依赖被称为直接依赖,但直接依赖中还包括有其他依赖资源,这些资源就被称为间接依赖 当然,即使是同一个依赖,针对不同的项目可能也会成为直接或间接依赖...,这样就会导致很多问题 所以Maven给出了一套依赖传递冲突问题解决方案: 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的...在使用可选依赖之后,我们导入04-dao的依赖时,将不再导入03-pojo的依赖 排除依赖 可选依赖需要在当前项目进行设置,才可以排除依赖条件 但是我们在开发时,可能会引用第三方资源的依赖,这时我们就无法从导入依赖资源中采用可选依赖...-- 该项目为02-ssm 我们希望采用04-dao的依赖,但不采用04-dao依赖中的log4j和mybatis依赖 所以我们在导入依赖时采用来添加排除依赖选项来直接排除依赖关系...--排除掉不参与测试的内容--> **/BookServiceTest.java
只对于测试classpath有效。而在编译和运行项目时无法使用此类依赖,典型的是JUnit,它只用于编译测试代码和运行测试代码的时候才需要; 「provided」已提供依赖范围。...「runtime」运行时依赖范围,使用此依赖范围的maven依赖,对于编译测试、运行测试和运行项目的classpath有效,但在编译主代码时无效,比如jdbc驱动实现,运行的时候才需要具体的jdbc驱动实现...但是,如果您依赖的库从另一个库扩展了一个类,则两者都必须在编译时可用。因此,即使编译时间相关性是可传递的,它们仍保留为编译范围。...exclusions中可以有多个exclusion元素,可以排除一个或者多个依赖的传递,声明exclusion时只需要写上groupId、artifactId就可以了,version可以省略。...总结 本文讲述Maven坐标,Maven依赖管理、Maven仓库管理、Maven生命周期以及简单介绍了Maven插件。有了这些概念作为铺垫,我们就可以更深层次去体会,为什么我们在工作室这么用的。
maven的核心就是依赖管理,在模块过多,之间的依赖关系也很复杂,maven提高了一个高效的管理方法。...其中A不想依赖C 可以使用(不指定版本)或者(默认值false) scope取值: compile、provided、test、runtime、system、import...取值 范围 描述 compile 默认值,编译时、测试、运行 当前项目的类路径下有效 provided 编译、测试 由运行时JDK或者容器(Idea)提供 test 测试,运行 只在测试编译执行阶段...依赖冲突 依赖冲突产生的原因:就像A引入了B和C,但是在B和C中都依赖了D,B依赖的D的1.0版本,C依赖了D的1.1版本。...这是两个版本的D就有可能出现冲突,为什么是有可能? 因为依赖管理是根据两个版本的深度和谁先声明,来决定选谁。
相信有过一定开发经验的人知道,每当我们需要使用某个框架时,比如 SpringMVC,那么我们需要导入相应的 jar 包,但是手动导入包的时候,往往会漏掉几个 jar 包,那么在使用该框架的时候系统就会报错...:不参与 是否参与部署:不参与 典型例子:Junit 3、provided 范围依赖 对主程序是否有效:有效 对测试程序是否有效:有效 是否参与打包:不参与 ...是否参与部署:不参与 典型例子:servlet-api.jar,一般在发布到 服务器中,比如 tomcat,服务器会自带 servlet-api.jar 包,所以provided 范围依赖只在编译测试有效...4、runtime 范围依赖:在测试、运行的时候依赖,在编译的时候不依赖。例如:JDBC驱动,项目代码只需要jdk提供的jdbc接口,只有在执行测试和运行项目的时候才需要实现jdbc的功能。 ...这时我们可以在引入 A 的时候将 B 排除。
运行时也不需要。 runtime:表示在编译时不需要,但在运行时需要。最典型的就是jdbc。 test:表示该依赖只在测试时需要。无法在非测试代码中导入,不会被打包到最终的jar包中。...注意:只有依赖范围是compile的依赖才会被传递,其它依赖不会被传递。 可以通过exclusion标签,人为的排除一个依赖,也可以通过optional标签,标记一个依赖是可选的,这样就不会被继承。...2. exclusion 标签 作用:exclusion 标签用于排除传递性依赖,通常是你不希望引入到项目中的传递性依赖。...如果某个库是你依赖的其他库的传递性依赖,而你不希望它出现在项目中,你可以使用 exclusion 来显式地排除它。...使用场景:当你发现某个传递性依赖可能会引起冲突或者不需要时,可以使用 exclusion 标签排除它。 典型用途:用于排除冲突的依赖项、过时的版本或不需要的传递性依赖。
scope 是 maven 中 jar 包依赖作用范围的描述, 如果不设置默认是compile 在在编译、运行、测试时均有效 如果运行有效的话就会和 tomcat 中的 servlet-api 包发生冲突...在 SpringMVC 的配置类SpringMvcConfig 中使用注解@ComponentScan,我们只需要将其扫描范围设置到 controller 即可,如 在 Spring...4.2 思路分析 针对上面的问题,解决方案也比较简单,就是: 加载 Spring 控制的 bean 的时候排除掉 SpringMVC 控制的 bean 具体该如何排除: 方式一:Spring 加载的 bean...排除的过滤规则 type 属性:设置排除规则,当前使用按照 bean 定义时的注解类型进行排除 ANNOTATION:按照注解排除 ASSIGNABLE_TYPE:按照指定的类型过滤 ASPECTJ...,当前设置排除@Controller 定义的 bean 如何测试 controller 类已经被排除掉了?
通过上面官网的操作,我们知道 Idea 中快速构建 SpringBoot 工程其实就是使用的官网的快速构建组件,那以后即使没有 Idea 也可以使用官网的方式构建 SpringBoot 工程。...,在该工程中我们可以看到配置内容结构如下图所示 上图中的 properties 标签中定义了各个技术软件依赖的版本,避免了我们在使用不同软件技术时考虑版本的兼容问题。...而 build 标签中也对插件的版本进行了锁定,如下图 看完了父工程中 pom.xml 的配置后不难理解我们工程的的依赖为什么都没有配置 version。...2.3 切换 web 服务器 现在我们启动工程使用的是 tomcat 服务器,那能不能不使用 tomcat 而使用 jetty 服务器,jetty 在我们 maven 高级时讲 maven...运行一下试试,打印的日志信息如下 程序直接停止了,为什么呢?那是因为排除了 tomcat 服务器,程序中就没有服务器了。
很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错就继续配置jar依赖,导致spring依赖混乱,甚至下一次创建相同类型的工程时也不知道要配置哪些...> 3.2.17.RELEASE 为什么可以这样配置?...,可以排除对commons-logging的依赖,没有日志实现而排除了commons-logging依赖,编译报错 org.springframework...test test部分只有一个模块,我将spring-context-support也放在这吧 spring-test:spring测试,提供junit与mock测试功能 spring-context-support...到这里,spring3的介绍就完了,看着这些图我相信你在maven中配置spring依赖时不会再混乱了 下面介绍spring4,与spring3结构基本相同,下面是官网给出的结构图 ?
很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错就继续配置jar依赖,导致spring依赖混乱,甚至下一次创建相同类型的工程时也不知道要配置哪些...也只要配置一个依赖 org.springframework spring-webmvc 3.2.17.RELEASE 为什么可以这样配置?...spring-core,所以整个spring框架都依赖了commons-logging,如果有自己的日志实现如log4j,可以排除对commons-logging的依赖,没有日志实现而排除了commons-logging...,spring4不再提供 它们的依赖关系 test l test部分只有一个模块,我将spring-context-support也放在这吧 l spring-test:spring测试,提供junit...与mock测试功能 l spring-context-support:spring额外支持包,比如邮件服务、视图解析等 它们的依赖关系 到这里,spring3的介绍就完了,看着这些图我相信你在maven
今天讲讲如何管理依赖,及依赖的范围、传递性等特征。 添加依赖 下面我添加了一个spring-web的依赖,maven就会去下载spring-web的jar包及它依赖的一些jar包。...什么是依赖范围就是指定你这个jar包在哪个阶段时才有效。 compile - 编译依赖范围。默认的范围,可以不填,表示在所有过程中都有效,如编译期、测试过程中、运行期间等。...system - 系统依赖范围。这个范围表示不依赖本地仓库,jar在其他的目录,需要通过systemPath指定路径,这个不建议使用。 import - 引用依赖范围。...依赖传递 依赖的传递前面讲过通过继承和聚合的方式可以达到,通过继承的方式可以轻松的从父项目继承过来,通过聚合的方式也可以间接的传递过来。...依赖排除 在依赖传递过程中,如A依赖B、S2.0,B依赖C、S1.0,这样A就有了S1.0和S2.0两个依赖,这样某些情况下会造成冲突需要手动把B间接传递过来的依赖排除掉,就是不依赖B带过来的S1.0的包
jar依赖,导致spring依赖混乱,甚至下一次创建相同类型的工程时也不知道要配置哪些spring的依赖,只有拷贝,其实,我刚开始就是这么干的!...也只要配置一个依赖。...test test部分只有一个模块,我将spring-context-support也放在这吧 spring-test:spring测试,提供junit与mock测试功能 spring-context-support...到这里,spring3的介绍就完了,看着这些图我相信你在maven中配置spring依赖时不会再混乱了。...---- 以上便是小编给大家介绍的内容,希望大家喜欢~如果您有好的文章,也可以联系小编,大家一起学习交流~一同奔跑在IT之路上!
Maven 基础 2.1 坐标 2.1.0 什么是坐标(依赖) 坐标:在maven中每一个项目都一个唯一标识,这个标识称为坐标,也称为依赖 dependency 。...依赖范围:坐标/依赖/jar包,在maven项目中,使用的范围。...此范围包括3种时态:编译时、测试时、运行时。 依赖范围种类: compile ,默认值,在3个时态(编译时、测试时、运行时)中都可以使用。...runtime,仅在测试时、运行时有用。例如:jdbc驱动 system,maven仓库之外的jar包。(不建议) 如果有仓库之外的jar包,建议先安装到本地仓库中。...Maven项目中的依赖关系:直接依赖、间接依赖 直接依赖:A依赖B 间接依赖:A依赖B,B依赖C,A间接依赖C,间接依赖,也称之为传递性依赖。
引言 Maven 是一个非常流行和强大的 Java 项目管理工具,它可以帮助我们自动化地处理项目的构建、依赖、文档、测试、发布等各个环节。...然而,Maven 项目中也经常会遇到一些依赖问题,比如依赖冲突、依赖缺失、依赖过多等,这些问题会影响项目的正常运行和性能。...它可以在 pom.xml 文件中显示出所有的依赖关系,包括冲突的依赖,以及提供一键排除冲突依赖的功能。它可以让你更方便地管理和优化你的 Maven 项目。...在本文中,我将向你介绍 Maven Helper 插件的安装方法、使用方法和优势,以及为什么每一个使用 Maven 的人都应该安装这款插件。...排除后,插件会自动在 pom.xml 文件中添加标签,来实现子依赖的排除。
领取专属 10元无门槛券
手把手带您无忧上云