Maven详见及在Idea中的使用方法[保姆级包学包会]

news2024/11/24 19:35:29

文章目录

  • Maven详解
    • 1.1 目标
    • 1.2 Maven概括
    • 1.3 多模块开发
      • 1.3.1 pom.xml
      • 1.3.2 生命周期
      • 1.3.3 依赖特性(多模块1)
      • 1.3.4 继承特性(多模块2)
      • 1.3.5 dependencyManagement标签
      • 1.3.6 Maven-聚合(多模块3)
        • 聚合 1.3.6.1
        • 聚合总结

Maven详解

1.1 目标

  • maven是什么?
  • maven能干什么?
  • maven是如何工作的?
  • maven中你遇到过什么问题,是通过什么方法,手段定位的问题,然后如何解决的?

1.2 Maven概括

  • maven简介

  • Maven 是一个项目管理和综合工具。Maven 提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven 使用标准的目录结构和默认构建生命周期。

  • 在多个开发团队环境时,Maven 可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven 让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。

  • 概括地说,Maven 简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。 Maven 增加可重用性并负责建立相关的任务。有了maven你的工作就简单了.

  • 下载安装(略)

      idea自带一套maven的环境.使用idea开发,无需安装windows的maven.
    
      但是有的开发者,喜欢单独使用maven,windows单独安装了一套.
    

1.3 多模块开发

1.3.1 pom.xml

  • 每一个maven项目都有一个pom文件.Project Object Model 项目对象模型,maven作为一个项目开发管理工具,将每一个项目看成是一个对象.pom文件是描述这个对象的数据文件**(元数据)**.通过pom文件的内容,maven软件就可以管理控制项目.

1.3.2 生命周期

maven管理项目时,总是先加载pom然后执行声明周期的命令逻辑,maven项目从创建开始,要经历如下几个生命周期环节.

概念: 生命周期,对象目标经历的环节,经历的步骤.
请添加图片描述

  • validate:
    底层执行的maven命令 实际上 .校验一下 当前没问结构,环境是否符合maven项目开发要求.
    idea中几乎不会用到.
    mvn validate

  • compile:
    maven项目的编译,只负责main中相关内容的编译输出,默认输出到 target/classes
    mvn compile

  • test
    执行项目的单元测试. 会生成单元测试报告,包含前一步的compile,并且将测试代码编译输出
    mvn test

  • package
    将项目打包
    注意: 根据packaging类型不一样,打包的输出结果就不同.类型有三种常用的
    jar/war/pom.第三种类型没有代码,只能作为父工程或者聚合工程使用
    mvn package

  • install
    将项目打包,安装存放到本地库(远程库,本地库.目前的远程库 central中央库)
    mvn install

  • site
    根据Maven配置生成一个html页面集.针对这个项目做的可观测页面.
    mvn sit

  • deploy
    和私服有关.公司开发,传递jar包的方式
    mvn deploy
    Idea自定义运行命令
    请添加图片描述
    执行自定义maven命令,添加一个选项-X可以在控制台打印maven执行命令的详细日志.
    目的是在出错的时候,帮助我们提供更准确的定位信息.
    提问: 所有maven项目的生命周期经历的环节都完全一样么?
    例如:
    项目运行的web应用: compile test package install deploy(不需要)
    项目是提供给同事复用的代码: compile test pakcage install deploy

1.3.3 依赖特性(多模块1)

请添加图片描述
请添加图片描述
依赖

  • 作用是什么: 代码项目的复用
  • 如何使用: dependency标签
  • 特性是什么: 依赖有传递性
  • idea中想要观察依赖的传递性: 传递性是强制传递,maven允许提出不需要的传递
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.22.RELEASE</version>
        <!--去除当前依赖,默认传递过来的其他依赖资源-->
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

请添加图片描述
请添加图片描述

1.3.4 继承特性(多模块2)

  • 在同一个项目中不同模块的开发者中,各自维护自己的项目依赖关系,有可能出现图中的情况,相互关联的两个模块同时依赖A.jar,但是版本不同,会导致严重的结果,相互之间的关系存在兼容问题. 为了保证没有兼容问题.
  • 继承意义
    为了统一多模块协作多人开发版本资源,maven提供了一个多模块特性–继承
    继承的实现
  • 确定父子关系**(文件夹结构就是父子关系)**
  • 父工程packaging标签值必须是pom,子工程使用parent标签指向父工程(idea自动帮你实现了)
    区分开类的继承,和maven的继承细节.区分开依赖和继承的区别
    细节: parent标签详解
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.13</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

relativePath: 子工程寻找父工程pom文件的相对路径地址.如果子工程无法找到父工程的pom,无法实现继承.这个值有三种配置方式

  1. 默认值(不给标签) …/pom.xml
  2. 自定义值,根据你的pom位置,合理的编写路径信息(夸文件夹级别继承)
  3. 空值 只在本地库找父工程的pom文件,如果本地库没有,从远程库下载
  • 本地库资源路径(必须掌握通过maven标签找到库资源)

    • 找本地库在哪c:/{User}/.m2/repository/org/springframework/boot/spring-boot-starter-parent/2.7.13
  • 继承的本质
    子工程继承父工程, pom文件的继承,继承之后,获取的内容就是pom文件中的标签.
    pom文件中标签的复用 依赖才是代码的复用

  • 常见的继承标签

    • groupId
    • version
    • properties
    • dependencies
    • dependencyManagement

1.3.5 dependencyManagement标签

依赖管理,在依赖管理标签定义的是依赖版本,dependencyManagement包含了一套完整的dependencies.
一旦在项目中定义了依赖管理,再使用依赖的时候,就可以省略版本号了.所以我们在父工程统一规划好所有的依赖资源版本,dependencyManagement被子工程继承之后,拥有了相同的特性,相当于做到了资源版本的统一定义,子工程尽可能不重写版本.

  • 补充
  1. 父工程定义一堆dependencies 能否实现统一管理资源版本? 能.
  2. 为什么不用? 因为这种统一管理版本 是一种强制的继承,让子工程承担了非常多不需要用到的依赖资源
    结合 properties和dependencyManagement的继承特性和标签的功能.父子继承的时候最终父工程样子请添加图片描述按照上图,修改maven parent demo案例
    观察一些父工程的pom文件,能够阅读其中的pom标签.
    spring-boot-starter-parent请添加图片描述

1.3.6 Maven-聚合(多模块3)

聚合 1.3.6.1

有依赖,有继承关系,已经看到maven多模块了.
一个团队开发项目时候,一定多模块管理的.多人协作开发,使用maven管理项目关系的.
假如项目结构:
请添加图片描述a1,a2,b1,b2是项目中4个人共同并行开发的.每个项目都是一个应用的web程序,所以目的都是打成jar包,运行java启动命令

java -jar a1.jar
java -jar a2.jar
java -jar b1.jar
java -jar b2.jar

每个项目都要执行maven声明周期中以下几个命令

  • mvn clean compile 编译
  • mvn clean test 测试
  • mvn clean package 打包
    发现2个问题需要解决:
  1. 打包命令重复执行很多遍.
  2. 执行相同命令时,还需要额外关心项目依赖关系.
  • 聚合的目的,就是为了统一执行mvn相关命令的.而不需要关心,依赖关系,继承关系,聚合本身就保管了所有的多模块关系.

如何实现聚合:

  1. 挑选一个聚合工程,聚合工程packaging类型是pom(和父工程要求是一致的)
  2. 聚合工程来实现modules配置.指向被聚合的工程(idea在创建工程时,自动实现的)
    maven-parent-demo 顶级父工程
<modules>
    <module>a1</module>
    <module>a2</module>
</modules>
  • 如果idea版本不同,在创建项目时,聚合的配置有所区别,有可能在顶级父工程中,聚合了所有人
  • 配置完上述两部操作,只需要对聚合工程执行mvn命令,统一对被聚合工程执行相同的命令,而且满足依赖关系
    请添加图片描述

聚合总结

  • 意义: 统一多模块mvn命令和顺序的执行
  • 实现: 聚合工程packaging类型pom ,指向module被聚合工程
  • 本质: pom文件加载的顺序,通过modules关联起来了.

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

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

相关文章

java并发编程 10:AQS

目录 什么是AQS原理 什么是AQS juc包的结构如下图&#xff1a; AQS就是AbstractQueuedSynchronizer&#xff0c;是个抽象类&#xff0c;实现了自己的一些方法。它是阻塞式锁和相关的同步器工具的框架。很多并发类都是基于它实现的&#xff0c;如&#xff1a;ReentrantLock、Co…

【力扣刷题 | 第十八天】

目录 前言&#xff1a; 1005. K 次取反后最大化的数组和 - 力扣&#xff08;LeetCode&#xff09; 134. 加油站 - 力扣&#xff08;LeetCode&#xff09; 总结&#xff1a; 前言&#xff1a; 今天随机刷题&#xff0c;不对题型做具体的要求 1005. K 次取反后最大化的数组和 …

Spring5学习笔记--Maven

Spring5学习笔记--Maven Maven高级1 分模块开发1.1 分模块开发设计1.2 分模块开发实现1.2.1 环境准备1.2.2 抽取domain层步骤1:创建新模块步骤2:项目中创建domain包步骤3:删除原项目中的domain包步骤4:建立依赖关系步骤5:编译maven_02_ssm项目步骤6:将项目安装本地仓库 1.2.3 抽…

揭秘GPT-4;Adobe Firefly AI 扩大测试规模

&#x1f989; AI新闻 &#x1f680; Adobe Firefly AI 扩大测试规模&#xff0c;支持100多种语言的输入 摘要&#xff1a;Adobe宣布扩大测试规模&#xff0c;Adobe Firefly AI现在支持100多种语言的 prompts 输入。网页测试版Firefly已经扩充了罗马尼亚语等多种语言&#xf…

layui选项卡演示

layui选项卡演示 .1 引入layui2. 选项卡演示实列3.js分离的代码4运行结果 在前端开发中&#xff0c;选项卡常用于展示多个内容模块&#xff0c;提供用户友好的界面交互方式。layui作为一款简洁易用的前端框架&#xff0c;提供了丰富的组件库&#xff0c;其中包括了强大且易用的…

Html基础知识学习——css精灵

这里写自定义目录标题 定义示例一示例二 定义 将网页用到的图片放在一张图片上&#xff0c;进行定位展示 优点:防止网页http请求次数过多&#xff0c;从而提高页面性能 缺点&#xff1a;降低开发效率。维护难度加大 示例一 使用图 网页制作图 <!DOCTYPE html> <…

AcWing 1273. 天才的记忆—RMQ

题目链接: AcWing 1273. 天才的记忆 问题描述 RMQ是用来求解静态区间最大/小值的算法&#xff0c;静态空间就是数组里的数不会变&#xff0c;动态空间最大/小值可以用线段树或者树状数组来求解。 RMQ算法有点类似与区间DP&#xff0c;RMQ算法的时间复杂度为 O ( n l o g n ) …

三菱 FX三菱PLC以太网通信程序

捷米特三菱FX转以太网通讯处理器是一款经济型的以太网通讯处理器&#xff0c;是为满足日益增多的工厂设备信息化需求&#xff08;设备网络监控和生产管理&#xff09;而设计&#xff0c;用于三菱FX1S/1N/2N/3S/3G/3GA/3GC/3U/3UC系列、汇川、士林AX、禾川、维控等PLC以太网数据…

【算法和数据结构】347、LeetCode前 K 个高频元素

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;首先我们使用一个哈希表记录每个元素出现的频率。再设置一个优先队列&#xff0c;并将数组中元素出现的…

C语言实现扫雷【经典】

前言   本篇文章要实现的是扫雷游戏&#xff0c;其代码实现与上一篇的三子棋游戏类同&#xff0c;都是在棋盘的基础上&#xff0c;与电脑进行对抗&#xff0c;不同的是&#xff0c;扫雷游戏一开始电脑就已经随机布置好了所有“雷”。 请戳 --->三子棋 扫雷游戏 1. 扫雷游…

【Visual Studio】VTK 显示小球例子,在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 关于更多此例子的资料&#xff0c;可以参考&#xff1a;【Visual Studio】在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK。 文章目录 版本环境VTKTest.…

Nginx upstream 负载均衡配置

[toc] ## 问题: 自7/4 以来, 所有设备同时出现 Network Error, 导致业务无法正常进行, 频率 3次/每分钟; ## 现场情况及原因分析: 3楼: 8条产线 4楼: 20条产线 5楼: 5条产线 点数: 33条线 * 平均 (5台工位 1台电视看板 3台测试仪 ) ≈ 300 - Nginx 日志占用: access 日志 …

【MySQL备份与还原、索引、视图】练习

一、备份与还原 /***************************样例表***************************/CREATE DATABASE booksDB;use booksDB;CREATE TABLE books(bk_id INT NOT NULL PRIMARY KEY,bk_title VARCHAR(50) NOT NULL,copyright YEAR NOT NULL);INSERT INTO booksVALUES (11078, Lear…

UNIX网络编程卷一 学习笔记 第二十三章 高级SCTP套接字编程

SCTP是一个面向消息的协议&#xff0c;递送给用户的是部分的或完整的消息。只有当发送大消息时&#xff0c;在对端才会递送部分的消息。部分消息被递送给应用后&#xff0c;多个部分消息组合成单个完整消息不由SCTP负责。在SCTP应用进程看来&#xff0c;一个消息既可由单个输入…

线性代数的一些小细节

1 .矩阵的满足结合律&#xff0c;但不满足交换律 验证和证明如下图&#xff1a; 如下&#xff0c;UWQ三个矩阵的2种结合&#xff0c;证明矩阵乘法满足结合律 下图中&#xff0c;AB 和BA的值可能是不同的&#xff08;相同的条件是图中相互对应的4项相同&#xff0c;即对称矩阵…

防范 XSS 攻击的措施

防范 XSS 攻击的措施 XSS&#xff08;Cross-site scripting&#xff09;攻击是一种常见的网络安全漏洞&#xff0c;它可以通过注入恶意代码来攻击用户的计算机和浏览器&#xff0c;从而窃取用户的敏感信息或执行恶意操作。本篇文章将介绍防范 XSS 攻击的措施&#xff0c;并提供…

Spring设计模式及部分技术讲解

讲师:邓澎波 Spring面试专题 1.Spring应该很熟悉吧?来介绍下你的Spring的理解 有些同学可能会抢答,不熟悉!!! 好了,不开玩笑,面对这个问题我们应该怎么来回答呢?我们给大家梳理这个几个维度来回答 1.1 Spring的发展历程 先介绍Spring是怎么来的,发展中有哪些核心的节…

Linux文件

目录 系统级I/O 简介 接口 文件描述符fd 重定向 缓冲区 文件系统 软硬链接 动静态库 静态函数库 动态库 系统级I/O 简介 输入/输出&#xff08;I/O&#xff09;是在主存和外部设备&#xff08;磁盘驱动器、终端和网络&#xff09;之间复制数据的过程。输入操作是…

opencv-04 像素处理

opencv-04 像素处理 在 OpenCV 中&#xff0c;最小的数据类型是无符号的 8 位数。因此&#xff0c;在 OpenCV 中&#xff0c;实际上并没有二值图像这种数据类型&#xff0c;二值图像经常是通过处理得到的&#xff0c;然后使用0表示黑色&#xff0c;使用 255 表示白色。 可以将…

【基本算法】三分法模板

洛谷三分法https://www.luogu.com.cn/problem/P3382 题目描述 如题&#xff0c;给出一个 N 次函数&#xff0c;保证在范围 [l,r] 内存在一点 x&#xff0c;使得 [l,x] 上单调增&#xff0c;[x,r] 上单调减。试求出 x 的值。 输入格式 第一行一次包含一个正整数 N 和两个实数…