Maven进阶

学习目标

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

一、分模块开发与设计

1. 分模块开发的意义

问题导入

分模块开发对工程有什么好处?

模块拆分原则

目的:项目的扩展性变强了,方便其他项目引用相同的功能。

在这里插入图片描述

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

在这里插入图片描述

2. 分模块开发(模块拆分)

问题导入

一个完整的工程依据什么来进行模块的拆分?

2.1 创建Maven模块

在这里插入图片描述

2.2 书写模块代码

注意事项:

  1. 分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分
2.3 通过maven指令安装模块到本地仓库(install指令)
mvn install

注意事项:

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

二、依赖管理

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

  • 格式:

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

1. 依赖传递

问题导入

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

  • 依赖具有传递性
    • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
    • 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
    • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

在这里插入图片描述

2. 可选依赖

问题导入

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>

3. 排除依赖

问题导入

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>

4 可选依赖和排除依赖的区别

在这里插入图片描述

三、聚合与继承

1. 聚合工程

问题导入

什么叫聚合?

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

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

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

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

在这里插入图片描述

2. 聚合工程开发

问题导入

工程的打包方式有哪几种?

2.1 创建Maven模块,设置打包类型为pom
<packaging>pom</packaging>

注意事项:

  1. 每个maven工程都有对应的打包方式,默认为jar,web工程打包方式为war
2.2 设置当前聚合工程所包含的子模块名称
<modules>
    <module>../maven_ssm</module>
    <module>../maven_pojo</module>
    <module>../maven_dao</module>
</modules>

注意事项:

  1. 聚合工程中所包含的模块在进行构建时会根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关。
  2. 参与聚合的工程无法向上感知是否参与聚合,只能向下配置哪些模块参与本工程的聚合。

3. 继承关系

问题导入

什么叫继承?

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

在这里插入图片描述

4. 继承关系开发

4.1 创建Maven模块,设置打包类型为pom
<packaging>pom</packaging>

注意事项:

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

注意事项:

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

5. 聚合与继承的区别

问题导入

聚合和继承的作用?

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

四、属性管理

1. 属性

问题导入

定义属性有什么好处?

在这里插入图片描述

1.1 属性配置与使用
①:定义属性
<!--定义自定义属性-->
<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>
1.2 资源文件引用属性
①:定义属性
<!--定义自定义属性-->
<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>
1.3 其他属性(了解)
  • 属性列表
    • 自定义属性(常用)
    • 内置属性
    • Setting属性
    • Java系统属性
    • 环境变量属性

在这里插入图片描述

2. 版本管理

问题导入

项目开发的版本可以分为哪几种?

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

在这里插入图片描述

2.2 发布版本
  • alpha版
  • beta版
  • 纯数字版

五、多环境配置与应用

1. 多环境配置作用

问题导入

多环境配置有什么好处?

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

在这里插入图片描述

2. 多环境配置步骤

2.1 定义多环境
<!--定义多环境-->
<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>
2.2 使用多环境(构建过程)
【命令】:
mvn 指令 –P 环境定义id

【范例】:
mvn install –P pro_env

2. 跳过测试(了解)

问题导入

跳过测试会不会影响项目的构建过程?

2.1 应用场景
  • 功能更新中并且没有开发完毕
  • 快速打包
  • ……
2.2 跳过测试命令
  • mvn install –D skipTests

注意事项:

  1. 执行的项目构建指令必须包含测试生命周期,否则无效果。例如执行compile生命周期,不经过test生命周期。
2.3 细粒度控制跳过测试
<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>

六、私服

1. 私服介绍

问题导入

这里的私服和平时我们听的国服、体验服、欧服等等有什么区别?

1.1 介绍
  • 团队开发现状分析

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

  • Nexus

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

在这里插入图片描述

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

    • nexus.exe /run nexus
  • 访问服务器(默认端口:8081)

    • http://localhost:8081
  • 修改基础配置信息

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

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

在这里插入图片描述

2. 私服仓库分类

问题导入

私服仓库分为哪几种?

在这里插入图片描述

3. 资源上传与下载

问题导入

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

在这里插入图片描述

3.1 从私服中下载依赖

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

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

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

在这里插入图片描述

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

在这里插入图片描述

3.2 上传依赖到私服中

【第一步】配置本地仓库访问私服的权限(在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

对应的用户名和密码–>
heima-nexus

http://localhost:8081/repository/heima-releases/



heima-nexus

http://localhost:8081/repository/heima-snapshots/


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

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

mvn deploy






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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

接口测试时遇到接口加密了该如何处理?

对明文编码生成信息摘要&#xff0c;以防止被篡改。比如MD5使用的是Hash算法&#xff0c;无论多长的输入&#xff0c;MD5都会输出长度为128bits的一个串。摘要算法不要秘钥&#xff0c;客户端和服务端采用相同的摘要算法即可针对同一段明文获取一致的密文。 对称加密 对称加密…

VM下Unbunt虚拟机上网设置

系列文章目录 VM下Unbunt虚拟机上网设置 VM虚拟机上网设置 系列文章目录一、VM虚拟机上网设置 一、VM虚拟机上网设置 右击VM软件中你需要设置的虚拟机&#xff0c;选择设置 宿主机如果你用的是笔记本外加WIFI连接选择NAT网络模式 进入虚拟机看能否上网 不行的话&#xff0c;进…

计算机速成课Crash Course - 23. 屏幕 2D 图形显示

今天继续计算机速成课Crash Course的系列讲解。 更多技术文章&#xff0c;全网首发公众号 “摸鱼IT” 锁定 -上午11点 - &#xff0c;感谢大家关注、转发、点赞&#xff01; 计算机速成课Crash Course - 23. 屏幕& 2D 图形显示 (qq.com) 23. 屏幕& 2D 图形显示 这台…

【Go 快速入门】安装 Go 语言 | 开发工具 Goland | 第一个 Go 语言程序

文章目录 前言安装 Go 语言编译器 Goland运行 Go 程序补充 前言 本系列教程&#xff0c;目的是帮助一个有其他编程基础的 Go 语言小白快速入门 Go 语言&#xff0c;而非启发式学习。每篇幅保证不说废话&#xff0c;尽可能精炼总结&#xff0c;为上手后续的 Go 相关项目打下基础…

目标检测数据集 - 抽烟检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;抽烟检测数据集&#xff0c;真实合成场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如街景抽烟、写字楼抽烟、办公室抽烟、楼道抽烟、遮挡行人抽烟、严重遮挡行人抽烟数据&#xff1b;适用实际项目应用&#xff1a;公共场所监控或室内监控场…

2024年,每个人都应该知道的10个免费学习资源网站

在这个数字化的时代&#xff0c;有着许多宝贵的网络资源&#xff0c;提供了无限的学习机会&#xff0c;为每个人敞开了免费获取知识的大门。但很多人不知道它们的存在。今天分享10个免费且丰富的学习资源网站&#xff0c;希望对大家所有帮助。 1.freeCodeCamp 您可以免费学习…

<网络安全>《2 国内主要企业网络安全公司概览(二)》

4 北京天融信科技有限公司(简称天融信) 信息内容LOGO成立日期创始于1995年总部北京市海淀区上地东路1号院3号楼北侧301室背景民营企业是否上市天融信[002212]A股市值99亿主要产品网络安全大数据云服务员工规模6000多人简介天融信科技集团&#xff08;证券代码&#xff1a;0022…

支持向量机(Support Vector Machines)(需要优化)

1.优化目标 一个更加强大的算法广泛的应用于工业界和学术界&#xff0c;它被称为支持向量机(Support Vector Machine)。与逻辑回归和神经网络相比&#xff0c;支持向量机&#xff0c;或者简称 SVM&#xff0c;在学习复杂的非线性方程时提供了一种更为清晰&#xff0c;更加强大…

利用C语言实例描述程序中的内聚和耦合

编程时&#xff0c;我们讲究的是高内聚低耦合&#xff0c;在协同开发、代码移植、维护等环节都起到很重要的作用。 一、原理篇 而低耦合&#xff0c;是指模块之间尽可能的使其独立存在&#xff0c;模块之间不产生联系不可能&#xff0c;但模块与模块之间的接口应该尽量少而简单…

从零学习Hession RPC

为什么学习Hessian RPC&#xff1f; 存粹的RPC&#xff0c;只解决PRC的四个核心问题&#xff08;1.网络通信2.协议 3.序列化 4.代理&#xff09;Java写的HessianRPC落伍了&#xff0c;但是它的序列化方式还保存着&#xff0c;被Dubbo(Hessian Lite)使用。 被落伍&#xff0c;只…

浅谈DNS的工作原理及其作用

DNS&#xff0c;全称为Domain Name System&#xff0c;即域名系统&#xff0c;是一种用于将域名和IP地址相互映射的分布式数据库系统。它将可读的域名转换为对应的IP地址&#xff0c;使得用户可以更方便地通过域名来访问网络上的资源。今天锐成就简单探讨一下DNS的工作原理及其…

Android网络状态差的处理方案

1,在没有网络的情况下的处理 相信大家面对这个情况处理起来是毫无压力的. //有网 if (Utils.isNetworkConnected(this)) {loadingView.setVisibility(View.VISIBLE);//显示正在加载//联网获取数据getDataFromNet(); } else {//没网直接显示本地数据.showView();Toast.makeTex…

Ubuntu20.04 安装 ROS noetic + MAVROS

本文在 AlphaCatOvO【ROS】在 Ubuntu 20.04 安装 ROS 的详细教程 基础上&#xff0c;根据实际安装经验&#xff0c;稍微进行补充。 一、安装Ubuntu20.04 假设已经正确安装。 二、安装 ROS noetic 2.1 换源 执行 sudo apt update sudo mv /etc/apt/sources.list /etc/apt/…

C++代码入门07 函数调用语句

图源&#xff1a;文心一言 听课笔记简单整理&#xff0c;包括以下内容”&#x1f40b;3.2 二进制转十进制、&#x1f40b;3.3 数学公式1&#xff1a;用反切函数表示pi、&#x1f40b;3.4 判断回文数、&#x1f40b;3.5 数学公式2&#xff1a;分段函数、&#x1f40b;3.6 扔骰子…

容器安全工具

容器安全工具是用于保护和监控容器环境安全的工具。它们提供了一系列功能,包括容器镜像的漏洞扫描、运行时监控、事件日志记录、访问控制、运行权限管理等。以下是一些常见的容器安全工具: 1. Docker Bench Security:用于检查Docker环境配置的安全性,提供一些最佳实践建议…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第二天-ARM汇编(物联技术666)

链接&#xff1a;https://pan.baidu.com/s/1bG0tuVaACATvjLwD05j1FQ?pwd1688 提取码&#xff1a;1688 上午&#xff1a;ARM编程模型 下午&#xff1a;常用ARM指令 教学内容&#xff1a; 1、ARM数据类型 字节&#xff08;Byte&#xff09;&#xff1a;在ARM体系结构及常见的…

无限可能!安全狗入选“潜力十强企业”

近日&#xff0c;等级保护测评公布了“2023年网络安全优秀评选”活动评选结果。 作为国内云原生安全领导厂商&#xff0c;安全狗凭借突出的综合实力&#xff0c;荣获“潜力十强企业”称号。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;创办于…

redis-发布缓存

一.redis的发布订阅 什么 是发布和订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 Redis的发布和订阅 客户端订阅频道发布的消息 频道发布消息 订阅者就可…

信创UOS

信创UOS 国产操作系统 文章目录 信创UOS前言一、信创UOS是什么二、信创UOS的特点与局限性1. 信创UOS的特点2. 信创UOS的局限性三、信创UOS常见故障总结前言 信创UOS(Union Operating System)是由中国软件与技术服务股份有限公司(CS&S)开发的一款操作系统。它是中国政府…

SpringCloudFunction漏洞分析

前言 SpringCloudFunction是SpringBoot开发的一个Servless中间件&#xff08;FAAS&#xff09;&#xff0c;支持基于SpEL的函数式动态路由。在特定配置下&#xff0c;3 < 版本 < 3.2.2&#xff08; commit dc5128b 之前&#xff09;存在SpEL表达式执行导致的RCE。 补丁分…
最新文章