Maven高级

目录

一、分模块开发与设计

1. 分模块开发的意义

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

 (1)创建Maven模块

 (2)书写模块代码

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

二、依赖管理

1. 依赖传递 

2. 可选依赖

3. 排除依赖 

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

 三、聚合与继承

1. 聚合工程

 2. 聚合工程开发

(1)创建Maven模块,设置打包类型为pom

(2) 设置当前聚合工程所包含的子模块名称 

3. 继承关系

 4. 继承关系开发

(1)创建Maven模块,设置打包类型为pom

(2)在父工程的pom文件中配置依赖关系(子工程将沿用父工程中的依赖关系)

(3)配置子工程中可选的依赖关系 

(4)在子工程中配置当前工程所继承的父工程 

(5)在子工程中配置使用父工程中可选依赖的坐标 

5. 聚合与继承的区别

(1)聚合和继承的作用

(2)聚合和继承的相同点

(3)聚合和继承的不同点

四、属性管理

1. 属性 

 (1)属性配置与使用

①:定义属性

②:引用属性 

(2)资源文件引用属性 

①:定义属性

②:配置文件中引用属性 

③:开启资源文件目录加载属性的过滤器

④:配置maven打war包时,忽略web.xml检查

(3)其他属性(了解)

 2. 版本管理

(1)工程版本

a.  SNAPSHOT(快照版本)

b.  RELEASE(发布版本)

 (2)发布版本

a.  alpha版

b.  beta版

c.  纯数字版

五、多环境配置与应用

1. 多环境配置作用

 2. 多环境配置步骤

(1)定义多环境

(2)使用多环境(构建过程)

2. 跳过测试(了解)

(1)应用场景

(2) 跳过测试命令

(3)细粒度控制跳过测试

六、私服

1. 私服介绍

(2)Nexus安装与启动

 (3)私服资源操作流程分析

2. 私服仓库分类

 3. 资源上传与下载

 (1)从私服中下载依赖

 (2)上传依赖到私服中


一、分模块开发与设计

1. 分模块开发的意义

    模块拆分原则:项目的扩展性变强了,方便其他项目引用相同的功能。

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

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

(1)创建Maven模块

 (2)书写模块代码

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

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

mvn install

注意事项:
               团队内部开发需要发布模块功能到团队内部可共享的仓库中(私服)

二、依赖管理

依赖管理指当前项目运行所需的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依赖进来,是否可以做到?可以

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

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

<dependency><groupId>com.itheima</groupId><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文件)

作用

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

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

 2. 聚合工程开发

(1)创建Maven模块,设置打包类型为pom

<packaging>pom</packaging>

注意事项:
                每个maven工程都有对应的打包方式,默认为jar,web工程打包方式为war

(2) 设置当前聚合工程所包含的子模块名称 

<modules><module>../maven_ssm</module><module>../maven_pojo</module><module>../maven_dao</module>
</modules>

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

3. 继承关系

(1)什么叫继承?

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

       作用:
               简化配置
               减少版本冲突

 4. 继承关系开发

(1)创建Maven模块,设置打包类型为pom

<packaging>pom</packaging>

注意事项:
                建议父工程打包方式设置为pom 

(2)在父工程的pom文件中配置依赖关系(子工程将沿用父工程中的依赖关系)

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency>
……
</dependencies>

(3)配置子工程中可选的依赖关系 

<dependencyManagement><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency>
……</dependencies>
</dependencyManagement>

(4)在子工程中配置当前工程所继承的父工程 

<!--定义该工程的父工程-->
<parent><groupId>com.itheima</groupId><artifactId>maven_parent</artifactId><version>1.0-SNAPSHOT</version><!--填写父工程的pom文件,根据实际情况填写--><relativePath>../maven_parent/pom.xml</relativePath>
</parent>

(5)在子工程中配置使用父工程中可选依赖的坐标 

<dependencies><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency>
</dependencies>

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

5. 聚合与继承的区别

(1)聚合和继承的作用

           a. 聚合用于快速构建项目

           b. 继承用于快速配置

(2)聚合和继承的相同点:

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

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

(3)聚合和继承的不同点:

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

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

四、属性管理

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>

(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>

(3)其他属性(了解)

 2. 版本管理

(1)工程版本

a.  SNAPSHOT(快照版本)

           项目开发过程中临时输出的版本,称为快照版本
           快照版本会随着开发的进展不断更新

b.  RELEASE(发布版本)

          项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的
          即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本

 (2)发布版本

a.  alpha版
b.  beta版
c.  纯数字版

五、多环境配置与应用

1. 多环境配置作用

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

 

 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)使用多环境(构建过程)

【命令】:
mvn 指令 –P 环境定义id【范例】:
mvn install –P pro_env

2. 跳过测试(了解)

(1)应用场景

              功能更新中并且没有开发完毕
              快速打包
               ……

(2) 跳过测试命令

               mvn install –D skipTests

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

(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)私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题

            Nexus:

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

(2)Nexus安装与启动

 (3)私服资源操作流程分析

 

2. 私服仓库分类

 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,会去中央仓库下载,速度很慢。可以配置让私服去阿里云中下载依赖。

 (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

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

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

相关文章

记录:win10物理机ping不通虚拟机上的docker子网(已解决)

【说明】 windows10&#xff1a;已关闭防火墙 linux发行版本&#xff1a;centos7.9&#xff08;已禁用SElinux、已关闭防火墙&#xff09; 虚拟机软件&#xff1a;VMware Workstation 17 虚拟机网络模式&#xff1a;NAT模式 docker版本&#xff1a;20.4.5 docker网络模式…

一百六十一、Kettle——Linux上安装的kettle9.2开启carte服务(亲测、附流程截图)

一、目的 在Linux上安装好kettle9.2并且连接好各个数据库后&#xff0c;下面开启carte服务 二、实施步骤 &#xff08;一&#xff09;carte服务文件路径 kettle的Linux运行的carte服务文件是carte.sh &#xff08;二&#xff09;修改kettle安装路径下的pwd文件夹里的服务器…

华为将收取蜂窝物联网专利费,或将影响LPWAN市场发展

近日&#xff0c;华为正式公布了其4G和5G手机、Wi-Fi6设备和物联网产品的专利许可费率&#xff0c;其中包含了长距离通信技术蜂窝物联网。作为蜂窝物联网技术的先驱&#xff0c;华为是LTE Category NB (NB-IoT)、LTE Category M和其他4G物联网标准的主要贡献者。 在NB-IoT领域…

18-组件化开发 根组件

组件化开发 & 根组件: 1. 组件化:一个页面可以拆分成一个个组件&#xff0c;每个组件有着自己独立的结构、样式、行为. 好处:便于维护&#xff0c;利于复用->提升开发效率 组件分类: 普通组件 , 根组件 2. 根组件:整个应用最上层的组件&#xff0c;包裹所有普通小组件…

PHP酒店点菜管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 酒店点菜管理系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88232051 论文 https://…

项目管理实战笔记1:项目管理常识

序 看了下极客时间的《项目管理实战》&#xff0c;觉得跟之前学习PMP的标准资料还是有所侧重。重新整理下&#xff0c;相比书上繁杂的知识&#xff0c;这个更通俗易懂。 1 角色转换&#xff1a;三大误区 误区1&#xff1a;事必躬亲 自己做事情是可控的&#xff0c;做项目依赖…

【论文阅读】SHADEWATCHER:使用系统审计记录的推荐引导网络威胁分析(SP-2022)

SHADEWATCHER: Recommendation-guided CyberThreat Analysis using System Audit Records S&P-2022 新加坡国立大学、中国科学技术大学 Zengy J, Wang X, Liu J, et al. Shadewatcher: Recommendation-guided cyber threat analysis using system audit records[C]//2022 I…

编写Dockerfile制作自己的镜像并推送到私有仓库

说明&#xff1a;我将用到的私有仓库是Harbor&#xff0c;安装教程参考我的这一篇文章&#xff1a; 安装搭建私有仓库Harbor_Word_Smith_的博客-CSDN博客 一、案例1 1、要求 编写Dockerfile制作Web应用系统nginx镜像&#xff0c;生成镜像nginx:v1.1&#xff0c;并推送其到私…

Kotlin 使用 View Binding

解决的问题&#xff1a; 《第一行代码——Android》第三版 郭霖 P277 视图绑定的问题 描述&#xff1a; kotlin-android-extensions 插件已经弃用 butter knife 已经弃用 解决办法 推荐使用 View Binding 来代替 findViewById 使用方法 1、配置 build.gradle 2、在act…

设计模式之组合模式(Composite)的C++实现

1、组合模式的提出 在软件开发过程中&#xff0c;使用者Client过多依赖所操作对象内部的实现结构&#xff0c;如果对象内部的实现结构频繁发生变化&#xff0c;则使用者的代码结构将要频繁地修改&#xff0c;不利于代码地维护和扩展性&#xff1b;组合模式可以解决此类问题。组…

UE4/UE5 “无法双击打开.uproject 点击无反应“解决

一、方法一&#xff1a;运行UnrealVersionSelector.exe 1.找到Epic Game Lancher的安装目录&#xff0c; 在lancher->Engine->Binaries->Win64->UnrealVersionSelector.exe 2.把UnrealVersionSelector.exe 分别拷贝到UE4 不同版本引擎的 Engine->Binaries->…

solr快速上手:聚合分组查询|嵌套分组指南(十二)

0. 引言 solr作为搜索引擎经常用于各类查询场景&#xff0c;我们之前讲解了solr的查询语法&#xff0c;而除了普通的查询语法&#xff0c;有时我们还需要实现聚合查询来统计一些指标&#xff0c;所以今天我们接着来查看solr的聚合查询语法 1. 常用聚合查询语法 以下演示我们…

linux驱动学习3-外部中断

在做中断试验时&#xff0c;发现中断驱动总是insmod失败&#xff0c;之后定位到 gpio_request 失败&#xff0c;之后是想到使用的野火做好的系统&#xff0c;在uEnv.txt中会加载大量设备树插件&#xff0c;将key相关的设备树插件屏蔽即可。 linux中断API函数 中断号 每个中断…

“开发和运维”只是一个开始,最终目标是构建高质量的软件工程

随着技术的飞速发展&#xff0c;软件行业不断寻求改进和创新的方法来提供更高质量的产品。在这方面&#xff0c;DevOps已经展现出了巨大的潜力。通过打破开发和运维之间的壁垒&#xff0c;DevOps将持续集成、持续交付和自动化流程引入到软件开发中&#xff0c;使团队能够更快地…

选择大型语言模型自定义技术

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑器的3D应用场景 企业需要自定义模型来根据其特定用例和领域知识定制语言处理功能。自定义LLM使企业能够在特定的行业或组织环境中更高效&#xff0c;更准确地生成和理解文本。 自定义模型使企业能够创建符合其品牌…

CSS3基础

CSS3在CSS2的基础上增加了很多功能&#xff0c;如圆角、多背景、透明度、阴影等&#xff0c;以帮助开发人员解决一些实际问题。 1、初次使用CSS 与HTML5一样&#xff0c;CSS3也是一种标识语言&#xff0c;可以使用任意文本编辑器编写代码。下面简单介绍CSS3的基本用法。 1.1…

MAC钓鱼并Root权限上线CS并权限维持,以及所有的坑如何解决

本文转载于&#xff1a;https://www.freebuf.com/articles/web/350592.html 作者&#xff1a;文鸯涂鸦智能安全实验室 制作MAC 一、下载工具 首先从github上下载CrossC2。链接&#xff1a;https://github.com/gloxec/CrossC2/releases/tag/v3.1.0。 根据你CS客户端的操作系统选…

【uniapp】使用permission获取录音权限及实现录音功能

需求 app获取录音权限权限, 实现录音并且播放功能 实现 一. 使用permission获取录音权限 原博 : https://www.wanjunshijie.com/note/uniapp/3203.html 1.1 manifest.json 配置权限 android.permission.RECORD_AUDIO 1.2 permision使用和下载 ( 自行百度搜索即可 ) 1.3 获…

【Linux】传输层协议:UDP和TCP

争做西格玛男人 文章目录 一、UDP协议1.端口号2.理解UDP报头3.UDP的特点&#xff08;面向数据报&#xff0c;全双工&#xff09; 二、TCP协议1.理解TCP报头某些TCP的策略1.1 TCP报头字段&#xff08;TCP的黏包问题&#xff09;1.2 网络协议栈和linux系统的联系&#xff08;以p…

2023.08.20 学习周报

文章目录 摘要文献阅读1.题目2.现有问题3.解决方案4.本文贡献5.方法5.1 利用长短期记忆网络学习时空演化特征5.2 构建用于气象辅助信息编码的堆叠自编码器5.3 使用多任务学习发现全市通用模式5.4 模型 6. 实验6.1 数据集6.2 实验设置6.3 实验结果 7.结论8.展望 大气污染物传输总…