Maven进阶

目录

  • 分模块开发与设计
  • 依赖管理
    • ●传递依赖
    • ●可选依赖(不透明)
    • ●排除依赖(不需要)
  • 聚合与继承
  • 属性
    • ● 属性管理
    • ● 版本管理
  • 私服

学习目标

1、理解分模块开发的意义
2、能够使用聚合工程快速构建项目
3、能够使用继承简化项目配置
4、能够根据需求配置生产、开发、测试环境,并在各环境间切换运行

分模块开发与设计

分模块开发
如在开发电商系统时,订单模块需要用到商品模块(例如需要使用商品模块中的实体类等…)**
Maven进阶_第1张图片

分模块开发意义

● 将原始模块按照功能拆分成若干个子模块,方便模块间的相互调用、接口共享
Maven进阶_第2张图片

分模块开发演示

分离domain模块(模块拆分)
Maven进阶_第3张图片

导入Maven_pojo依赖坐标
Maven进阶_第4张图片
此处仅为演示企业团队开发中各自开发实现各自的功能,不会拆分

问题】进行以上操作完成后,我们分模块开发完成是否已经完成呢
我们不妨执行Maven声明周期中的操作(报错)
在这里插入图片描述
报错大意为不能解析工程中引用的依赖:【项目中的依赖是从本地仓库加载的,而Maven模块依赖的Maven_pojo模块的jar包并不存在于本地仓库中】

如何解决?【使用Maven工具中的install指令将要依赖的模块打包安装至本地仓库】
Maven进阶_第5张图片
团队内部开发需要发布模块功能到团队内部可共享的仓库中 (私服)

此时服务器启动成功!!!
Maven进阶_第6张图片

依赖管理

—— 依赖指当前项目运行所需的jar,一个项目可以设置多个依赖

●传递依赖

依赖具有传递性
① 直接依赖:在当前项目中通过依赖配置建立的依赖关系

② 间接依赖:被依赖的资源如果依赖其他资源,当前项目则间接依赖其他资源
Maven进阶_第7张图片


传递依赖冲突问题
① 路径优先当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
② 声明优先当资源在相同的层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
③ 特殊优先当同级配置了相同资源的不同版本,后配置的覆盖先配置的

示例Maven项目中的依赖关系图
Maven进阶_第8张图片

●可选依赖(不透明)

可选依赖指对外隐藏当前所依赖的资源【不透明

 <dependency>
      <groupId>......</groupId>
      <artifactId>......</artifactId>
      <version>......</version>
      <optional>true</optional>
    </dependency>

●排除依赖(不需要)

排除依赖指主动断开依赖的资源被排除的资源无需指定版本【不需要

<dependency>
      <groupId>......</groupId>
      <artifactId>......</artifactId>
      <version>......</version>
     <exclusions>
       <exclusion>
         <groupId>......</groupId>
         <artifactId>......</artifactId>
       </exclusion>
     </exclusions>
    </dependency>

聚合与继承

聚合: 将多个模块组织成一个整体,同时进行项目构建的过程称为聚合

聚合工程: 通常是一个不具有业务功能的 “空” 工程(有且仅有一个pom文件)

作用: 使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建【 当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题】
Maven进阶_第9张图片

创建一个Maven模块,用来构建聚合工程,设置打包类型为pom
Maven进阶_第10张图片
注意事项:每个maven工程都有对应的打包方式,默认为jar,web工程打包方式为war

设置当前聚合工程所包含的子模块名称
Maven进阶_第11张图片
注意事项:聚合工程中所包含的模块在进行构建时会根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关;参与聚合的工程无法向上感知是否参与聚合,只能向下配置哪些模块参与本工程的聚合

作用】四个工程均参与构建
Maven进阶_第12张图片

继承: 继承描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程的配置信息,常见于依赖关系的继承
作用: 简化配置;减少版本冲突

Maven进阶_第13张图片

父工程中配置子工程的可选依赖

<dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>......</groupId>
        <artifactId>......</artifactId>
      </dependency>
    </dependencies>
  </dependencyManagement>

注意事项:子工程中使用父工程中的可选依赖时,仅需提供群组id和项目id,无需提供版本,版本由父工程统一提供,避免版本冲突;子工程中还可以定义父工程中没有定义的依赖关系

聚合与继承的区别
Maven进阶_第14张图片

属性

● 属性管理

定义属性

<properties>
    <spring.version>5.2.10.RELEASE</spring.version>

  </properties>

引用属性

 <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>

● 版本管理

Maven进阶_第15张图片

私服

●私服简介
① 私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题

②Nexus
——Sonatype公司的一款私服产品
——下载地址:https://help.sonatype.com/repomanager3/download

●私服仓库分类
Maven进阶_第16张图片

●资源上传与下载
Maven进阶_第17张图片

你可能感兴趣的:(maven,java)