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

news2024/10/10 18:26:52

目录:

  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.coloradmin.cn/o/1862822.html

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

相关文章

这就是人性的丑恶,很残酷但很现实

这些年我喜欢跟垃圾撕破脸&#xff0c;包括垃圾亲戚&#xff0c;我是不会跟你讲什么感情的&#xff0c;该滚蛋就滚蛋。我最不喜欢听什么今日留一线&#xff0c;日后好相见。 之前我还不懂事的时候&#xff0c;就有那种亲戚叫我帮他介绍工作&#xff0c;我照做了。 结果&#xf…

实现批量自动化电商数据采集|商品详情页面|店铺商品信息|订单详情数据

电商数据采集是指通过技术手段获取电商平台上的商品信息、店铺信息和订单信息等数据。这些数据可以用于市场分析、竞品分析、用户行为分析等。 商品详情页面是指电商平台上展示商品详细信息的页面&#xff0c;包括商品名称、价格、图片、描述、评价等信息。通过采集商品详情页…

Word如何在页眉中插入和删除横线

你平常是否遇见到Word的页眉中有一条横线&#xff0c;怎么也删不了&#xff01;&#xff01;&#xff01; 今天刘小生分享如何在页眉中插入和删除横线&#xff0c;我们一起操练起来吧&#xff01; 1、Word页眉插入横线 选择【插入】-【页眉页脚】&#xff0c;在“页眉页脚”…

【arm扩容】新硬盘挂载操作说明

背景&#xff1a; 未经过扩容的arm设备不满足移植大镜像的条件。 需求&#xff1a; 我们要对arm设备扩容&#xff0c;现在要将一个500G的硬盘挂进去。而且要按照老arm设备的挂法&#xff0c;保持相同的目录结构。配置这台机器。 下面老arm设备的硬盘挂载相关信息。 lsblk …

Open3D 点云的体素化

目录 一、概述 1.1概念 1.2 应用场景 二、代码实现 三、实现效果 3.1原始点云 3.2体素化后点云 一、概述 1.1概念 体素化&#xff08;Voxelization&#xff09;是将三维空间数据&#xff08;例如点云&#xff09;转换为体素网格&#xff08;Voxel Grid&#xff09;的过…

<电力行业> - 《第2课:电力行业的一会两网》

1 一会 一会指的是电监会&#xff0c;全称是国家电力监管委员会。根据国务院批准《国家电力监管委员会职能配置内设机构和人员编制规定》&#xff0c;国家电力监管委员会按照国务院授权&#xff0c;行使行政执法职能&#xff0c;依照法律、法规统一履行全国电力监管职责。 2 …

使用 Splashtop REST API 简化远程管理

Splashtop 的 REST API 可无缝提高生产力和简化集成&#xff0c;使用户能够自动执行任务、定制工作流程&#xff0c;轻松与现有系统集成。 在与客户的合作中&#xff0c;我们对其需求和痛点有了更深入的了解&#xff0c;尤其在有利于实现自动化的领域。在本文中&#xff0c;我…

手机照片回收站无法恢复图片怎么办?2个措施,找回丢失的相册

我们的照片和视频存储在各种设备中&#xff0c;其中包括我们的智能手机&#xff0c;但有时候我们可能会不小心删除这些重要的数据。这时&#xff0c;手机照片回收站就显得尤为重要。然而&#xff0c;即使有回收站&#xff0c;我们也可能遇到一些问题&#xff0c;例如回收站中的…

【PyQt5】一文向您详细介绍 setSpacing() 的作用

【PyQt5】一文向您详细介绍 setSpacing() 的作用 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&am…

滑轨平行度和光路平行分别对测径仪的影响?

关键字:测径仪滑轨平行度,测径仪平行光路,测径仪发射器,测径仪接收器, 测径仪是一种用于测量物体直径的精密仪器&#xff0c;通常应用于工业自动化领域&#xff0c;比如钢铁、电缆、塑料管材等生产线上的在线尺寸监测。测径仪的测量精度会受到多种因素的影响&#xff0c;其中包…

数据结构-顺序表的交换排序

顺序表的初始化 const int M 505;typedef struct{int key; //关键元素int others; //其他元素 }info;typedef struct{info r[M1]; int length(); //表长 }SeqList,*PSeqList; 冒泡排序 分析&#xff1a; 顺序表的冒泡排序和数组的冒泡排序的…

XSS漏洞—XSS平台搭建与打cookie

一、跨站脚本攻击漏洞接收平台 推荐两个&#xff1a; 1&#xff09;xsser &#xff1a; XSS平台 - &#xff08;支持http/https&#xff09;XSS Platform 2&#xff09;蓝莲花 &#xff1a;GitHub - firesunCN/BlueLotus_XSSReceiver xsser&#xff1a; BlueLotus&#xff…

Deepl网页版使用方法

Deepl网页版科学使用方法 Deepl 网页版使用方法重要链接使用方式一、在没有使用插件前的Deepl界面二、安装DeepL.Crack.v1.2.7插件三、插件安装后打开[Deepl官网](https://www.deepl.com/zh/translator)即可四、在翻译整篇文章的权限怎么设置 Deepl 网页版使用方法 重要链接 …

轻松掌握:工科生如何高效阅读国际期刊和撰写论文(下)

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三连支…

最长上升子序列模型

此模型属于线性dp的分类&#xff1a; 基础知识 1.最长上升子序列 首先思考暴力的解决题目的方式&#xff1a;可以通过dfs指数型枚举&#xff0c;枚举出所有的序列&#xff0c;然后判断是否合理&#xff0c;然后找到最长的上升子序列的长度。 然后我们想如何优化&#xff1a…

计算机工具软件安装攻略:Chrome浏览器下载安装及使用

1 Chrome简介 Chrome是谷歌公司开发的一款免费网页浏览器它快速、稳定、安全拥有简洁流畅的界面和丰富的应用程序内置了强大的谷歌搜索引擎。Chrome使用Blink浏览器引擎和V8 JavaScript引擎支持多种插件和扩展程序让浏览网页更便捷。它可以与Android手机良好同步支持跨设备浏览…

Rust编写测试及控制执行

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

Prometheus:开源监控解决方案的力量

前言 在当今高度数字化和云原生应用的时代&#xff0c;监控系统是确保系统稳定性和性能的关键组成部分。而 Prometheus 作为一种开源的监控解决方案&#xff0c;正在成为越来越多企业和开发者的首选。本文将深入探讨 Prometheus 的特性、优势以及如何利用它来构建强大的监控系…

华为VPN通过安当ASP身份认证系统快速实现认证

华为VPN通过安当ASP身份认证系统实现认证的过程&#xff0c;主要涉及到Radius OTP&#xff08;一次性密码&#xff09;认证技术的使用。以下是实现这一过程的详细步骤&#xff1a; 1. 前提条件&#xff1a; 确保系统已经激活了Radius模块&#xff0c;并在安全设置中的RADIUS配…

6、双足机器人mpc构建

状态方案预处理由质心动力学状态方程将{状态递推序列x}展开: 其中: x为状态递推序列,其下是堆叠矩阵表达式。xn为n时刻的状态变量,un-1为n-1时刻的输入变量。输出y=x,参考目标Refer=0,误差e=y-Refer=x-0=x,n为预测空间;二次规划前述建立了空间状态方程,接下来就可以…