maven传递依赖

目录

    • 1. 依赖传递
    • 2. 什么是依赖冲突
    • 3. 怎么解决
    • 4. 项目聚合

maven是一个项目管理的工具,从项目的构建到项目开发,再到项目的测试,项目上线,都可一键管理。

1. 那么,还有maven是如何管理项目中所用到的jar版本冲突,在传递依赖时,怎么解决?
2. 如何创建父子依赖的项目?

1. 依赖传递

在maven中,依赖是可以传递的,假设存在三个项目,分别是项目A,项目B以及项目C。
假设C依赖B,B依赖A,那么我们可以根据maven项目依赖的特征不难推出项目C也依赖A。

2. 什么是依赖冲突

由于依赖传递现象的存在,特定情况下会造成依赖冲突。


spring-context 依赖了spring-beans

3. 怎么解决

1. 使用maven提供的依赖调解原则 第一声明者优先原则在 pom 文件中定义依赖,以先声明的依赖为准。其实就是根据坐标导入的顺序来确定最终使用哪个传递过来的依赖路径近者优先原则在 pom 文件定义依赖,以路径近者为准。

2. 排除依赖使用exclusions标签将传递过来的依赖排除出去
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency>
3. 锁定版本采用直接锁定版本的方法确定依赖jar包的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本为准添加到工程中,此方法在企业开发中经常使用版本锁定的使用方式:第一步:在dependencyManagement标签中锁定依赖的版本第二步:在dependencies标签中声明需要导入的maven坐标pom文件中使用dependencyManagement标签进行依赖jar的版本锁定,并不会真正将jar包导入到项目中,只是对这些jar的版本进行锁定。项目中使用哪些jar包,还需要在dependencies标签中进行声明dependencies标签需要导入依赖时只需要指定groupId和artifactId,无须再指定version
即创建父子项目,springboot就是典型的父子依赖的项目。

4. 项目聚合

项目聚合父项目子项目1子项目2...
  1. 父项目,锁定版本
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 父项目版本信息 --><groupId>cn.bitqian</groupId><artifactId>parent</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><name>parent</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- spring版本抽取 --><spring-version>5.0.10.RELEASE</spring-version><mybatis-version>2.1.3</mybatis-version></properties><!-- 父项目的依赖管理 --><dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring-version}</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis-version}</version></dependency></dependencies></dependencyManagement><!--子项目,这两个小模块在下面创建完了才有的。 --><modules><module>child01</module><module>child02</module></modules>
</project>

有一个坑,父项目打包的方式必须是pom, 而且,eclipse创建完成后会包莫名其妙的错误… 解决如下。

  1. child01,骨架是quick start

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><!-- 父项目 --><parent><groupId>cn.bitqian</groupId><artifactId>parent</artifactId><version>0.0.1-SNAPSHOT</version></parent><!-- 当前项目 的版本信息 --><groupId>cn.bitqian.child01</groupId><artifactId>child01</artifactId><version>0.0.0.1-SNAPSHOT</version><name>child01</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- 无需写版本号,因为依赖传递,引用了父项目中的依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency> <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies>
</project>
  1. child02 就不演示了,根模块01一样,只不过是选的webapp作为骨架。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用apache FileUtils下载文件

目录工具代码实现测试工具 <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.5</version></dependency>或者 https://mvnrepository.com/artifact/commons-io/commons-io/2.7 然后放…

springmvc,spring,hibernate5.0整合

目录1. pom依赖2. web.xml3. spring核心配置文件3.1 jdbc配置信息3.2 sping 配置文件4. 实体映射5. 项目结构5.1 curd5.2 页面6. 测试1. spring版本 5.1.5 RELEASE 2. hibernate版本 5.3.9.Final 3. 数据源使用c3p0项目使用eclipse2017 maven构建, 完成学生的新增&#xff0c;…

MYSQL 查看表上索引的 1 方法

前期准备&#xff1a; create table T9(A int ,B text,C text,fulltext index fix_test_for_T8_B(B));#在定义表的时候加索引 create unique index ix_test_for_T8_A on T9(A);#加朴素索引 create fulltext index fix_test_for_T8_C on T9(C);#加全文索引 --------------------…

springmvc 结合ajax批量新增

目录1. 需要注意的问题2. 页面代码3. controller定义参数接收1. 需要注意的问题 mvc框架的处理日期问题ResponseBody响应对象是自定义对象&#xff0c;响应不是jsonResopnseBody响应自定义对象时&#xff0c;日期为是long类型的数结束数据方法的参数&#xff0c;该如何定义&am…

手写简单的启动器

starter1. target2. 手写启动器~2.1 自动装配&#xff0c;自定义属性2.2 启动器&#xff0c;引用自动装配模块3. 在自己的项目引用上面的starter1. target 1. 启动器只用来做依赖导入(导入配置模块)2. 专门来写一个自动配置模块3. 启动器依赖自动配置&#xff1b;别人只需要引入…

Android 颜色渲染(九) PorterDuff及Xfermode详解

Android 颜色渲染(九) PorterDuff及Xfermode详解之前已经讲过了除ComposeShader之外Shader的全部子类, 在讲ComposeShader(组合渲染)之前, 由于构造ComposeShader需要 PorterDuffXfermode或者PorterDuff.Mode作为参数,所以在此先详细地了解下这两个类的作用,这对之后的绘图会…

每次新建Android项目都报样式找不到的错误?

问题描述如图再网上找了下说改为<style name"AppBaseTheme" parent"android:Theme.Light">这样就行了的确改为这样就ok了但是如果每次都要这么改&#xff0c;不是很烦&#xff1f;有没有彻底解决这个问题的方法&#xff1f;谢谢 解决方案1新建的时候…

Qt多线程学习:创建多线程

【为什么要用多线程&#xff1f;】 传统的图形用户界面应用程序都仅仅有一个运行线程&#xff0c;而且一次仅仅运行一个操作。假设用户从用户界面中调用一个比較耗时的操作&#xff0c;当该操作正在运行时&#xff0c;用户界面一般会冻结而不再响应。这个问题能够用事件处理和多…

图解springmvc 执行流程

核心对象 DispatcherServlet 核心控制器负责请求&#xff0c;响应&#xff0c;数据的分发。HandlerMapping 处理器映射器&#xff0c;负责到controller中&#xff0c;找到对应的方法&#xff0c;返回给核心控制器。HandleAdapter 处理适配器&#xff0c;将handle找到的方法执行…

VMware下Windows Server 2012添加新磁盘

系统管理员在VM下新装了一台Windows Server 2012服务器&#xff0c;我在上面安装了SQL Server 2014 Standard版数据库&#xff0c;安装之初&#xff0c;只分配了一个C盘&#xff0c;我想在这台服务器上添加了三个磁盘&#xff08;虚拟磁盘&#xff09;&#xff0c;步骤如下截图…

mybatis Caused by: java.io.IOException: Could not find resource xxx.xml

翻译&#xff1a;找不到mybatis的映射配置文件。。。 配置文件名别写错了… <!-- 扫描mapper --> <mappers><!-- src/main/resources下 使用\ --><!-- <mapper resource"cn\bitqian\mapper\ordersMapper.xml"/> --><!-- src/mai…

mybatis新增返回主键值

mapper <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace"cn.bitqian.dao.OrdersMa…

测试===JUnit单元测试

测试一&#xff0c;测试分类二&#xff0c;单元测试Junit&#xff0c;你以为的junit只是Test注解吗&#xff0c;shallow..优点&#xff1a;规范&#xff1a;断言&#xff1a;案例demo&#xff1a;junit test case测试类创建&#xff0c;执行测试&#xff0c;结果反馈junit test…

iOS IAP教程

1. 创建应用首先进入iTunes Connect然后按下 Manage Your Applications接下来按下Add New Applicationbutton创建应用2. 在应用中创建IAP创建应用之后&#xff0c;在Manage Your Applications中点应用的图示&#xff0c;进入应用就会看到上图画面点击Manage In App Purchases就…