Maven入门

news2024/11/23 18:31:20

目录

1.为什么要学习Maven

1. 作为jar包的管理工具

2.作为构建管理工具

3.结论

2.什么是Maven

1. 构建包含的主要环节

2.依赖

3.Maven的工作机制

3.Maven的核心概念:

1.坐标

2.POM

3.约定的目录结构

4.生命周期

5.插件与目标

6.仓库

4.Maven操作

5.依赖

1.依赖的范围

2.依赖的传递

3.依赖的排除

6.继承

7.聚合

8.使用idea操作Maven


1.为什么要学习Maven

1. 作为jar包的管理工具

* 项目中用到的jar包数量越来越大,比如使用框架中的三个功能,就需要导入106个jar包;使用Maven则只需要导入三个依赖而已

* jar包的来源十分难找,找到的也不一定能用;使用Maven后,依赖对应的jar包能够自动下载,方便且规范

* 框架中的jar包数量庞大,且具有复杂的依赖关系,彼此盘根错节,在使用中难度很大。使用Maven可以很好的管理jar包

2.作为构建管理工具

* 在使用java/web源程序(比如java的类)时,都需要将源程序加载、打包、部署,这就是构建。使用IDEA开发时,构建由IDEA生成

* 将代码写好要上传到服务器中,需要将代码集成、打成war包、部署,此时IDEA无法替我们构建,Maven可以

3.结论

* 管理规模庞大的jar包,需要专门工具

* 脱离IDE环境执行构建操作,需要工具

2.什么是Maven

1. 构建包含的主要环节

* 清理:删除上一次构建的结果,为下一次构建做好准备

* 编译:Java源程序编译成*.class字节码文件

* 测试:运行提前准备好的测试程序

* 报告:针对刚才测试的结果生成一个全面的信息

* 打包:Java工程:jar包;Web工程:war包

* 安装:把一个Maven工程经过打包操作生成的jar包或war包存入到Maven仓库

* 部署:部署jar包:把一个jar包部署到Nexus私服服务器上;

             部署war包:借助相关Maven插件(例如cargo),将war部署到Tomcat服务器上

2.依赖

* 如果A工程里面用到了B工程的类、接口、配置文件等等这样的资源,那么我们就可以说A依赖B

- 依赖中要解决的具体问题:

* jar包的下载:使用Maven之后,jar包会从规范的远程仓库下载到本地

* jar包之间的依赖:通过依赖的传递性自动完成

* jar包之间的冲突:通过对依赖的配置进行调整,让某些jar包不会被导入

3.Maven的工作机制

3.Maven的核心概念:

1.坐标

坐标:使用三个向量在Maven仓库中唯一的定位到一个jar包

* groupId:公司或组织的ID

* artifactId:一个项目或者是项目中的一个模块的ID

* version:版本号

* 一个项目,可能有很多模块,因此存在很多个工程

比如:

groupId:com.gz.maven
artifactId:pro01-gz-maven
version:1.0-SNAPSHOT

2.POM

* POM:project object model-项目对象模型

* 模型化思想:将工程抽象成一个模型,再用程序中的对象来描述这个模型;就是将现实生活中的事物抽象成模型,然后封装模型相关的数据作为一个对象。比如:地球-地球仪

* 对应的配置文件:POM理念体现在Maven根目录下pom.xml文件中。学习Maven就是学习如何配置pom.xml文件

3.约定的目录结构

* 约定目录结构的意义:Maven为了让构建过程尽可能自动化完成,必须约定目录结构的作用

* 约定大于配置,配置大于编码:Maven对于目录结构,是基于约定的,使得开发非常方便

4.生命周期

* Maven包中的Lifecycle既是生命周期

* 作用:让构建过程自动化完成,Maven设定了三个生命周期,生命周期中的每一个环节对应构建过程中的一个操作

* 简单的说:在生命周期的任一个环节执行都会从头开始执行

* 三个生命周期:

        1. Clean:清理操作相关

        2. Site:生成站点相关:将Maven项目的依赖等各种信息抽取出来,生成一组静态页面-站点

        3. Default:主要构建过程

* deploy-部署:将包复制到远程的仓库,以让其他开发人员与项目共享;或部署到服务器上运行(借助插件,如cargo)

5.插件与目标

* 插件:Maven的核心程序仅仅负责宏观调度,不做具体工作。具体工作由Maven插件完成

* 目标:一个插件可以对应多个目标,每一个目标都个生命周期的某一个环节对应

6.仓库

* 本地仓库:在当前电脑上,为电脑所有工程服务

- 远程仓库:需要联网

* 局域网:我们自己搭建的Maven私服,比如使用Nexus技术搭建私服

* nezus相当于是一个中转站,当需要的jar包本地没有时,会先去Nexus私服看有没有,私服没有就由私服去中央仓库下载jar包,然后本地再从私服中下载

* internet-外网:中央仓库/镜像仓库

* 建议不要中央仓库和阿里云镜像混用,否则jar包来源不纯,彼此冲突

4.Maven操作

* 使用命令生成Maven工程:运行 mvn archetype:generate命令

* 使用命令行执行Maven命令时,要在pom.xml所在目录下运行—操作哪个工程,就进入这个工程的pom.xml目录

* 清理:mvn clean

* 编译:主程序编译:mvn compile;测试程序编译:mvn test-compile;主体程序编译结果存放目录:target/classes测试程序编译结果存放目录:target/test-classes

* 测试:mvn test;测试报告存放目录:target/surefire-reports

* 打包:mvn package;打包为jar包,存放目录:target

* 安装:mvn install

* 只有web工程依赖java工程,没有java工程依赖web工程

5.依赖

1.依赖的范围

* 部署到服务器:就是打包的过程中

* compile、test、provided都是scope中的范围;该写一定要写,不然易引起冲突(比如服务器中有一个jar包,你不应该部署到服务器中,此时scope为provided,但你使用了compile,就会报错)

* 但这些scope一般复制过来时都已经有了,不要删掉就行

2.依赖的传递

* A依赖B,B依赖C,在A没有配置对C的依赖时,A能否使用C的依赖,取决于B依赖C的依赖范围

* B依赖C使用compile范围时,可以传递

* B依赖C使用test/provided时:不能传递,因此需要这样的jar包时,必须在需要的地方明确配置依赖才可以

3.依赖的排除

* 即阻断依赖的传递;避免出现jar包之间的冲突(传递时导入同一个jar包的不同版本)

* 排除方式:exclusions-排除

6.继承

* 含义:A工程的pom.xml中的配置继承了B工程中pom.xml的配置;B即为父工程

* 作用:可以统一管理项目的依赖信息,具体来说是管理依赖信息的版本,保持版本一致

* 只有打包方式为pom的Maven工程能够管理其他Maven工程。即作为父类

* 打包方式为pom的Maven工程不写业务代码,是专门管理其他Maven工程的工程

* 子工程的groupId和version如果和父工程一样,则可以省略,只保留artifactId

* 在父工程中统一管理依赖信息

* 注意:即使在父工程配置了对依赖的管理,子工程需要使用具体哪一个依赖还是要明确配置,只是不需要写版本号

* 想要一处修改,处处生效,可以在properties里面配置自定义的属性标签

7.聚合

* 即部分组成整体

* 项目:整体;模块:部分

* 从聚合关系来讲:总工程、模块工程

* 先安装父工程,然后按照被依赖工程,最后安装本工程

* 要避免依赖循环问题

8.使用idea操作Maven

* 重中之重:idea版本要和Maven匹配,比如idea2019只能匹配maven3.6以下的

1.Maven home directory:下载的Maven压缩包位置

   User settings file:下载的Maven压缩包中setting.xml文件位置,在conf下

   Local repository:自己在电脑中设置的本地仓库

 2.在IDEA的右侧是Maven的快捷操作界面

        Lifecycle:表示生命周期中的各个操作,比如点击clean相当于:清理-mvn clean

        Pugins:表示各种插件

        Dependencies:已经导入的依赖

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

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

相关文章

现实版“超级英雄”!外卖小哥从10余米高桥纵身跳下救人

“我心里也很怂啊,但个人害怕跟别人的命比起来,肯定是救人要紧,人命关天的事,还用想吗?” 这是一位勇敢外卖小哥在接受媒体采访时说的。 语言虽朴实无华,却道出了一个重要的价值观:人命关天&…

APP测试面试题快问快答(四)

16.App测试的实时日志如何获取? 考察点:是否有移动app测试的日志获取相关经验 一般可以通过以下方式获取: 1.可以使用adb命令:adb logcat | findstr "com.sankuai.meituan" >d:\test.txt 2.用ddms抓取&#xff0…

Android中的异步处理之RxJava与协程(Coroutines)使用案例PK

RxJava一直是我长久以来的救星。它提供了丰富的功能,让我在Android编程中更加注重响应式思维。我的代码中到处都是Single、Subject和Completable。 而现在,协程成为了备受赞誉和推崇的选择,许多演讲和会议都推荐使用。于是我开始学习它。 为…

使用Vision Transformers实现高效语义分割的内容感知共享Token

文章目录 Content-aware Token Sharing for Efficient Semantic Segmentation with Vision Transformers摘要本文方法Content-aware token sharing frameworkContent-aware token sharing policy 实验结果 Content-aware Token Sharing for Efficient Semantic Segmentation wi…

Vue中如何进行滚动吸顶与侧边栏固定

Vue中如何进行滚动吸顶与侧边栏固定 在Vue应用程序中,当需要实现滚动吸顶和侧边栏固定效果时,我们可以使用一些技术来实现。这些技术包括CSS和JavaScript,可以帮助我们实现各种各样的滚动效果。 如何实现滚动吸顶? 滚动吸顶是指…

Ubuntu 系统如何使用 root 用户登录实例

Ubuntu 系统的默认用户名是 ubuntu,并在安装过程中默认不设置 root 帐户和密码。您如有需要,可在设置中开启允许 root 用户登录。具体操作步骤如下: 1. 使用 ubuntu 帐户登录轻量应用服务器。 2. 执行以下命令,设置 root 密码。…

Java判断一个字符串是否包含某个字符串

开发过程中,有时会判断一个字符串是否包含某个字符串的操作,这里总结判断方法。 方式一:contains()方法 理解:contains() 方法用于判断字符串中是否包含指定的字符或字符串。(判断一个字符串是否包含某个字符串&#…

网上书店 Vue+Spring boot+H5+Uniapp

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 基于VueSpring boot的网上书城 目录一、项目模块二、项目模块三 技术选型四、运行环境五 .PC登录页面代码六 .H5登录页面代码 运行效果源码 目录 网上书店 VueSpring bootH5U…

Cos 文件上传下载

目录 方法一: maven依赖: UploadServlet upload.jsp 方法二: maven依赖 UploadServlet upload.jsp success.jsp error.jsp 运行结果: 百度文件上传插件: Web Uploader 本文通过JSPServlet的架构&#xff0c…

华为OD机试真题 JavaScript 实现【字符串变换最小字符串】【2022Q4 100分】

一、题目描述 给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。 变换规则:交换字符串中任意两个不同位置的字符。 二、输入描述 一串小写字母组成的字符串s。 三、输出…

文件系统整体流程介绍

一、什么是文件系统 计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘的地址为多少的数据块上&#xff0…

拨云见日:Redis和数据库之间的一致性如何保证?

概 述 Redis在使用过程中,有四个异常问题:缓存穿透、缓存击穿、缓存雪崩、以及缓存和数据库(MySQL)双写一致性问题。 前三个问题可能会因为业务体量的不同而有所不同,但是最后一个问题是无法避免的。就算你的电商业…

OPNET出现错误的解决办法汇总

文章目录 Packet pointer references unowned packet(<pk_id>) 错误Standard function stack imbalance 错误Invalid Memory Access 错误 在使用 OPNET Modeler 软件时&#xff0c;会遇到很多奇奇怪怪的报错&#xff0c;这篇文章收集的是自己在使用该软件时遇到的一些错误…

易基因:组学研究揭示不同牛品种的DNA甲基化、染色质和基因表达互作机制|科研进展

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 在全球范围内&#xff0c;牛为60多亿人提供了重要的营养来源。传染病是养牛生产的主要限制因素&#xff0c;且许多疾病人畜共患&#xff0c;因此与人类健康直接相关。近年来牛的许多复杂…

CBTC信号系统ATP子系统接口

ATP/ATO车载设备与车辆接口要求 ATP/ATO车载设备应实现与车辆制动装置的可靠接口&#xff0c;保证安全和对列车实施连续有效的控制。 ATP/ATO车载设备与车辆的接口分为开关量、模拟量、通信接口三种。 涉及行车安全的电气接口应采用安全输入&#xff0f;输出接口方式。 ATP…

electron 快速创建一个本地应用

参考官方文档流程 快速入门 | Electron 建议先全局安装electron&#xff0c;npm install -g electron 开发过程中可以在本地开发安装 使用electron快速创建一个web页面 &#xff0c;参考官方demo 实例 electron-quick-start 第一步&#xff1a; mkdir my-electron-app &am…

银行信用卡流失预测模型_基于ANN神经网络_金融培训_论文科研_毕业设计

业务背景 根据央行公布的数据显示&#xff0c;全国性银行信用卡和借贷合一卡的发卡量增速从2017年同比增速26.35%的高点逐年下降&#xff0c;截至2020年同比增速降至4.26%。银行信用卡发卡增速明显放缓的背景下&#xff0c;预防老客户流失的问题变得愈发重要。 假设一家消费信…

前端开发中有哪些鲜为人知的技巧?

下面分享一些前端开发鲜为人知的HTML/CSS/JS技巧&#xff0c;希望大家可以有所收获。 一、Datalist元素 不知道为什么&#xff0c;这个元素不太被人所使用。<datalist>标签被用于为<input>元素提供一个“自动补全”的功能。 例如&#xff1a; <input list&qu…

MMPose安装记录

参考&#xff1a;GitHub - open-mmlab/mmpose: OpenMMLab Pose Estimation Toolbox and Benchmark. 一、依赖环境 MMPose 适用于 Linux、Windows 和 macOS。它需要 Python 3.7、CUDA 9.2 和 PyTorch 1.6。我的环境&#xff1a; Windows 11 Python 3.9 CUDA 11.6 PyTorch 1.13 …

影响客户管理系统的因素有哪些?能买断吗?

客户管理系统是企业数字化转型的必由之路&#xff0c;对于没有部署CRM客户管理系统的企业来说除了关注软件功能还要关注价格&#xff0c;客户管理软件系统多少钱&#xff1f;是否需要买断&#xff0c;今天我们就来说一说。 一、什么是客户管理系统 客户管理系统是帮助企业建立…