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

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

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

相关文章

[JavaWeb]【四】web后端开发-SpringBootWeb入门

目录 一 Spring 二 SpringBootWeb入门 2.1 入门需求 2.2 分析 2.3 开始创建SpringBootWeb 2.4 创建类实现需求 2.5 启动程序 2.6 访问 三 HTTP协议 3.1 HTTP-概述 3.2 HTTP-请求协议 3.3 HTTP-响应协议 3.3.1 响应状态码 && 响应类型 3.4 HTTP-协议解析 前言…

孤注一掷——基于文心Ernie-3.0大模型的影评情感分析

孤注一掷——基于文心Ernie-3.0大模型的影评情感分析 文章目录 孤注一掷——基于文心Ernie-3.0大模型的影评情感分析写在前面一、数据直观可视化1.1 各评价所占人数1.2 词云可视化 二、数据处理2.1 清洗数据2.2 划分数据集2.3 加载数据2.4 展示数据 三、RNIE 3.0文心大模型3.1 …

前端基础(Vue的模块化开发)

目录 前言 响应式基础 ref reactive 学习成果展示 Vue项目搭建 总结 前言 前面学习了前端HMTL、CSS样式、JavaScript以及Vue框架的简单适用&#xff0c;接下来运用前面的基础继续学习Vue&#xff0c;运用前端模块化编程的思想。 响应式基础 ref reactive 关于ref和react…

Redis中的分布式锁及其延生的问题

前言 本文将着重介绍Redis中的分布式锁及其与出现的死锁和锁误删问题 什么是分布式锁 首先问题就是什么是分布式锁&#xff0c;分布式锁就是分布式系统中实现并发控制的一种锁机制&#xff0c;它可以保证多个节点在同一个时间只有有一个能成功竞争到系统资源&#xff08;共享…

08.异常处理与异常Hook(软件断点Hook,硬件断点Hook)

文章目录 异常处理异常Hook&#xff1a;VEH软件断点HOOKVEH硬件断点HOOK 异常处理 1.结构化异常SEH #include <iostream>int main() {goto Exit;__try {//受保护节int a 0;int b 0;int c a / b;std::cout << "触发异常" << std::endl;}/*EXCE…

【JVM】垃圾回收算法

目录 一、判断对象已“死” 1.1、引用计数算法 1.2、可达性分析算法 1.3、引用的概念 二、垃圾收集算法理论 2.1、分代收集理论 三、垃圾收集算法 3.1、标记--清除算法 3.2、标记--复制算法 3.3、标记--整理算法 一、判断对象已“死” 在堆里面存放着Java世界中几乎所…

ATF(TF-A)安全通告 TFV-8 (CVE-2018-19440)

安全之安全(security)博客目录导读 ATF(TF-A)安全通告汇总 目录 一、ATF(TF-A)安全通告 TFV-8 (CVE-2018-19440) 二、CVE-2018-19440 一、ATF(TF-A)安全通告 TFV-8 (CVE-2018-19440) Title 不保存x0~x3寄存器可能会将信息从一个非安全世界的SMC client泄漏到另一个 CVE ID …

【电子通识】什么是异常分析中的A-B-A方法

工作有了一定的经验之后&#xff0c;在做问题分析的时候&#xff0c;经常会听到别人说把这个部品&#xff08;芯片/模块&#xff09;拿去ABA一下&#xff0c;看看跟谁走。那么对于新人来说是否就会问一个问题&#xff1a;什么是ABA呢&#xff1f; A-B-A 交换是一种简单直接的交…

Nvidia Jetson 编解码开发(1)介绍

前言 由于项目需要&#xff0c;需要开发Jetson平台的硬件编解码&#xff1b; 优化CPU带宽&#xff0c;后续主要以介绍硬件编解码为主 1.Jetson各平台编解码性能说明 如下是拿了Jetson nano/tx2/Xavier等几个平台做对比&#xff1b; 这里说明的编解码性能主要是对硬件来说的…

CefSharp自定义缓存实现

提高页面加载加速&#xff1a;CefSharp缓存可以缓存已经加载过的页面和资源&#xff0c;当用户再次访问相同的页面时&#xff0c;可以直接从缓存中加载&#xff0c;而不需要重新下载和解析页面和资源&#xff0c;从而加快页面加载速度。减少网络流量&#xff1a;使用缓存可以减…

使用chatGPT-4 畅聊量子物理学(三)

集合了人类智慧的照片&#xff0c;来自 1927 年举行的第五届索尔维国际会议。 Omer 什么是“物理系统在被测量之前不具有确定的属性。量子力学只能预测给定测量的可能结果的概率分布" ChatGPT 这句话描述了量子力学中的一种基本原则&#xff0c;即“物理系统在被测量之前…

使用Dockerfile部署java项目

1、移动java包到创建的目录下 2、编写Dockerfile文件 在同一目录下使用如下命令创建文件 touch Dockerfile 文件内容如下&#xff1a; #依赖的父镜像 FROM java:8 #作者 MAINTAINER maxurui #jar包添加到镜像中 ADD springboot3-0.0.1-SNAPSHOT.jar springboot3-0.0.1-SNAPSHO…

外贸邮箱签名怎么写?改版提升点击率的关键技巧揭秘!

外贸业务常用的一种营销工具就是电子邮件&#xff0c;而电子邮件的签名作为邮件信任度和品牌价值的体现&#xff0c;同样也是非常重要的。那么如何写一份优秀的外贸邮箱签名呢&#xff1f; 下面是几点建议。 第一&#xff0c;突出品牌形象。在签名中加入公司标志或相关图片可以…

Redis专题-秒杀

Redis专题-并发/秒杀 开局一张图&#xff0c;内容全靠“编”。 昨天晚上在群友里看到有人在讨论库存并发的问题&#xff0c;看到这里我就决定写一篇关于redis秒杀的文章。 1、理论部分 我们看看一般我们库存是怎么出问题的 其实redis提供了两种解决方案&#xff1a;加锁和原子操…

JavaWeb_LeadNews_Day6-Kafka

JavaWeb_LeadNews_Day6-Kafka Kafka概述安装配置kafka入门kafka高可用方案kafka详解生产者同步异步发送消息生产者参数配置消费者同步异步提交偏移量 SpringBoot集成kafka 自媒体文章上下架实现思路具体实现 来源Gitee Kafka 概述 对比 选择 介绍 producer: 发布消息的对象称…

开源远程控制硬件 BliKVM v4测试 1000公里外远程重装系统

测试准备 测试时间&#xff1a;20230818 测试硬件&#xff1a;BliKVM v4 文档 BliKVM v4是一款生产就绪、即插即用的 KVM-over-IP 设备&#xff0c;为专业用户提供了远程服务器或工作站管理的便捷解决方案。 它基于Linux并且完全开源。 借助 BliKVM&#xff0c;您可以轻松打…

19-普通组件的注册使用

普通组件的注册使用-局部注册 一. 组件注册的两种方式:1.局部注册:只能在注册的组件内使用 (1) 创建 vue 文件(单文件组件) (2) 在使用的组件内导入,并注册 components:{ 组件名: 组件对象 } // 导入需要注册的组件 import 组件对象 from.vue文件路径 import HmHeader from ./…

深入学习前端开发,掌握HTML、CSS、JavaScript等技术

课程链接&#xff1a; 链接: https://pan.baidu.com/s/1WECwJ4T8UQfs2FyjUMbxig?pwdi654 提取码: i654 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 --来自百度网盘超级会员v4的分享 课程介绍&#xff1a; 第1周&#xff1a;HTML5基础语法与标签 &#x1f…

基于Java+SpringBoot+vue前后端分离在线BLOG网站系统设计实现

基于JavaSpringBootvue前后端分离在线BLOG网站系统设计实现&#xff08;程序源码毕业论文&#xff09; 大家好&#xff0c;今天给大家介绍基于JavaSpringBootvue前后端分离在线BLOG网站系统设计与实现&#xff0c;本论文只截取部分文章重点&#xff0c;文章末尾附有本毕业设计完…

基于Python的高校学生成绩分析系统

随着计算机技术发展&#xff0c;计算机系统的应用已延伸到社会的各个领域&#xff0c;大量基于网络的广泛应用给生活带来了十分的便利。所以把高校成绩分析与现在网络相结合&#xff0c;利用计算机搭建高校成绩分析系统&#xff0c;实现高校成绩分析的信息化。则对于进一步提高…