文章目录

  • 1. Maven工程类型
    • 1.1 POM工程
    • 1.2 JAR工程
    • 1.3 WAR工程
  • 2. 在IDEA中创建Maven工程
  • 3. Maven项目结构
  • 4. POM模式-Maven工程关系
    • 4.1 依赖
      • 4.1.1 概念
      • 4.1.2 注入依赖
      • 4.1.3 依赖的传递性(特性)
      • 4.1.4 依赖的两个原则
      • 4.1.5 排除依赖
      • 4.1.6 依赖范围
    • 4.2 继承
    • 4.3 聚合

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管理所有的模块

2.Maven创建以及依赖、继承、聚合相关推荐

  1. maven创建父子依赖项目—pom

    maven创建父子依赖项目 maven创建父子依赖项目: 参考思路: 思维图: 三种项目示例: jar:控制台项目: war:web项目: war:web项目:(待写) 案例:横向拆分(按照项目结构进 ...

  2. 如何使用Maven创建具有依赖项的可执行JAR?

    我想将我的项目打包在一个可执行的JAR中进行分发. 如何使Maven项目将所有依赖项JAR打包到我的输出JAR中? #1楼 刘坚认为是对的. Maven依赖插件允许您扩展所有依赖,然后可以将其视为资源 ...

  3. 【Maven实战】依赖的聚合和版本管理

    1.在之前的文章中,我们已经建立了四个Maven项目,但是此时如果我们要对这四个项目进行编译打包时,必须一个一个的进行执行命令,而聚合就是指只要我们在其中一个项目中编写一些代码,则在进行此项目的编译和 ...

  4. Eclipse下Maven工程多模块继承和聚合的创建

    使用Maven对项目进行管理的时候,多模块的继承和聚合是必不可少的,本文简要说明一下在eclipse IDE下创建多模块工程. 1.Maven多模块的聚合 一个Maven工程下创建多个模块,然后用一个 ...

  5. Maven学习文档常用命令继承聚合

    学习视频 www.atguigu.com 目前的技术在开发中存在的问题 一个项目就是一个工程 如果项目非常庞大,就不适合继续使用package来划分模块.最好是每一个模块对应一 个工程,利于分工协作. ...

  6. maven项目的依赖、继承管理

    目录 maven依赖 scope 依赖范围 依赖传递 依赖冲突 可选依赖 排除依赖 maven继承 继承 maven依赖 scope 依赖范围 其中依赖范围scope 用来控制依赖和编译,测试,运行的 ...

  7. Maven pom 继承聚合

    Maven pom 继承聚合 1.1.0 简介 对于一个pom.xml来说有几个元素是必须定义的,一个是project根元素,然后就是它里面的modelVersion.groupId.artifact ...

  8. Maven创建聚合项目

    之前没有时间对项目进行整理,现在能够闲下来写一些东西了.今天主要说明的是maven创建聚合工程的方法. 创建过程 1.首先创建一个正常的maven项目 2.删除src目录(聚合项目最外层不需要编码,只 ...

  9. 项目一众筹00_04Maven配置工作空间环境、STS创建第二个Maven项目,演示依赖、一个新的工作空间环境标准设置

    Maven配置工作空间环境.STS创建第二个Maven项目,演示依赖目录 文章目录 Maven配置工作空间环境.STS创建第二个Maven项目,演示依赖目录 Maven配置工作空间环境 sts(ecl ...

最新文章

  1. Simple Dynamic Strings(SDS)源码解析和使用说明二
  2. Caffe中计算图像均值的实现(cifar10)
  3. BZOJ3998: [TJOI2015]弦论(后缀自动机,Parent树)
  4. oracle 主键_Oracle约束详解
  5. haproxy定义规则限制IP访问
  6. bootstraptable控制分页_bootstrap table分页(前后端两种方式实现)
  7. 程序员过关斩将--更加优雅的Token认证方式JWT
  8. Spark数据本地性
  9. Struts2学习笔记(十九) 验证码
  10. mrp手机qq2008下载-MRP格式的手机QQ2008软件介绍及如何正确安装MRPQQ2008挂Q版
  11. Android即时通讯实现原理
  12. 河南省第四届ACM程序设计大赛(共八道,目前只做两道。待续)
  13. python 中文排序(按拼音)
  14. 信息系统项目管理师 第一章-信息系统与信息化
  15. 三星“掌门人”李在镕身在看守所 但仍“遥控”三星
  16. 小闫陪你入门 Java (二)
  17. 基于PyQt的分组工具
  18. ROUGE评价算法学习
  19. 遭遇svchoct.exe,vonine.exe,HBKernel32.sys,ssdtti.sys,System.exe,ublhbztl.sys等2
  20. centos7 同步网络时间

热门文章

  1. docker CE on Linux示例浅析(四)swam群集配置
  2. 《Head First HTML5 javascript》第9章 认识对象
  3. 软工网络15个人阅读作业2(201521123007谭燕)
  4. el-table的自定义行高设置
  5. DataFrame 选取其中的两列数据
  6. crontab python不生效_crontab 中 python 脚本执行失败的解决方法
  7. linux没办法识别u盘,linux系统下不能识别U盘
  8. 正切tan的概念实体化
  9. 2019年广东工业大学腾讯杯新生程序设计竞赛(同步赛)I-迷途的怪物
  10. 去哪儿网一面:工厂方法模式