黑马程序员——Spring框架——day08——maven高级

目录:

  1. 分模块开发与设计
    1. 分模块开发的意义
      1. 问题导入
      2. 模块拆分原则
    2. 分模块开发(模块拆分)
      1. 问题导入
      2. 创建Maven模块
      3. 书写模块代码
      4. 通过maven指令安装模块到本地仓库(install指令)
  2. 依赖管理
    1. 依赖传递
      1. 问题导入
    2. 可选依赖
      1. 问题导入
    3. 排除依赖
      1. 问题导入
    4. 可选依赖和排除依赖的区别
  3. 聚合与继承
    1. 聚合工程
      1. 问题导入
    2. 聚合工程开发
      1. 问题导入
        1. 创建Maven模块,设置打包类型为pom
        2. 设置当前聚合工程所包含的子模块名称
    3. 继承关系
      1. 问题导入
    4. 继承关系开发
      1. 创建Maven模块,设置打包类型为pom
      2. 在父工程的pom文件中配置依赖关系(子工程将沿用父工程中的依赖关系)
      3. 配置子工程中可选的依赖关系
      4. 在子工程中配置当前工程所继承的父工程
      5. 在子工程中配置使用父工程中可选依赖的坐标
    5. 聚合与继承的区别
      1. 问题导入
  4. 属性管理
    1. 属性
    2. 问题导入
    3. 属性配置与使用
      1. ①:定义属性
      2. ②:引用属性
    4. 资源文件引用属性
      1. ①:定义属性
      2. ②:配置文件中引用属性
      3. ③:开启资源文件目录加载属性的过滤器
      4. ④:配置maven打war包时,忽略web.xml检查
    5. 其他属性(了解)
    6. 版本管理
      1. 问题导入
      2. 工程版本
      3. 发布版本
  5. 多环境配置与应用
    1. 多环境配置作用
      1. 问题导入
    2. 多环境配置步骤
      1. 定义多环境
      2. 使用多环境(构建过程)
    3. 跳过测试(了解)
      1. 问题导入
      2. 应用场景
      3. 跳过测试命令
      4. 细粒度控制跳过测试
  6. 私服
    1. 私服介绍
      1. 问题导入
      2. 介绍
      3. Nexus安装与启动
      4. 私服资源操作流程分析
    2. 私服仓库分类
      1. 问题导入
    3. 资源上传与下载
      1. 问题导入
      2. 从私服中下载依赖
      3. 上传依赖到私服中

1.分模块开发与设计

分模块开发的意义
问题导入
  • 分模块开发对工程有什么好处?
模块拆分原则
  • 目的:项目的扩展性变强了,方便其他项目引用相同的功能。

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

分模块开发(模块拆分)
问题导入
  • 一个完整的工程依据什么来进行模块的拆分?
创建Maven模块

书写模块代码

注意事项:

  1. 分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分

通过maven指令安装模块到本地仓库(install指令)

mvn install

注意事项:

  1. 团队内部开发需要发布模块功能到团队内部可共享的仓库中(私服)

2.依赖管理

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

  • 格式:

<!--设置当前项目所依赖的所有jar-->
<dependencies><!--设置具体的依赖--><dependency><!--依赖所属群组id--><groupId>org.springframework</groupId><!--依赖所属项目id--><artifactId>spring-webmvc</artifactId><!--依赖版本号--><version>5.2.10.RELEASE</version></dependency>
</dependencies>
依赖传递
问题导入

A依赖B,B依赖C,A是否依赖于C呢?

  • 依赖具有传递性

    • 直接依赖:在当前项目中通过依赖配置建立的依赖关系

    • 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源

    • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

 

可选依赖
问题导入

A依赖B,B依赖C,如果A不想将C依赖进来,是否可以做到?

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

<dependency><groupId>com.itheima</groupId><artifactId>maven_03_pojo</artifactId><version>1.0-SNAPSHOT</version><!--可选依赖是隐藏当前工程所依赖的资源,隐藏后对应资源将不具有依赖传递性--><optional>false</optional>
</dependency>
排除依赖
问题导入

A依赖B,B依赖C,如果A不想将C依赖进来,是否可以做到?

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

  • 排除依赖资源仅指定GA即可,无需指定V

<dependency><groupId>com.itheima</group Id><artifactId>maven_04_dao</artifactId><version>1.0-SNAPSHOT</version><!--排除依赖是隐藏当前资源对应的依赖关系--><exclusions><exclusion><groupId>log4j</groupId><artifactId>log4j</artifactId></exclusion><exclusion><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId></exclusion></exclusions>
</dependency>
可选依赖和排除依赖的区别

3.聚合与继承

聚合工程
问题导入

什么叫聚合?

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

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

  • 作用:使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建

    • 当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题

聚合工程开发
问题导入
  • 工程的打包方式有哪几种?
创建Maven模块,设置打包类型为pom
<packaging>pom</packaging>

注意事项:

  1. 每个maven工程都有对应的打包方式,默认为jar,web工程打包方式为war

设置当前聚合工程所包含的子模块名称
<modules><module>../maven_ssm</module><module>../maven_pojo</module><module>../maven_dao</module>
</modules>

注意事项:

  1. 聚合工程中所包含的模块在进行构建时会根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关。

  2. 参与聚合的工程无法向上感知是否参与聚合,只能向下配置哪些模块参与本工程的聚合。

继承关系
问题导入

什么叫继承?

  • 概念:

    • 继承描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承

  • 作用:

    • 简化配置

    • 减少版本冲突

继承关系开发
创建Maven模块,设置打包类型为pom
<packaging>pom</packaging>

注意事项:

  1. 建议父工程打包方式设置为pom

在父工程的pom文件中配置依赖关系(子工程将沿用父工程中的依赖关系)
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency>……
</dependencies>
配置子工程中可选的依赖关系
<dependencyManagement><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency>……</dependencies>
</dependencyManagement>
在子工程中配置当前工程所继承的父工程
<!--定义该工程的父工程-->
<parent><groupId>com.itheima</groupId><artifactId>maven_parent</artifactId><version>1.0-SNAPSHOT</version><!--填写父工程的pom文件,根据实际情况填写--><relativePath>../maven_parent/pom.xml</relativePath>
</parent>
在子工程中配置使用父工程中可选依赖的坐标
<dependencies><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency>
</dependencies>

注意事项:

  1. 子工程中使用父工程中的可选依赖时,仅需要提供群组id和项目id,无需提供版本,版本由父工程统一提供,避免版本冲突

  2. 子工程中还可以定义父工程中没有定义的依赖关系

聚合与继承的区别
问题导入

聚合和继承的作用?

  • 作用

    • 聚合用于快速构建项目

    • 继承用于快速配置

  • 相同点:

    • 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中

    • 聚合与继承均属于设计型模块,并无实际的模块内容

  • 不同点:

    • 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些

    • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

4.属性管理

属性
问题导入

定义属性有什么好处?

属性配置与使用
①:定义属性
<!--定义自定义属性-->
<properties><spring.version>5.2.10.RELEASE</spring.version><junit.version>4.12</junit.version>
</properties>
②:引用属性
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version>
</dependency>
资源文件引用属性
①:定义属性
<!--定义自定义属性-->
<properties><spring.version>5.2.10.RELEASE</spring.version><junit.version>4.12</junit.version><jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url>
</properties>
②:配置文件中引用属性
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc.password=root
③:开启资源文件目录加载属性的过滤器
<build><resources><resource><directory>${project.basedir}/src/main/resources</directory><filtering>true</filtering></resource></resources>
</build>
④:配置maven打war包时,忽略web.xml检查
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.2.3</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration>
</plugin>
其他属性(了解)
  • 属性列表

    • 自定义属性(常用)

    • 内置属性

    • Setting属性

    • Java系统属性

    • 环境变量属性

版本管理
问题导入
  • 项目开发的版本可以分为哪几种?
工程版本
  • SNAPSHOT(快照版本)

    • 项目开发过程中临时输出的版本,称为快照版本

    • 快照版本会随着开发的进展不断更新

  • RELEASE(发布版本)

    • 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的

    • 即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本

发布版本
  • alpha版

  • beta版

  • 纯数字版

5.多环境配置与应用

多环境配置作用
问题导入

多环境配置有什么好处?

  • maven提供配置多种环境的设定,帮助开发者使用过程中快速切换环境

多环境配置步骤
定义多环境
<!--定义多环境-->
<profiles><!--定义具体的环境:生产环境--><profile><!--定义环境对应的唯一名称--><id>env_dep</id><!--定义环境中专用的属性值--><properties><jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url></properties><!--设置默认启动--><activation><activeByDefault>true</activeByDefault></activation></profile><!--定义具体的环境:开发环境--><profile><id>env_pro</id>……</profile>
</profiles>
使用多环境(构建过程)
【命令】:
mvn 指令 –P 环境定义id【范例】:
mvn install –P pro_env
跳过测试(了解)
问题导入
  • 跳过测试会不会影响项目的构建过程?
应用场景
  • 功能更新中并且没有开发完毕

  • 快速打包

  • ……

跳过测试命令
  • mvn install –D skipTests

注意事项:

  1. 执行的项目构建指令必须包含测试生命周期,否则无效果。例如执行compile生命周期,不经过test生命周期。

细粒度控制跳过测试
<plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version><configuration><skipTests>true</skipTests><!--设置跳过测试--><includes><!--包含指定的测试用例--><include>**/User*Test.java</include></includes><excludes><!--排除指定的测试用例--><exclude>**/User*TestCase.java</exclude></excludes></configuration>
</plugin>

6.私服

私服介绍
问题导入
  • 这里的私服和平时我们听的国服、体验服、欧服等等有什么区别?
介绍
  • 团队开发现状分析

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

  • Nexus

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

    • 下载地址:Download

 

Nexus安装与启动
  • 启动服务器(命令行启动)

    • nexus.exe /run nexus

  • 访问服务器(默认端口:8081)

    • http://localhost:8081

  • 修改基础配置信息

    • 安装路径下etc目录中nexus-default.properties文件保存有nexus基础配置信息,例如默认访问端口。

  • 修改服务器运行配置信息

    • 安装路径下bin目录中nexus.vmoptions文件保存有nexus服务器启动对应的配置信息,例如默认占用内存空间。

私服资源操作流程分析

私服仓库分类
问题导入

私服仓库分为哪几种?

资源上传与下载
问题导入

往私服上传资源是否需要身份认证?在哪里设置认证信息?

从私服中下载依赖

【第一步】在maven的settings.xml中<mirrors>标签中配置,此时就需要注释掉aliyun的配置。

<mirror><id>nexus-heima</id><mirrorOf>*</mirrorOf><url>http://localhost:8081/repository/maven-public/</url>
</mirror>

 【第二步】在nexus中设置允许匿名下载,如果不允许将不会从私服中下载依赖

如果私服中没有对应的jar,会去中央仓库下载,速度很慢。可以配置让私服去阿里云中下载依赖。

上传依赖到私服中

【第一步】配置本地仓库访问私服的权限(在maven的settings.xml的servers标签中配置)

<server><!--id任意,多个server的id不重复就行,后面会用到--><id>heima-nexus</id><username>admin</username><password>123456</password><!--填写自己nexus设定的登录秘密-->
</server>

 【第二步】配置当前项目访问私服上传资源的保存位置(项目的pom.xml文件中配置)

<distributionManagement><repository><!--和maven/settings.xml中server中的id一致,表示使用该id对应的用户名和密码--><id>heima-nexus</id><!--如果jar的版本是release版本,那么就上传到这个仓库,根据自己情况修改--><url>http://localhost:8081/repository/heima-releases/</url></repository><snapshotRepository><!--和maven/settings.xml中server中的id一致,表示使用该id对应的用户名和密码--><id>heima-nexus</id><!--如果jar的版本是snapshot版本,那么就上传到这个仓库,根据自己情况修改--><url>http://localhost:8081/repository/heima-snapshots/</url></snapshotRepository>
</distributionManagement>

==注意:要和maven的settings.xml中server中定义的<id>heima-nexus</id>对应==

【第三步】发布资源到私服命令

mvn deploy

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

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

相关文章

数据结构与算法—空间复杂度详解与示例(C#,C++)

文章目录 1. 数据结构概述2. 空间复杂度的定义及影响因素3. 空间复杂度的区分常数空间复杂度&#xff08;O(1)&#xff09;线性空间复杂度&#xff08;O(n)&#xff09;其他空间复杂度 4. 几种典型数据结构的优缺点分析数组&#xff08;Array&#xff09;链表&#xff08;Linke…

10 种最佳编程字体

1.Commit Mono 这是我目前最喜欢的字体。这是我用来输入这篇文章的字体。作者 Eigil Nikolajsen 于 2023 年使用Fira Code和JetBrains Mono作为灵感开发了它。 Commit Mono 清晰易读&#xff0c;可配置性强。您可以根据粗细&#xff08;我更喜欢最细的 300&#xff09;、连字、…

联发科MT6775(Helio P70)_MTK6775处理器规格参数_处理器资料

联发科MT6775(Helio P70)采用了台积电12nm工艺制程八核处理器&#xff0c;由4颗 Arm Cortex-A73 2.1GHz 4颗Arm Cortex-A53 2.0GHz组成。其GPU为ARM Mali-G72 MP3&#xff0c;运行时高达900MHz&#xff0c;比上一代Helio P60效能提升了13%。 值得注意的是&#xff0c;联发科MT…

Charles抓包工具系列文章(四)-- Rewrite 重写工具

一、背景 这是一款比Map Local/Remote 还强大的工具&#xff0c;更加灵活&#xff0c;体现在以下几点&#xff1a; 重写request报文重写response报文header 字段的增删改query param 字段的增删改重写 body 字段改写http 响应状态status重写host/url/path 从这也可以看出其强…

R语言——数据与运算

练习基本运算&#xff1a; v <- c(2,4,6,9)t <- c(1,4,7,9)print(v>t)print(v < t)print(v t)print(v!t)print(v>t)print(v<t) v <- c(3,1,TRUE,23i)t <- c(4,1,FALSE,23i)print(v&t)print(v|t)print(!v)v <- c(3,0,TRUE,22i)t <- c(1,3,T…

ITIL发展之路:从v3到v4的演变与应用

在当今瞬息万变的技术环境中&#xff0c;IT服务管理&#xff08;ITSM&#xff09;已成为企业运营的关键支柱。ITIL&#xff08;Information Technology Infrastructure Library&#xff0c;信息技术基础设施库&#xff09;作为全球公认的ITSM最佳实践框架&#xff0c;帮助组织在…

【linux基础awk】如何基于强大的awk打印列、计算

打印列 awk {print $1} test.txt#-F参数去指定分隔的字符 awk -F "," {print $1,$2} file 匹配打印列 awk /a/ {print $4 "\t" $3} test.txt筛选数值 仅打印那些含有多于18个字符的行。awk length($0) > 18 test.txt 统计数目 #统计行数 less num…

高考填报志愿,找准自己的真兴趣来选择专业

又是一年一度的高考填报志愿的时间了&#xff0c;毕业生们要根据自己的分数&#xff0c;在很短的时间内确定自己的专业。专业千万条&#xff0c;兴趣第一条。专业的选择很大程度上决定着大学的学习生活是否顺利&#xff0c;甚至决定着以后的职业生涯。在纷繁复杂的专业中&#…

Python深度学习技术

原文链接&#xff1a;Python深度学习技术 近年来&#xff0c;伴随着以卷积神经网络&#xff08;CNN&#xff09;为代表的深度学习的快速发展&#xff0c;人工智能迈入了第三次发展浪潮&#xff0c;AI技术在各个领域中的应用越来越广泛。Transformer模型&#xff08;BERT、GPT-…

写一个坏越的个人天地(三)

昨天卡巴卡巴还是投出了学习代码以来的第一份简历,遇到好的岗位还是想争取下的吧,虽然我觉得大概率还是gg了。 昨天完成了首页的上半部分 下半部分我的构思是左右栏,左侧为菜单栏,右侧为业务栏,左侧调整右侧router进行切换内容 可以用来展示js css的小demo 稍微调整下ro…

Vue3 国际化i18n

国际化i18n方案 1. 什么是i18n2. i18n安装、配置及使用2.1 安装2.2 配置2.3 挂载到实例2.4 组件中使用2.5 语言切换 1. 什么是i18n i18n 是“国际化”的简称。在资讯领域&#xff0c;国际化(i18n)指让产品&#xff08;出版物&#xff0c;软件&#xff0c;硬件等&#xff09;无…

[UE虚幻引擎] DTSpeechVoice 文字转语音播放 插件说明

本插件可以在UE中使用蓝图把文本转成语音播放&#xff0c;播放的声音引擎是使用Windows自带的语音引擎&#xff0c;支持Win10&#xff0c;Win11。 系统设置 首先确认电脑是否有语音系统&#xff0c;一般正常安装的电脑都是自带的。 如果要播放多语言的&#xff0c;请自己下载其…

Python光束三维二维标量场和算法

&#x1f3af;要点 &#x1f3af;矢量计算和绘图&#xff1a;&#x1f58a;二维&#xff0c;三维 | &#x1f58a;转换矢量图 | &#x1f58a;矢量和矩阵计算 | &#x1f58a;矢量空间变换和计算 | &#x1f58a;解矢量线性方程 | &#x1f3af;数学和物理矢量计算&#xff1a…

无中心化崛起:Web3对传统互联网的冲击与重构

随着Web3技术的兴起&#xff0c;传统互联网面临着前所未有的挑战和重构。本文将深入探讨Web3的无中心化特性如何对传统互联网产生冲击&#xff0c;以及其可能带来的重大影响和未来发展趋势。 1. 传统互联网的局限与问题 传统互联网&#xff0c;通常称为Web2&#xff0c;主要依…

kafka--发布-订阅消息系统

1. Kafka概述 1. kafka是什么 kafka是分布式的、高并发的、基于发布/订阅模式的消息队列软件系统。 kafka中的重要组件 Producer&#xff1a;消息生产者&#xff0c;发布消息到Kafka集群的终端或服务Consume&#xff1a;消费者&#xff0c;从Kafka集群中消费消息的终端或服…

《mnist_model.h5》在flask中加载mnist模型

一、在tensorflow中新建及保存模型 启动Jupyter Notebook 新建Notebook 代码 from flask import Flask, request, jsonify # type: ignore import numpy as np # type: ignore import tensorflow as tf # type: ignore import json from PIL import Image # type: i…

Rust编写测试及控制执行

编写测试及控制执行 在 Rust 中&#xff0c;测试是通过函数的方式实现的&#xff0c;它可以用于验证被测试代码的正确性。测试函数往往依次执行以下三种行为&#xff1a; 设置所需的数据或状态运行想要测试的代码判断( assert )返回的结果是否符合预期 让我们来看看该如何使…

sd-wan跨境访问|公司海外工厂加速访问ERP系统解决方案

随着全球化的深入发展和国际市场竞争的加剧&#xff0c;越来越多的企业选择在国外建立工厂&#xff0c;以扩大市场份额和优化资源配置。然而&#xff0c;这也带来了一系列新的挑战&#xff0c;其中之一就是国外工厂员工在访问国内ERP系统时面临的超高延迟等问题。这一问题不仅严…

Linux_应用篇(27) CMake 入门与进阶

在前面章节内容中&#xff0c;我们编写了很多示例程序&#xff0c;但这些示例程序都只有一个.c 源文件&#xff0c;非常简单。 所以&#xff0c;编译这些示例代码其实都非常简单&#xff0c;直接使用 GCC 编译器编译即可&#xff0c;连 Makefile 都不需要。但是&#xff0c;在实…

神经网路学习7-线性模型

一个最简单的线性模型&#xff0c;w是权重&#xff0c;一般来说会取随机值&#xff0c;然后不断学习直到与预期相同 如此以此取每个值与真实值的差值&#xff0c;即评估误差 即找一个合适的权重w&#xff0c;使得平均误差最小 上面的是针对单个样本的&#xff0c;后面的是对…