Maven的基础使用

1 Maven概述

引入案例:idea创建javaWeb项目,如何打包并发布tomcat上去,以便于客户端访问?

方案一:DOS命令完成打包,操作性不方便,代码频繁修改,频繁使用命令打包一阶段可以打包,才可以提供给其他人使用,怎么打包?
eclipse集成打包命令
.jar -cvf tt.jar 方案二:使用专业的项目管理工具,完成项目生命周期的管理工作
maven
1 项目生命周期管理
2 管理资源(jar包)
传统方式:
2-1 拿到jar包
2-2 导入项目中
2-3 使用jar

1、什么是Maven

Maven的含义:Maven项目对象模型(Project Object Model),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。

Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期。

在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行。因为大部分的工程配置操作都非常简单并且可复用,在创建报告、检查、构建和测试自动配置时,Maven 可以让开发者的工作变得更简单。

Maven的优势:自动构建,jar包依赖管理,契约编程

a、Maven的依赖管理

常规的JAVAWEB项目开发过程,导包确实是一个比较痛苦的过程。特别是我们导入一个功能jar包,而它又依赖于其它的jar包【天啊,我怎么知道有哪些依赖包】,靠死记硬背,即花时间又没有太大的意义,而Maven完美的解决了这个问题,我们只需要导入功能包,它会为我们自动把对应的依赖包导入。

不过使用maven导包需要我们进行相应的xml配置(pom.xml),好吧,对初学者来说这个xml配置看起来也确实是比较麻烦,不过大家不用担心。等你学了Maven的仓库,一切都会变得简单起来。

b、项目的一键构建

使用Maven可以为我们完成很多相应的功能:清理代码,自动编译,完成测试,生成站点报告,进行打包(jar,war),项目部署。
1. 清理代码:相当于我们运行clear的效果
2. 自动编译:可以为咱们自动完成编译(类似于执行javac生成class文件)
3. 完成测试:实现测试功能,帮咱们完成
4. 生成报告:可以较为方便的实现对项目的管理
5. 打包:普通项目打jar包,web项目打成war包
6. 项目部署:只需要一句命令mvn jetty:run即可实现项目的部署

注意:使用jetty:run命令必需有相应的配置与插件(Maven的命令很多,但不是你想用,想用就能用,有一些命令是需要有插件的)

2 安装maven

1、Maven的下载

到Maven官网去下载Maven的安装软件。网址:http://maven.apache.org/
在这里插入图片描述

点击Download进入下载页面,目前最新的版本为3.8.1,我们下载解压版Maven
在这里插入图片描述

2、Maven的安装

Maven下载后,将Maven解压到一个没有中文没有空格的路径下。解压后目录结构如下:
在这里插入图片描述

目录解释:bin:存放了maven的命令boot:存放了一些maven本身的引导程序,如类加载器等conf:存放了maven的一些配置文件,如setting.xml文件lib:存放了maven本身运行所需的一些jar包

3、配置Maven环境变量

Maven解压后还需要为Maven配置环境变量才能使用,配置方式如下:

环境变量名称:MAVEN_HOME

环境变量值:Maven安装包的解压路径
在这里插入图片描述

在环境变量Path中输入Maven环境变量名称:%MAVEN_HOME%\bin
在这里插入图片描述

4、测试Maven

通过上面的三步配置后Maven的安装就完成了,下面我们来测试Maven是否安装成功,在命令行中输入mvn -v查看Maven版本信息
在这里插入图片描述

3、Maven仓库配置

1、Maven仓库分类

	maven的工作需要从仓库下载一些jar包,如下图所示,本地的项目A、项目B等都会通过maven软件从远程仓库(可以理解为互联网上的仓库)下载jar包并存在本地仓库,本地仓库 就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。

下图描述了maven中仓库的类型:
在这里插入图片描述

本地仓库 :用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找。默认本地仓库位置在 {user.dir}/.m2/repository,{user.dir}表示windows用户目录。远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。远程仓库可以在互联网内也可以在局域网内。中央仓库 :在maven软件中内置一个远程仓库地址http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由Maven团队自己维护,里面存储了非常全的jar包,它包含了世界上大部分流行的开源项目构件。

2、本地仓库配置

我们在使用maven时需要将远程仓库中的jar下载到本地仓库才能在项目中使用。所以要先配置本地仓库。本地仓库就是一个文件夹。

配置步骤:
a、新建一个文件夹repository
b、修改maven配置文件
全局 setting 与用户 setting

maven 仓库地址、私服等配置信息需要在 setting.xml 文件中配置,分为全局配置和用户配置。在 maven 安装目录下的有 conf/setting.xml 文件,此 setting.xml 文件用于 maven 的所有 project项目,它作为 maven 的全局配置。如需要个性配置则需要在用户配置中设置,用户配置的 setting.xml 文件默认的位置在:{user.dir}/.m2/settings.xml 目录中,{user.dir} 指 windows 中的用户目录。maven 会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。

设置本地仓库位置
在这里插入图片描述

找到maven解压目录中的maven-3.8.1\conf\settings.xml配置文件

在这里插入图片描述

打开settings.xml文件修改如下配置:
在这里插入图片描述

设置默认远程仓库地址

Maven默认使用的是maven的中央仓库(在国外),也就是项目中需要jar包时,都要从国外的服务器上下载到本地仓库中,速度很慢。国内针对这种情况也做了maven仓库的镜像服务器

国内Maven镜像地址:

开源中国:	
<mirror><id>nexus-osc</id><mirrorOf>*</mirrorOf><name>Nexus osc</name><url>http://maven.oschina.net/content/groups/public/</url>
</mirror>阿里:
<mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

一般我们都使用阿里的maven镜像服务器

打开settings.xml文件修改如下配置:
在这里插入图片描述

4、Maven 工程的目录

1、maven工程的目录

普通java项目,控制台项目

maven的项目有着严格的结构,不可以乱写。 maven工程的目录结构如下

在这里插入图片描述

作为一个maven工程,它的src目录和pom.xml是必备的。进入src目录后,我们发现它里面的目录结构如下
在这里插入图片描述

src/main/java —— 存放项目的.java文件
src/main/resources —— 存放项目资源文件,如spring, hibernate配置文件
src/test/java —— 存放所有单元测试.java文件,如JUnit测试类
src/test/resources —— 测试资源文件
target —— 项目输出位置,编译后的class文件会输出到此目录
pom.xml——maven项目核心配置文件

注意:如果是普通的java项目,那么就没有webapp目录。

5、IDEA创建Maven项目

1、idea配置maven
虽然目前在idea中都集成了Maven插件,但是idea集合的mavne版本和我们自己安装的版本不一样,需要为idea指定maven的版本。
在这里插入图片描述
在这里插入图片描述

解决创建新项目时,maven配置不起作用的问题
在这里插入图片描述
在这里插入图片描述

2、创建Maven控制台工程
在这里插入图片描述在这里插入图片描述

3、导入jar坐标

maven项目和普通项目最大的不同点就在于jar包的管理上,普通项目的jar是由程序员手动将所需要的jar导入到项目中,而maven项目是在pom.xml中通过坐标的方式将所需的jar包从网络上下载到maven的本地仓库中存储,然后项目通过maven调用本地仓库中的jar包。那么问题来了,我们怎么知道jar包的坐标是多省,在实际开发中我们会访问maven的资源网站来查找,比如我们要查找mysql的驱动包

网址:http://mvnrepository.com/
在这里插入图片描述在这里插入图片描述在这里插入图片描述

在项目的pom文件中粘贴复制好的jar包坐标,保存后maven会自动将所需jar包下载到本地仓库中
在这里插入图片描述

4、idea创建javaWeb项目

  • 选择项目模板:Java Enterprise
    在这里插入图片描述

  • 选择javaWeb版本
    在这里插入图片描述

  • javaWeb项目结构:
    在这里插入图片描述在这里插入图片描述

6、Maven常用命令

1、compile 编译

compile 是 maven 工程的编译命令,

mvc:compile 会将 src/main/java 下的文件编译为 class 文件输出到 target目录下。

cmd 进入命令状态,执行 mvn compile,如下图提示成功:
在这里插入图片描述

查看 target 目录,class 文件已生成,编译完成

2、test

test 是 maven 工程的测试命令

mvn test,会执行 src/test/java 下的单元测试类。

cmd 执行 mvn test 执行 src/test/java 下单元测试类,下图为测试结果,运行 1 个测试用例,全部成功。

在这里插入图片描述

3、clean

clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容 删除上一次编译结果

在这里插入图片描述

可以看到 target 目录被删除了

4、package

package 是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war包,生成的jar包或war包在项目的target目录中

在这里插入图片描述在这里插入图片描述

5、install

	install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。从运行结果中,可以看出:当后面的命令执行时,前面的操作过程也都会自动执行。

在这里插入图片描述在这里插入图片描述

生命周期 【理解】

Maven 有以下三个标准的生命周期:

  • clean:项目清理的处理
  • default(或 build):项目部署的处理
  • site:项目站点文档创建的处理

clean -> 编译compile -> test -> 打包package -> install安装 -> 部署deploy

  • package:会把打好的jar包放在target目录,不会把打好的jar包部署到本地maven仓和远程maven私仓。
  • install:会把打好的jar包部署到本地maven仓,但不会部署到远程maven私仓。
  • deploy:会把打好的jar包部署到本地maven仓和远程maven私仓。

maven工程版本问题

当我们创建一个maven工程后,发现pom文件的()节点中会带上一个SNAPSHOT。

maven中的仓库分为两种,snapshot快照仓库和release发布仓库。snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本。

我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次。我们知道,maven的依赖管理是基于版本管理的,对于发布状态的artifact,如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,maven也不会主动下载的。如果我们在开发阶段都是基于正式发布版本来做依赖管理,那么遇到这个问题,就需要升级组件的版本号,可这样就明显不符合要求和实际情况了。但是,如果是基于快照版本,那么问题就自热而然的解决了,而maven已经为我们准备好了这一切。

2、控制台程序打jar包,需要使用java -jar执行,需要配置插件

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.2.4</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.woniu.Person</mainClass></transformer></transformers></configuration></execution></executions>
</plugin>

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

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

相关文章

IDEA 中的奇技淫巧

IDEA 中的奇技淫巧 书签 在使用ctrlalt方向键跳转时&#xff0c;或者追踪代码时&#xff0c;经常遇到的情况是层级太多&#xff0c;找不到代码的初始位置&#xff0c;入口。可以通过书签的形式去打上一个标记&#xff0c;后续可以直接跳转到书签位置。 标记书签&#xff1a;c…

面试:Redis(缓存穿透、缓存击穿、缓存雪崩、双写一致、Redis的持久化、Redis的过期策略、Redis的数据淘汰策略、Redis的分布式锁、Redis的集群方案、Redis网络模型)

目录 一、缓存穿透 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 二、缓存击穿 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 三、缓存雪崩 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 3、解决方案三&#xff1a; 4、解决方案四&#…

C#窗体控件ColorDialog

介绍 可以获取颜色&#xff0c;然后对其他控件的颜色属性进行设置。 构造方式 直接把ColorDialog控件拖动到Form窗口。 常用属性 AllowFullOpen 可以控制是否使用自定义颜色&#xff0c;true表示可使用&#xff0c;否&#xff0c;表示不可使用。 AnyColor 如果为tr…

Unity 问题之 开发应用在设备上运行闪屏花屏问题的分析处理

Unity 问题之 开发应用在设备上运行闪屏花屏问题的分析处理 目录 Unity 问题之 开发应用在设备上运行闪屏花屏问题的分析处理 一、简单介绍 二、问题现象 三、问题分析 四、使用空后处理&#xff0c;解决闪屏花屏的显示问题 五、空后处理完整代码 一、简单介绍 Unity 在…

面试:Redis

目录 一、缓存穿透 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 二、缓存击穿 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 三、缓存雪崩 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 3、解决方案三&#xff1a; 4、解决方案四&#x…

【每日算法】理论:深度学习基础 刷题:KMP算法思想

上期文章 【每日算法】理论&#xff1a;常见网络架构 刷题&#xff1a;力扣字符串回顾 文章目录 上期文章一、上期问题二、本期理论问题1、注意力机制2、BatchNorm 和 LayerNorm 的区别3、Bert 的参数量是怎么决定的。4、为什么现在的大语言模型都采用Decoder only架构&#x…

第二篇:Python环境搭建:从初学者到专家

Python环境搭建&#xff1a;从初学者到专家 在编程的世界里&#xff0c;准备好一个高效而舒适的开发环境是走向成功的第一步。在这篇博客文章中&#xff0c;我们将一起探索如何为Python编程搭建一个理想的环境。无论你是完全的新手还是希望提升现有的技能&#xff0c;本文都会…

【Python 对接QQ的接口】简单用接口查询【等级/昵称/头像/Q龄/当天在线时长/下一个等级升级需多少天】

文章日期&#xff1a;2024.04.28 使用工具&#xff1a;Python 类型&#xff1a;QQ接口 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法&#xff09;&…

第10章 项目管理基础知识

一、项目概述 &#xff08;一&#xff09;项目 在既定的项目资源要求和约束下&#xff0c;为实现特定目标而相互联系的一次性活动&#xff08;资源任务&#xff09;。世界上没有两个完全相同的项目项目有资源约束&#xff0c;一定的目的&#xff0c;是一次性。 &#xff08;…

金属冶炼及压延加工制造数字孪生可视化平台,推进行业数字化转型

金属冶炼及压延加工制造数字孪生可视化平台&#xff0c;推进行业数字化转型。随着科技的不断进步和工业的快速发展&#xff0c;金属冶炼及压延加工行业正面临着前所未有的挑战和机遇&#xff0c;数字化转型成为了行业发展的必然趋势。在这个过程中&#xff0c;数字孪生可视化平…

OSPF大作业

一&#xff0c;拓扑 二&#xff0c;要求 1&#xff0c;r4为ISP上只配ip&#xff0c;r3与其他设备之间只使用公有IP 2&#xff0c;r3-r5/6/7为MGRE环境&#xff0c;r3为中心 3&#xff0c;整个OSPF的ip地址基于172.16.0.0/16划分 所以设备都可以访问r4的环回 4减少LSA的数量加快…

CSS实现jd的商品列表,附完整代码!

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合…

vue2如何创建一个项目?

目录 1. 安装环境&#xff1a; 2. 安装Vue CLI 3. 创建新项目 4. 选择配置 5. 安装依赖并运行 6. 开始开发 7. 构建项目 8. 预览生产环境构建 首先创建一个vue2项目&#xff0c;你可以通过以下步骤进行&#xff1a; 1. 安装环境&#xff1a; 保证自己的电脑已经安装N…

Jetpack Compose简介

文章目录 Jetpack Compose简介概述声明式UI和命令式UIJetpack Compose和Android View对比Compose API设计原则一切皆为函数组合优于继承单一数据源 Jetpack Compose和Android View关系使用ComposesetContent()源码ComposablePreview Jetpack Compose简介 概述 Jetpack Compos…

ElasticSearch教程入门到精通——第五部分(基于ELK技术栈elasticsearch 7.x+8.x新特性)

ElasticSearch教程入门到精通——第五部分&#xff08;基于ELK技术栈elasticsearch 7.x8.x新特性&#xff09; 1. Elasticsearch集成1.1 框架集成-SpringData-整体介绍1.2 Spring Data Elasticsearch 介绍1.3 框架集成-SpringData-代码功能集成1.3.1 创建Maven项目1.3.2 修改po…

持续记录|UNIAPP适配APP遇到的问题以及解决方案

在使用UNIAPP开发APP的时候遇到的一些奇奇怪怪问题记录 组件样式丢失 问题&#xff1a;组件引入界面中&#xff0c;在小程序和H5环境下样式正常&#xff0c;而在APP中却出现高度异常问题 解决&#xff1a;增加view标签将组件包裹起来即可正常显示 解决前&#xff1a; 解决后…

笔记:编写程序,绘制一个展示支付宝月账单报告的饼图,

文章目录 前言一、饼图是什么&#xff1f;二、分析题目三、编写代码总结 前言 编写程序&#xff0c;绘制一个展示支付宝月账单报告的饼图&#xff0c;实现过程如下&#xff1a; &#xff08;1&#xff09; 导入 matplotlib.pyplot 模块&#xff1b; &#xff08;2&#xff09;…

《Fundamentals of Power Electronics》——三端电池的旋转、负载差分连接

以下是关于三端电池的旋转的相关知识点&#xff1a; Buck电路、Boost电路和Buck-Boost电路均包含一个与单刀单掷开关相连的电感。如下图所示。 将上图中的电感和开关网络视为一个标有a,b,c三端的基础电池。该电池在电源和负载之间有三种不同的连接方式。a-A b-B c-C连接方式组…

将要上市的自动驾驶新书《自动驾驶系统开发》中摘录片段

全书共分15章&#xff1a;第1章是自动驾驶系统的概述&#xff08;场景分类、开发路径和数据闭环等&#xff09;&#xff0c;第2章简介自动驾驶的基础理论&#xff0c;即计算机视觉和深度学习等&#xff0c;第3&#xff5e;4章是自动驾驶的软硬件平台分析&#xff0c;包括传感器…

《动手学深度学习(Pytorch版)》Task02:预备知识——4.25打卡

《动手学深度学习&#xff08;Pytorch版&#xff09;》Task02&#xff1a;预备知识——4.25打卡 数据操作N维数组——张量创建数组访问元素入门初始化矩阵 运算符广播机制索引和切片节省内存转换为其他Python对象转换为NumPy张量ndarray张量转换为Python标量 数据预处理安装pan…