maven一点通

1.maven简介

Maven是一个基于Java的工程构建工具,用于管理和构建项目的依赖关系。它提供了一种标准的项目结构和一组约定,使得项目的开发、构建、部署和文档化更加容易和可靠。

Maven的主要功能包括:

  • 依赖管理:Maven可以自动下载和管理项目所需的依赖库。通过声明项目的依赖关系,Maven可以自动解决依赖冲突,并下载和安装所需的库。

  • 构建管理:Maven可以自动执行项目的构建过程,包括编译、测试、打包、部署等操作。Maven使用插件来执行这些操作,可以根据项目的需要灵活配置和扩展。

  • 团队协作:Maven支持多人协作开发,可以通过中央仓库和本地仓库共享项目的依赖库。同时,Maven提供了一些插件,可以用于集成和持续集成等开发实践。

2.生命周期

Maven生命周期是指Maven构建过程中的一系列阶段,每个阶段执行不同的任务。Maven生命周期分为三个主要阶段:Clean(清理)、Build(构建)和Site(站点)。

  1. Clean阶段:在这个阶段,Maven会清理项目中的所有生成的文件,以确保从一个干净的状态开始构建。主要包括清理输出目录和临时文件等。clean阶段只有一个目标:clean。

  2. Build阶段:这个阶段是Maven构建的核心阶段。它包括了项目的编译、测试、打包等操作。

    • validate:验证项目是否正确且是否可以构建。
    • compile:编译项目的源代码。
    • test:运行项目的单元测试。
    • package:将编译后的源代码打包成可分发的格式,如JAR、WAR等。
    • install:将打包好的文件安装到本地仓库,供其他项目使用。
    • deploy:将打包好的文件部署到远程仓库,供其他开发人员使用。
  3. Site阶段(冷门功能):这个阶段用于生成项目的站点文档,包括项目的API文档、用户手册等。它可以生成静态HTML或者部署到web服务器上。

    • site:生成项目的站点文档。
    • site-deploy:将站点文档部署到web服务器上。

每个阶段都由一个或多个插件来执行,这些插件在Maven的POM文件中配置。

Maven的生命周期是顺序执行的,你可以选择在某个生命周期中定义特定的插件执行某个任务。例如,在Build阶段的compile阶段可以配置编译插件,test阶段可以配置测试插件来运行单元测试。

3.下载与安装

3.1官网下载

大部分Java IDE都有一个嵌入式maven,例如IDEA。如果不需要命令行操作,则无需额外下载。

maven本身是java开发的,必须先安装jdk环境。

官网下载 -->  maven

下载之后,解压缩到指定目录即可。

3.2配置环境变量

如果需要在命令行操作,则需要配置环境变量(以win10系统做演示)。

3.2.1.前往系统属性,我的电脑->计算机->系统属性

3.2.2.搜索环境变量 

3.2.3.配置环境变量

新增环境变量,命名为MAVEN_HOE,指向maven的安装目录 (不包含bin目录

 Path环境变量添加一项,“%MAVEN_HOME%\bin

3.2.4.验证环境变量,命令行输入 "mvn -version"

3.2.5修改本地仓库地址

maven默认本地仓库地址为:usr/.m2/repository。由于本地仓库的默认位置是在用户的家目录下,一般在C盘。随着时间推移,仓库体积越来越庞大,影响系统性能。所以强烈建议将 Maven 的本地仓库放在其他驱动盘。maven安装目录config下的settings.xml文件,修改<localRepository>标签,指向新目录。

3.2.6修改远程仓库镜像地址

Maven中央仓库在境外,而国外网站速度很慢。可改成阿里云(或腾讯云等)提供的镜像仓库,提高下载速度。配置的方式也在settings.xml文件里。

    <mirror>
	<id>nexus-aliyun</id>
	<mirrorOf>central</mirrorOf>
	<name>Nexus aliyun</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public</url>
   </mirror>

4.maven核心概念

4.1项目对象模型(POM)

POM是Maven项目的核心文件,以XML格式编写。它定义了项目的基本信息、依赖关系、构建配置等。POM文件必须位于项目根目录下,并且命名为pom.xml。

4.2坐标(Coordinate)

坐标用于唯一标识一个Maven项目或者项目的依赖关系。坐标包括groupId、artifactId和version三个元素。groupId用于标识项目所属的组织或者团队,artifactId用于标识项目的名称,version用于标识项目的版本号。

4.3插件(Plugins)

Maven插件是用于执行项目构建过程中的具体任务的工具。Maven有很多内置插件,也可以自定义插件。插件的执行由Maven生命周期的不同阶段触发。

4.4构建目录结构

Maven推荐的项目目录结构有一定的约定,包括src/main/java用于存放项目的源代码,src/test/java用于存放单元测试代码,以及其他一些目录用于存放配置文件、资源文件等。

4.5依赖范围

  • compile(默认): 该依赖项在编译、测试和运行时都可用。

  • test: 该依赖项只在测试阶段可用,不会被打包到生成的项目中。

  • provided: 该依赖项在编译和测试阶段可用,但在运行时由JDK或某个服务器提供。比如servlet-api可以由服务器提供。

  • runtime: 该依赖项在运行时可用,但不参与编译和测试阶段。

  • system: 该依赖项类似于provided,但需要手动提供jar文件的路径。不推荐使用该范围。

  • import: 该依赖项只用于父项目的dependencyManagement部分。它引入了一个外部项目的依赖管理。

4.6依赖传递

Maven依赖传递是指当一个项目依赖于其他项目时,它将自动获取所依赖项目的依赖项。Maven使用依赖传递来管理项目依赖关系并确保所有需要的依赖项都被正确地获取和使用。

依赖传递有以下几个特点:

  1. 传递性:如果项目A依赖于项目B,而项目B又依赖于项目C,则项目A将间接依赖于项目C。Maven会自动解析和获取项目C的依赖项。

  2. 依赖冲突解决:当多个依赖项具有相同的groupId和artifactId,但版本不同时,Maven将根据一定的冲突解决策略选择一个版本。默认情况下,它选择最近的版本。

  3. 排除依赖项:有时候,可能需要排除某个依赖项的传递性依赖,在pom.xml文件中使用<exclusions>标签可以指定需要排除的依赖项。

4.7依赖冲突

4.7.1依赖冲突选择策略

由于依赖的传递性,导致不同依赖的子依赖会出现版本问题,有可能你以为依赖了版本2.1,但因为出现冲突,实际生效的版本是1.2。

Maven有一套依赖冲突解决策略来处理这种情况,它根据以下几个原则选择一个版本:

  1. 最短路径优先原则:Maven会选择离项目最近的依赖项路径中的版本。也就是说,如果项目直接依赖于一个版本,而间接依赖于另一个版本,那么直接依赖的版本将被选择。

  2. 第一声明优先原则:如果两个依赖项具有相同的路径长度,那么首次声明的版本将被选择(按照pom的依赖申明顺序)。

  3. 显式声明优先原则:如果两个依赖项具有相同的路径长度和首次声明顺序,那么Maven会选择在项目pom.xml文件中显式声明的版本。

4.7.2IDEA自带依赖分析工具

IDEA可以通过依赖分析工具,查询指定依赖的上级以及下级依赖,如此可以排除一些版本冲突。

4.7.2IDEA插件市场搜索分析插件

IDEA还可以从插件市场下载分析插件,点击Files->Settings->plugins,搜索“maven helper”

5.多模块继承与聚合

5.1多模块继承

在Maven中,继承指的是使用父项目定义的配置信息来为子项目提供默认的配置。这种继承关系可以帮助开发者减少重复的配置,并确保子项目与父项目保持一致的构建方式。maven子模块可以继承的有以下内容。

  • 配置
  • 依赖声明
  • 插件声明

5.2多模块聚合

在Maven中,聚合(aggregation)是一种将多个相关的项目组合在一起管理的方式。通过聚合,可以将多个项目作为一个整体来构建、测试和部署,简化了多项目管理的复杂度。

要实现项目的聚合,需要创建一个父项目(也称为聚合项目),并在父项目的pom.xml中声明子项目。父项目可以是一个普通的Maven项目,其packaging类型可以是pom,jar,war或其他类型。

例如jforgame的配置。在根目录下执行mvn package install命令的时候,会递归把所有子模块都打包安装到本地maven仓库,非常方便。例如jforgame的parent模块。

    <modules>
        <module>jforgame-hotswap</module>
        <module>jforgame-commons</module>
        <module>jforgame-orm</module>
        <module>jforgame-demo</module>
        <module>jforgame-codec-parent</module>
        <module>jforgame-socket-parent</module>
    </modules>

详情可参考-->   Maven模块化最佳实践

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

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

相关文章

elementui el-table表格自动循环滚动【超详细图解】

效果如图 1. 当表格内容超出时&#xff0c;自动滚动&#xff0c;滚动到最后一条之后在从头滚动。 2. 鼠标移入表格中&#xff0c;停止滚动&#xff1b;移出后&#xff0c;继续滚动。 直接贴代码 <template><div><div class"app-container"><e…

蓝桥杯前端Web赛道-输入搜索联想

蓝桥杯前端Web赛道-输入搜索联想 题目链接&#xff1a;1.输入搜索联想 - 蓝桥云课 (lanqiao.cn) 题目要求&#xff1a; 题目中还包含effect.gif 更详细的说明了需求 那么观察这道题需要做两件事情 把表头的每一个字母进行大写进行模糊查询 这里我们会用到几个js函数&#…

matlab FR共轭梯度法求解无约束问题

1、内容简介 略 75-可以交流、咨询、答疑 matlab FR共轭梯度法求解无约束问题 一维搜索 黄金搜索到单峰&#xff0c;单变量最小值 2、内容说明 略 Fletcher-Reeves共轭梯度法&#xff0c;简称FR法。 共轭梯度法的基本思想是把共轭性与最速下降方法相结合&#xff0c;利用…

rt-thread之通讯协议modbus软件包的使用记录(lwip+modbus组合)

前言 使用freemodbus软件包使用网口通讯(sallwip)ip地址使用dhcp动态获取 软件包 相关宏定义 /*-----------------------------------------NET 宏定义-------------------------------------------*/#define RT_USING_SAL #define SAL_INTERNET_CHECK /* Docking with prot…

mysqlcheck 数据完整性检查与修复

目录 mysqlcheck 命令文档 描述 选项 参数 示例 mysqlcheck 命令文档 mysqlcheck 是MySQL提供的一个工具&#xff0c;用于检查、修复、优化和分析数据库和表的健康状态。你可以使用它来确保数据库表的完整性和性能。 mysqlcheck [options] db_name [tbl_name ...]mysqlch…

德迅蜂巢(容器安全)全面出击

随着云计算的发展&#xff0c;以容器和微服务为代表的云原生技术&#xff0c;受到了人们的广泛关注&#xff0c;德迅云安全德迅蜂巢&#xff08;容器安全&#xff09;是企业容器运行时和容器编排的首要选择。然而&#xff0c;在应用容器过程中&#xff0c;大多数企业都遇到过不…

分数相加减(C语言)

一、流程图&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int fenmu 2;int result 1;int fuhao 1;//执行循环&#xff1b;while (fenmu < 100){//运算&#xff1b;fuhao (-1…

TSINGSEE青犀AI智能分析网关V4酿酒厂安全挂网AI检测算法

在酿酒行业中&#xff0c;安全生产一直是企业经营中至关重要的一环。为了确保酒厂生产过程中的安全&#xff0c;TSINGSEE青犀AI智能分析网关V4的安全挂网AI检测算法发挥了重要作用。 TSINGSEE青犀AI智能分析网关V4的安全挂网检测算法是针对酒厂里酒窖挂网行为进行智能检测与识…

[java基础揉碎]Object类详解

目录 equals方法: hashCode: toString: finalize: equals方法: 和equals对比 1.: 既可以判断基本类型&#xff0c;又可以判断引用类型 2.: 如果判断基本类型&#xff0c;判断的是值是否相等。示例: int i10; double d10.0; 3.:如果判断引用类型&#xff0c;判断的是地址是…

SQLiteC/C++接口详细介绍sqlite3_stmt类简介

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十八&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;一&#xff09; 预准备语句对象 typedef struct sqlite3_stmt sqlite3_stmt…

关于安卓USB开发(一)文件复制,文件夹创建

背景 在安卓应用中&#xff0c;把某个文件&#xff0c;复制到插入的U盘中 开发环境 win10,jdk8,as4 测试机型 红米Note11&#xff0c;android13 源码问题 文末将会提供博主整合好的源码项目连接&#xff0c;以供学习交流 注意 本次实战&#xff0c;u盘格式是fat32&…

弗洛伊德-华沙算法求任意两点之间的最短路径算法

对于弗洛伊德-华沙算法首先是要假设研究的图中是不包含有负边的&#xff0c;对于所给的图中的任意亮点v1&#xff0c;vm&#xff0c;假设两点之间存在一条连通路径&#xff0c;对于该路径中去掉头和尾节点&#xff0c;也就是v1&#xff0c;vm&#xff0c;剩下的节点也就称之为这…

【MySQL】2. 数据库基础

1. 数据库基础&#xff08;重点&#xff09; 1.1 什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题 文件不利于数据查询和管理 文件不利于存储海量数据 文件在程序中控制不方便 数据库存储介…

告别紧张,轻松应对!公众演讲的实用技巧

告别紧张&#xff0c;轻松应对&#xff01;公众演讲的实用技巧 公众演讲&#xff0c;对于许多人来说&#xff0c;是一项充满挑战的任务。面对众多的听众&#xff0c;紧张情绪往往难以避免&#xff0c;甚至可能影响到演讲的效果。然而&#xff0c;通过掌握一些实用的技巧&#…

常见的业务场景实现方案

1.解决请求服务器接口跨域的问题 本地项目请求服务器接口时&#xff0c;因为客户端的同源策略&#xff0c;导致了跨域问题 配置允许本地跨域&#xff1a; /api指代我们要请求的接口域名&#xff0c;例如&#xff1a;this.$axios.get(/api/app.php?mApp&cIndex&aind…

一种动态联动的实现方法

安防领域中的联动规则 有安防领域相关的开发经历的人知道&#xff0c;IPCamera可以配置使能“侦测”功能&#xff0c;并且指定仅针对图像传感器的某个区载进行侦测。除了基本的“移动侦测"外&#xff0c;侦测的功能点还有细化的类别&#xff0c;如人员侦测、车辆侦测、烟…

P1042 [NOIP2003 普及组] 乒乓球

题目描述&#xff1a; AC代码&#xff1a; #include<iostream> #include<cmath>using namespace std;const int N 25*250010; int a[N],b[N]; int k[2] {11,21};int main() {int n0;while(1){char c;cin >> c;//方便后面去做计算 if(c W) a[n] 1;if(c…

牛市下 AI + Web3 叙事引关注,Verasity 或成又一黑马项目?

事实上&#xff0c;在 ChatGPT 以及 Sora 大模型被相继提出后&#xff0c;AI 就成为了科技领域重点关注的板块&#xff0c;并引发了一轮又一轮的 AI 投资热潮。在传统科技领域引发的 AI 热潮&#xff0c;正在向加密行业拓展&#xff0c;Web3 领域也涌现出了不少 AIWeb3 概念的项…

单模场哈密顿量推导

满足麦克斯韦方程和边界条件的单模场又下式&#xff08;1&#xff09;&#xff0c;&#xff08;2&#xff09;给出 --------&#xff08;1&#xff09; ---------&#xff08;2&#xff09; , 单模场的经典场能或者哈密顿量又下式给出&#xff1a; &#xff08;3&#xff09…

编译esp32s3的ncnn,并运行mnist 手写数字识别

东哥科技&#xff0c;专注科技研发&#xff0c;wx交流&#xff1a;dg_i688 我的项目代码 https://github.com/cdmstrong/ncnn_on_esp32s3 下载ncnn git clone https://github.com/Tencent/ncnn.git安装idf 环境 这里直接按官网的可执行文件来就好了&#xff0c;直接安装完…