Maven进阶篇超详细笔记

Maven进阶篇详细笔记,源码可见下载链接
大家阅读时可善用目录功能,可以提高大家的阅读效率
下载地址:Maven笔记+项目源码


分模块开发

分模块开发的意义

  • 将原始模块查分成若干个子模块,方便模块间的相互调用,接口共享

分模块开发的步骤

  1. 创建Maven工程
    • 将要拆分的功能放入另一个模块中(这里将原来的domain中的Book拆出去了)
  2. 书写代码模块
  • 目标模块pom文件
<?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>org.example</groupId><artifactId>SSM</artifactId>  <packaging>pom</packaging><version>1.0-SNAPSHOT</version><dependencies>
<!--      依赖domain运行--><dependency><groupId>org.example</groupId><artifactId>Maven_1</artifactId><version>1.0-SNAPSHOT</version></dependency>...</dependencies>
</project>
  • 拆分出的pom文件
<?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>org.example</groupId><artifactId>Maven_1</artifactId><version>1.0-SNAPSHOT</version>
</project>
  1. 通过maven指令安装模块到本地仓库
    • 运行拆分出模块的install指令,将其安装到本地
    • 再去运行原项目的compile指令,就可以运行了

注:如果不执行install之指令,在运行原项目的时候就会报错


依赖管理

依赖传递

  • 依赖具有传递性

    • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
    • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
  • 依赖传递冲突问题

    • 路径优先: 当依赖中出现相同的资源时,层级越深,优先级越低;层级越浅,优先级越高
    • 声明优先: 当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
    • 特殊优先: 当同级配置了相同资源的不同版本,后配置的覆盖先配置的

如何直观的显示直接/间接依赖

在这里插入图片描述
在这里插入图片描述

可选依赖

  • 可选依赖是指对外隐藏所依赖的资源——不透明,我的依赖不给别人用
<?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>org.example</groupId><artifactId>Maven_1</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.example</groupId><artifactId>Maven_2</artifactId><version>1.0-SNAPSHOT</version>
<!--            可选依赖是隐藏当前工作所依赖的资源,隐藏后的对应资源将不具有依赖传递性 true-隐藏 --><optional>false</optional></dependency></dependencies>
</project>

排除依赖

  • 排除依赖是指主动断开依赖,被排除的资源无需指定版本——别人的依赖我不想用
<?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>org.example</groupId><artifactId>SSM</artifactId>  <packaging>pom</packaging><version>1.0-SNAPSHOT</version><dependencies>
<!--      依赖domain运行--><dependency><groupId>org.example</groupId><artifactId>Maven_1</artifactId><version>1.0-SNAPSHOT</version>
<!--          排除依赖是隐藏当前资源对应的依赖关系,无视版本,指定id排除--><exclusions> <!--这里面写要排除的项--><exclusion> <groupId>org.example</groupId><artifactId>Maven_2</artifactId></exclusion></exclusions></dependency>...</dependencies>
</project>

继承和聚合

聚合

  • 聚合: 将多个模块组织成一个整体,同时进行项目构建的过程称为聚合
  • 聚合工程 :通常是一个不具有业务功能的“空”工程(有且仅有一个pom)文件
  • 作用: 使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建
    • 当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块的关联模块同步更新,
      此时可以使用聚合工程来解决批量模块同步构建的问题

聚合开发步骤

  1. 创建maven模块,设置打包类型为pom
  2. 设置当前聚合工程所包含的子模块名称
<?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>org.example</groupId><artifactId>Maven</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><!--    设置管理的模块名称 --><modules><module>../SSM</module><module>../Maven_1</module><module>../Maven_2</module></modules>
</project>

继承

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

继承步骤

  1. 创建maven模块,打包方式设为pom(跟聚合相同)
  2. 在父工程的pom文件中配置依赖关系(子工程将沿用父工程中的依赖关系)
  3. 在父工程中配置可选的依赖
  • 父工程
<?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>org.example</groupId><artifactId>Maven</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><!--继承必选依赖-->
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency>
</dependencies><!-- 可选依赖管理--><dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies></dependencyManagement>
</project>
  • 子工程
<?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>org.example</groupId><artifactId>SSM</artifactId>  <packaging>war</packaging><version>1.0-SNAPSHOT</version><!--    配置当前工程继承自parent工程--><parent><groupId>org.example</groupId><artifactId>Maven</artifactId><version>1.0-SNAPSHOT</version>
<!--        父工程路径(可不填)--><relativePath>../Maven/pom.xml</relativePath></parent><dependencies><dependency><groupId>org.example</groupId><artifactId>Maven_1</artifactId><version>1.0-SNAPSHOT</version></dependency>
<!--        添加可选依赖(不需要版本号)--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency></dependencies>
</project>

继承和聚合的区别

  • 作用:
    • 聚合用于快速构建项目
    • 继承用于快速配置
  • 相同点:
    • 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系只做到同一个pom文件中
    • 聚合与继承均属于设计型模块,并无实际的模块内容
  • 不同点:
    • 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
    • 继承是在子模块中配置关系,父模块无法感知哪写子模块继承了自己

属性

pom文件中使用属性

  • 定义属性-properties
  • 使用属性-${}
<?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>org.example</groupId><artifactId>Maven</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency></dependencies><!--    定义属性--><properties><spring.version>5.2.9.RELEASE</spring.version></properties>
</project>

资源文件中引用属性

  1. 定义属性
  2. 在pom中设属性生效范围
  3. 在资源文件中调用属性
  • pom.xml
<?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>org.example</groupId><artifactId>Maven</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><!--    定义属性--><properties><jdbc.url>jdbc:mysql:///ssm_db?useSSL=false</jdbc.url></properties>
<!--    让指定路径下的文可以使用pom中的属性--><build><resources><resource><directory>${project.basedir}/src/main/resources</directory><!--这里用了一个maven的系统属性--><filtering>true</filtering></resource></resources></build>
</project>
  • jdbc.properties
    • 可定义多个,这里只定义一个用于举例说明
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc.password=123456
  1. 配置maven打war包时不检查web.xml是否存在
<?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>org.example</groupId><artifactId>SSM</artifactId>  <packaging>war</packaging><version>1.0-SNAPSHOT</version><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.4.0</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins></build>
</project>

其他属性

在这里插入图片描述

版本管理

  • 工程版本
    • SNAPSHOT(快照版本)
      • 项目开发过程中临时输出的版本,称为快照版本
      • 快照版本会随着开发的进展不断更新
    • RELEASE(发布版本)
      • 项目开发到进入阶段里程碑后,项团队外发布较为稳定的般,这种版本所对应的构建文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,
        这种版本称为发布版本
  • 发布版本
    • alpha版
    • beta版
    • 纯数字版

Maven多环境开发配置与应用

多环境开发

  • maven提供配置多种环境的设定,帮助开发者使用过程中快速切换环境
  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>org.example</groupId><artifactId>Maven</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging>
<!--    配置多环境--><profiles>
<!--     开发环境--><profile><id>env_dep</id><properties><jdbc.url>jdbc:mysql:///ssm_db?useSSL=false</jdbc.url></properties></profile>
<!--    生产环境--><profile><id>env_pro</id><properties><jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_db?useSSL=false</jdbc.url></properties>
<!--            设定为默认启用的环境--><activation><activeByDefault>true</activeByDefault></activation></profile>
<!--    测试环境--><profile><id>env_test</id><properties><jdbc.url>jdbc:mysql://127.3.3.3:3306/ssm_db?useSSL=false</jdbc.url></properties></profile></profiles><!--    让指定路径下的文可以使用pom中的属性--><build><resources><resource><directory>${project.basedir}/src/main/resources</directory><filtering>true</filtering></resource></resources></build>
</project>
  1. 使用多环境

mvn 指令 -p 环境定义id 范例:

mvn install -p pro_env

跳过测试

  • 应用场景

    • 功能更新中且没有开发完成
    • 快速打包
  • 使用方式

    • idea自带的maven功能
    • maven插件
    • maven语句
  1. idea自带的maven功能

在这里插入图片描述

2.maven插件(细粒度控制跳过测试)

<?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>org.example</groupId><artifactId>Maven</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><!--    让指定路径下的文可以使用pom中的属性--><build><resources><resource><directory>${project.basedir}/src/main/resources</directory><filtering>true</filtering></resource></resources>
<!--      跳过测试--><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version><configuration><skipTests>false</skipTests><!--是否完全跳过测试--><!--排除掉不参与测试的内容--><excludes><exclude>**/BookServiceTest.java</exclude></excludes></configuration></plugin></plugins></build>
</project>
  1. maven指令

mvn 指令 -D skipTests

mvn install -D skipTests


私服

私服简介

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

  • Nexus

    • Sonatype公司的一款maven私服产品

Nexus安装与启动

  • 在nexus-3.62.0-01-win64\nexus-3.62.0-01\bin 目录下启用cmd
  • 输入命令行启动服务器
    nexus.exe /run nexus
  • 访问服务器,在浏览器中输入 http://localhost:8081
  • 修改基础配置信息
    • 安装路径下etc目录中nexus-default.properties文件保存有nexus基础配置信息,例如默认访问端口
  • 修改服务器运行配置信息
    • 安装路径下bin目录中,nexus.vmoptions文件保存有nexus服务器启动对应的配置信息,例如默认占用空间

私服资源操作流程分析

在这里插入图片描述

私服仓库分类

在这里插入图片描述

私服仓库配置

  1. 在私服管理页面>设置界面>Repositories>create repository —— 新建宿主仓库,
    一般新建两个,(snapshot,release)
  2. 将新建的宿主仓库纳入到仓库组中,在maven-public仓库组的group选项中将两个仓库纳入,并save
  3. 在maven配置文件中设置访问私服权限以及私服访问路径
  • setting.xml
<setting><!-- 配置访问私服的权限 -->
<servers><server><id>lonelysnow-release</id> <!-- 私服中的服务器ID --><username>admin</username><password>123456</password></server><server><id>lonelysnow-snapshot</id> <username>admin</username><password>123456</password></server>
</servers><!-- 私服访问路径 -->
<mirrors><mirror><id>maven-public</id> <!--仓库组ID--><mirrorOf>*</mirrorOf><url>http://localhost:8081/repository/maven-public/</url></mirror>
</mirrors></setting>
  1. 工程上传到私服服务器设置
  • pom.xml
<!--    配置当前工程保存在私服中的具体位置--><distributionManagement><repository><id>lonelysnow-release</id><url>http://localhost:8081/repository/lonelysnow-release/</url></repository><snapshotRepository><id>lonelysnow-snapshot</id><url>http://localhost:8081/repository/lonelysnow-snapshot/</url></snapshotRepository></distributionManagement>
  1. 发布命令
    mvn deploy

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

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

相关文章

EasyExcel读取Excel数据(含多种方式)

目录 EasyExcel简介 使用EasyExcel进行读数据 引入依赖&#xff1a; EasyExcel提供了两种读取模式 使用 监听器 读取模式 1.创建一个实体类 2.创建监听器 代码 使用 同步读 读取模式 1.创建一个实体类 2.代码 添加导入数据库的逻辑 其实官方文档讲得很清楚&#xff…

为什么需要Bootloader

目录 一、Bootloader简介二、所需知识点一、Bootloader简介 Bootloader,又称为引导程序,对操作系统非常重要,是计算机和汽车控制器的一个关键组成部分。然而,因为它往往在后台发挥作用,它经常被忽视。其主要用于软件更新。但ECU的软件更新方式有很多,比如通过JTAG调试更…

C++_构造函数与析构函数

目录 1、构造函数的写法 1.2 构造函数优化写法 2、默认构造函数与默认成员函数 2.1 默认成员函数对不同类型的处理 3、对内置类型的补丁 4、析构函数 4.1 析构函数的写法 5、默认析构函数 6、初始化列表 6.1 初始化列表的写法 6.2 初始化列表的作用 6.3 回顾与总结 …

SpringBoot基础使用及对其他项目进行整合

目录 一、简介 1-讲述 2-特点 二、创建配置 1.创建 2.配置 3.代码生成 三、项目整合 每篇一获 一、简介 1-讲述 众所周知 Spring 应用需要进行大量的配置&#xff0c;各种 XML 配置和注解配置让人眼花缭乱&#xff0c;且极容易出错&#xff0c;因此 Spring 一度被称…

深入了解空号检测API:提升通信效率的关键

引言 随着通信技术的不断发展&#xff0c;人们对于通信效率的要求也越来越高。在通信过程中&#xff0c;空号检测是一个非常重要的环节&#xff0c;它可以帮助我们避免无效的通信&#xff0c;提高通信效率。而空号检测API则是实现空号检测功能的重要工具。 空号检测API 空号…

人工智能多模态:看、听、说,智能感知的全方位融合

导言 人工智能多模态技术是指通过整合视觉、听觉、语言等多个感知模态的信息&#xff0c;实现对丰富、多样化数据的理解与处理。本文将深入研究人工智能多模态的技术原理、应用场景以及对未来感知智能的影响。 1. 简介 人工智能多模态技术通过整合多个感知模态的信息&#xff…

安恒明御安全网关 aaa_local_web_preview文件上传漏洞复现

0x01 产品简介 明御安全网关秉持安全可视、简单有效的理念,以资产为视角,构建全流程防御的下一代安全防护体系,并融合传统防火墙、入侵检测、入侵防御系统、防病毒网关、上网行为管控、VPN网关、威胁情报等安全模块于一体的智慧化安全网关。 0x02 漏洞概述 明御安全网关在…

【信息学奥赛】拼在起跑线上,想入道就别落下自己!

编程无难事&#xff0c;只怕有心人&#xff0c;学就是了&#xff01; 文章目录 1 信息学奥赛简介2 信息学竞赛的经验回顾3 优秀参考图书推荐《信息学奥赛一本通关》4 高质量技术圈开放 1 信息学奥赛简介 信息学奥赛&#xff0c;作为全国中学生学科奥林匹克“五大学科竞赛”之一…

ide启动端口占用

ide启动端口占用 处理方式 1、打开cmd 命令窗口 2、查询端口 9020 的进程 netstat -ano | findstr :9020 3、关闭相关进程 taskkill /pid 22128 /f

知乎口碑问答推广怎么做?

知乎作为一个开放性的问答社区&#xff0c;把各行各业的用户链接在一起&#xff0c;用户可以在知乎平台分享自己的经验&#xff0c;也可以在知乎上搜索自己感兴趣的问题&#xff0c;因此就会有很多企业想要在知乎上进行问答营销推广自己的产品。那么&#xff0c;知乎问答营销推…

数据分析为何要学统计学(11)——如何进行时间序列分析

时间序列是由随时间变化的值构成&#xff0c;如产品销量、气温数据等等&#xff0c;该数据集合是个有序序列&#xff0c;除了数值&#xff0c;没有其他因素。通过对时间序列展开分析&#xff0c;能够回答如下问题&#xff1a; &#xff08;1&#xff09;被研究对象的活动特征是…

详解Keras3.0 KerasCV API: StableDiffusion image-generation model

Stable Diffusion 图像生成模型&#xff0c;可用于根据简短的文本描述&#xff08;称为“提示”&#xff09;生成图片 keras_cv.models.StableDiffusion(img_height512, img_width512, jit_compileTrue) 参数说明 img_height&#xff1a;int&#xff0c;要生成的图像的高度…