2.Maven创建以及依赖、继承、聚合

导读:本篇文章讲解 2.Maven创建以及依赖、继承、聚合,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1. Maven工程类型

1.1 POM工程

POM工程是一个逻辑工程,用在父级工程或聚合工程中。用于做jar包的版本控制

1.2 JAR工程

将会打包成Jar包,用作jar包使用,即常见的本地工程,Java Project

使用java -jar jar包名称运行

1.3 WAR工程

将会打包成war,发布在服务器上的工程

2. 在IDEA中创建Maven工程

新建Maven工程
在这里插入图片描述

填写基本信息
在这里插入图片描述

创建成功
在这里插入图片描述

3. Maven项目结构

在这里插入图片描述

  • src/main/java
    这个目录下储存java源代码

  • src/main/resources
    储存主要的资源文件。比如xml配置文件和properties文件

  • src/test/java
    储存测试用的类,比如JUNIT的测试一般就放在这个目录下面
    因为测试类本身实际是不属于项目的,所以放在任何一个包下都显得很尴尬,所以maven专门创建了一个测试包用于存放测试的类

  • src/test/resources
    可以自己创建,储存测试环境用的资源文件,如果测试环境使用的和开发环境不同,可以单独指定,否则默认使用main/resources下的文件

  • pom.xml
    是Maven的基础配置文件。配置项目和项目之间关系,包括配置依赖关系等等

4. POM模式-Maven工程关系

POM模式,把每个项目看做一个对象,之间的关系有依赖,继承,聚合

4.1 依赖

4.1.1 概念

在这里插入图片描述

依赖关系,即A工厂开发或者运行过程中需要B工程的支持,则代表A工程依赖B工程

需要在A项目的POM中添加B项目的而依赖,也就是导Jar包

B工程可以把自己打成jar包,放入远程仓库,A工程中就可以下载依赖到B工程

4.1.2 注入依赖

在POM文件的 dependencies标签中配置该项目所有的依赖向,可以有多个dependence元素,以声明多个依赖

每个依赖dependence标签都应该包含以下元素:groupId, artifactId, version : 依赖的基本坐标,这三个属性加起来就是jar包的唯一标识

案例:加入mybatis依赖
在这里插入图片描述

4.1.3 依赖的传递性(特性)

依赖分为

  • 直接依赖

    在本项目中声明的依赖

  • 间接依赖

    在依赖项目中,所声明的依赖

传递依赖

传递依赖是Maven2.0的新特性,如果你的项目依赖一个库,这个库有依赖了别的库。你不必手动引入这些库,Maven会把这些库也间接的引入进来。这就是传递依赖。是将间接依赖的jar包也引入当前项目中
在这里插入图片描述

案例:上述建了一个maven-Demo1依赖了Mybatis,现在新建一个maven-Demo2,直接依赖Maven-Demo1,查看结果

先把maven-Demo1打包到本地仓库

mvn install

创建maven-Demo2,导入maven-Demo1的依赖
在这里插入图片描述

4.1.4 依赖的两个原则

  • 最短路径优先原则

    对于间接依赖来说,如果间接依赖了同一个包的多个版本,就会产生依赖冲突,针对这一情况,Maven采用最短路径优先原则。也就是间接依赖步数少的优先。比如A->B->C->D(2.0)A-E-D(1.0)两个间接依赖,那么最终采用的是D(1.0)因为步数少

  • 最先声明原则

    如果两个间接依赖的步数是相同的,那么第一原则不能解决所有冲突,比如A-Y-D(2.0)A-E-D(1.0),在Maven2.0.8以及之前,是没有办法确定的,但是在Maven2.0.9开始,为了尽可能的避免构建的不确定性,Maven定义了第二原则,第一原则优先。在路径长度相同的前提下,在POM中的依赖顺序决定了谁被使用。按定义顺序决定

4.1.5 排除依赖

上面说的是靠Maven自动选择冲突依赖,但是很多时候,我们需要手动控制依赖版本,那么可以手动排除间接依赖的版本,留下自己用的版本

在Dependency标签中添加Exclusions中定义排除的依赖,可以排除多个,每个exclusion定义了一个依赖,其中包含groupId和artifactId,因为不排除不需要版本号

案例:排除maven-Demo1中的mybatis依赖
在这里插入图片描述

4.1.6 依赖范围

在dependency标签中的scope标签中声明该依赖的范围

  • compile

    默认的范围,编译、测试和运行时有效

  • provided

    编译和测试时有效,运行时无效

  • runtime

    只有运行时有效

  • system

    系统范围和provided类似,但是必须显示指定一个本地系统路径,

    对于一些maven仓库下载不了的jar包,可以安装到本地仓库,或者放到项目中,通过system引入依赖
    在这里插入图片描述

  • test

    编译测试时有效

  • import

    import只适用于pom文件中的<dependencyManagement>部分。表明指定的POM必须使用<dependencyManagement>部分的依赖。

    <dependencyManagement>
        <dependencies>
        	<!-- springboot 的依赖工程 pom类型 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.5.3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

4.2 继承

如果A项目继承B项目,则代表A工程默认依赖B工程的所有资源,且可以适用B工程中定义的所有资源信息

被继承的工程(B工程)只能是POM工程

可以在父工程的<dependencyManagement>进行依赖版本号管理

本质上是POM文件的继承

4.3 聚合

当我们开发的工程拥有2个以上的模块的时候,每个模块都是一个独立的功能集合。比如某大学系统中拥有搜索平台,学习平台,考试平台等。开发的时候,每个平台可以独立编译,测试,运行。这个时候,我们需要一个聚合工程

在创建聚合工程的时候,总的工程必须是POM类型的工程。各模块个任意类型

聚合的前提是继承

聚合时,所有的子项目需要声明管理父项目。父工程中也通过modules管理所有的模块

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68306.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!