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模块化最佳实践

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

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

相关文章

海康威视相机SDK二次开发(JAVA语言)

目录 前言客户端创建虚拟相机示例代码保存图片程序运行结果修改需求 二次开发引入外部包对SaveImage.java文件进行修改保存图片saveDataToFile方法选择相机chooseCamera方法主方法 FileUtil类处理过期照片启动类与配置文件application.yml通过实体类读取yml启动类 SaveImage.ja…

【JS逆向学习】猿人学第六题 js混淆 回溯

逆向目标 网址&#xff1a;https://match.yuanrenxue.cn/match/6接口&#xff1a;https://match.yuanrenxue.cn/api/match/6参数&#xff1a;payload(m、q) 逆向过程 老规矩&#xff0c;先来分析网络请求&#xff0c;加密的地方一目了然&#xff0c;没什么可多说的&#xff…

惬意上手Redis

Redis介绍 Redis&#xff08;全称为REmote Dictionary Server&#xff09;是一个开源的、内存中的数据存储结构&#xff0c;主要用作应用程序缓存或快速相应数据库。 REmote Dictionary Server: 有道翻译Redis是“远程字典服务”&#xff0c;远程不过是远程访问&#xff0c;而…

Linux:搭建ntp服务器

我准备两个centos7服务器 一个为主服务器连接着外网&#xff0c;并且搭建了ntp服务给其他主机同步 另外一个没有连接外网&#xff0c;通过第一台设备去同步时间 首先两个服务器都要安装ntp软件 yum -y install ntp 再把他俩的时间都改成别的 左侧的是主服务器&#xff0c;主…

07|链(下):想学“育花”还是“插花”用RouterChain确定客户意图

任务设定 鲜花养护&#xff08;保持花的健康、如何浇水、施肥等&#xff09;鲜花装饰&#xff08;如何搭配花、如何装饰场地等&#xff09; 如果接到的是第一类问题&#xff0c;你要给ChatBot A指示&#xff1b;如果接到第二类的问题&#xff0c;你要给ChatBot B指示。 整体…

数据可信流通,从运维信任到技术信任

信任 共同观点&#xff1a; 信任是涉及交易或交换关系的基础 身份可确认利益可依赖能力有预期行为有后果 数据流通中的不可信风险 内循环&#xff1a;数据持有方在自己的运维安全域内对自己的额数据使用和安全拥有全责外循环&#xff1a;数据要素在离开持有方安全域后&#…

【网络安全】 MSF生成木马教程

本文章仅用于信息安全学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若读者因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与作者无关。 环境准备&#xff1a; 名称系统位数IP攻击机Kali Linux6410.3.0.231客户端Windows 76410.3.0.234…

ACWing--基础算法--贪心(部分题解)

目录 906.区间问题--区间分组 906.区间问题--区间分组 原题&#xff1a; 给定 N 个闭区间 [ai,bi]&#xff0c;请你将这些区间分成若干组&#xff0c;使得每组内部的区间两两之间&#xff08;包括端点&#xff09;没有交集&#xff0c;并使得组数尽可能小。 输出最小组数。 输…

Linux 部署 Samba 服务

一、Ubuntu 部署 Samba 1、安装 Samba # 更新本地软件包列表 sudo apt update# 安装Samba sudo apt install samba# 查看版本 smbd --version2、创建共享文件夹&#xff0c;并配置 Samba 创建需要共享的文件夹&#xff0c;并赋予权限&#xff1a; sudo mkdir /home/test sud…

分布式事务的解决方案--Seata架构

一、Seata的XA模式 二、AT模式原理 三、TCC模式原理 四、MQ分布式事务 异步&#xff0c;非实时&#xff0c;实现最终的一致性。 四、分布式事务的解决方案

VMware下创建虚拟机

Centos7是比较常用的一个Linux发行版本&#xff0c;在国内的使用比例比较高 安装完VMware一定要检查虚拟网卡有没有安装成功&#xff0c;如果没有VMnet1和VMnet8 虚拟机是无法上网的&#xff0c;就需要卸载重启电脑重新安装 控制面板—网络和Internet—网络连接 快捷方式打开&a…

用`ORDER BY RAND()`随机化你的查询结果

[TOC](用ORDER BY RAND()随机化你的查询结果) 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《java 面试题大全》 《java 专栏》 &#x1f369;惟余辈才疏学浅&#xff0c;临摹之作或有不妥之处&#xff0c;还请读者海涵指正。☕&…

1.中医学习-总论

目录 1.为什么要学中医 2.什么是中医 介绍 中医例子1&#xff1a; 中医例子2: 中医最高境界“大道至简” 中医讲究的是本质 中医核心&#xff1a;阴阳、表里、寒热、虚实 ​编辑医不叩门 3.阴阳 1.一天中的阴阳 2.一年中的阴阳 3.阴阳之间的关系 4.阴阳四季的变化 …

代码随想录算法训练营第二十五天|216.组合总和III,17.电话号码的字母组合

216.组合总和III 题目 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数&#xff0c;并且每种组合中不存在重复的数字。 说明&#xff1a; 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 示例 2: 输入…

3. ElasticSearch搜索技术深入与聚合查询实战

1. ES分词器详解 1.1 基本概念 分词器官方称之为文本分析器&#xff0c;顾名思义&#xff0c;是对文本进行分析处理的一种手段&#xff0c;基本处理逻辑为按照预先制定的分词规则&#xff0c;把原始文档分割成若干更小粒度的词项&#xff0c;粒度大小取决于分词器规则。 1.2 …

Qt学习--继承(并以分文件实现)

基类 & 派生类 一个类可以派生自多个类&#xff0c;这意味着&#xff0c;它可以从多个基类继承数据和函数。定义一个派生类&#xff0c;我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名。 总结&#xff1a;简单来说&#xff0c;父类有的&#xff0c;子…

对OceanBase进行 sysbench 压测前,如何用 obdiag巡检

有一些用户想对 OceanBase 进行 sysbench 压测&#xff0c;并向我询问是否需要对数据库的各种参数进行调整。我想起有一个工具 obdiag &#xff0c;具备对集群进行巡检的功能。因此&#xff0c;我正好借此机会试用一下这个工具。 obdiag 功能的比较丰富&#xff0c;详细情况可参…

【linux】进程间通信1--管道

文章目录 进程间通信是什么&#xff1f;如何做&#xff1f; 管道匿名管道命名管道 进程间通信 是什么&#xff1f; 进程间通信&#xff08;Inter-Process Communication&#xff0c;IPC&#xff09;是指在操作系统中&#xff0c;不同的进程之间进行数据交换、信息传递和同步操…

函数-Python

师从黑马程序员 函数初体验 str1"asdf" str2"qewrew" str3"rtyuio" def my_len(data):count0for i in data:count1print(f"字符串{data}的长度是{count}")my_len(str1) my_len(str2) my_len(str3) 函数的定义 函数的调用 函数名&a…

使用Navicat远程连接Linux中的MySQL

一、登录MySQL数据库 mysql -uroot -pXjm123456 二、使用mysql数据库 use mysql&#xff1b; 三、查询user表中包含host的字段 select user,host from user;### 该字段中&#xff0c;localhost表示只允许本机访问&#xff0c;可以将‘localhost’改为‘%’&#xff0c;‘%’表…