Maven 快速入门

一、来 , 了解下 Maven ! ! !

  1. Maven 是什么 ?

    一个对 Maven 比较正式的定义 : Maven是 一个项目管理工具 , 它包含了一个项目对象模型(POM),一组标准集合 , 一个项目生命周期,一个依赖管理系统和用来运行定义在生命周期阶段中插件目标的逻辑 .

  2. Maven 用来解决什么问题 ?

    1.主要是用来解决导入java类依赖的jar,编译java项目主要问题 ;

    2.可以解决jar之间的依赖和冲突;

    3.jar 包管理,防止jar之间依赖起冲突 ;

    4.Maven是基于项目对象模型,可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven能够很方便的帮你管理项目报告,生成站点,管理jar文件,等等。例如:项目开发中第三方jar引用的问题,开发过程中合作成员引用的jar版本可能不同,还有可能重复引用相同jar的不同版本,使用maven关联jar就可以配置引用jar的版本,避免冲突。

    既然这么多用处,他的优势在哪里下面就聊聊它的优势 :

    Maven 优势一:相同的项目结构

    使用Maven管理的Java 项目都有着相同的项目结构

    1. 有一个pom.xml 用于维护当前项目都用了那些jar包

    2. 所有的java代码都放在 src/main/java

    3. 所有的测试代码都放在src/test/java
      image-20200526171021307.png

      Maven 优势二:统一维护jar包

比如说有3个Java 项目,这些项目都不是maven风格。那么这3个项目,就会各自维护一套jar包。 而其中有些jar包是相同的。

而maven风格的项目,首先把所有的jar包都放在"maven仓库“ 里,然后哪个项目需要用到这个jar包,只需要给出jar包的名称和版本号就行了。 这样jar包就实现了共享如图所示


image-20200526171123083.png

二、让我们进入 Maven 的使用 ! ! !

2.1.1 Maven 软件的下载

为了使用 Maven 管理工具,我们首先要到官网去下载它的安装软件。通过百度搜索“Maven“如下:

image-20200526171725123.png

点击 Download 链接,就可以直接进入到 Maven 软件的下载页面:
image-20200526171746052.png

2.1.2 Maven 软件的安装

Maven 下载后,将 Maven 解压到一个没有中文没有空格的路径下,比如 D:\software\maven 下面。

解压后目录结构如下:
image-20200526171909811.png

bin:存放了 maven 的命令,比如我们前面用到的 mvn tomcat:run

boot:存放了一些 maven 本身的引导程序,如类加载器等

conf:存放了 maven 的一些配置文件,如 setting.xml 文件

lib:存放了 maven 本身运行所需的一些 jar 包

至此我们的 maven 软件就可以使用了,前提是你的电脑上之前已经安装并配置好了 JDK。

2.1.3 JDK 的准备及统一

本次课程我们所使用工具软件的统一,JDK 使用 JDK8版本

  1. JDK 环境:

2.1.4 Maven JDK 配置

电脑上需安装 java 环境,安装 JDK1.7 + 版本 (将JAVA_HOME/bin 配置环境变量 path ),我们使用的是 JDK8 相关版本配置 MAVEN_HOME ,变量值就是你的 maven 安装 的路径(bin 目录之前一级目录)
image-20200526172034988.png

上面配置了我们的 Maven 软件,注意这个目录就是之前你解压 maven 的压缩文件包在的的目录,最好不要有中文和空格。

再次检查 JDK 的安装目录,如下图:

image-20200526172104217.png

2.1.5 Maven 软件版本测试

通过 mvn -v命令检查 maven 是否安装成功,看到 maven 的版本为 3.5.2 及 java 版本为 1.8 即为安装成功。

找开 cmd 命令,输入 mvn –v命令,如下图:
image-20200526172137018.png

我们发现 maven 的版本,及 jdk 的版本符合要求,这样我们的 maven 软件安装就成功了

三、Maven设置

1、本地仓库

运行过 Maven 命令才会在你的用户目录生成一个 .m2 目录,该目录下有个目录名 repository,这个就是所谓的本地仓库,主要存放是一些下载的 jar 文件。

本地仓库默认位置在用户目录/.m2/repository,本地仓库不建议在系统盘,最佳实践:

将 Maven 根目录的 conf/settings.xml 拷贝到 .m2 中,作为个人 Maven 配置文件;

在 settings.xml 文件中 修改本地仓库的位置。

<?xml version="1.0" encoding="UTF-8"?> 

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd 

<!-- 本地仓库地址 --> 

<localRepository>你本地仓库的目录位置</localRepository> 

</settings> 

2、配置中央仓库镜像

在有网情况下,官方中央仓库服务器在国外,所以很大可能出现下载失败的问题,所以我们配置一个中央仓库的镜像来降低下载失败的概率。

<?xml version="1.0" encoding="UTF-8"?> 

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd 

<!-- 本地仓库地址 --> 

<localRepository>你本地仓库的目录位置</localRepository> 

<mirrors> 

<!-- 阿里仓库镜像 --> 

<mirror> 

<id>alimaven</id> 

<name>aliyun maven</name> 

<url>http://maven.aliyun.com/nexus/content/groups/public/</url> 

<mirrorOf>central</mirrorOf> 

</mirror> 

</mirrors> 

</settings>

2.3 Maven 工程的认识

2.3.1 Maven 工程的目录结构

image-20200526172815933.png

作为一个 maven 工程,它的 src 目录和 pom.xml 是必备的。

进入 src 目录后,我们发现它里面的目录结构如下:
image-20200526172836572.png

src/main/java —— 存放项目的.java 文件

src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件

src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类

src/test/resources —— 测试资源文件

target —— 项目输出位置,编译后的 class 文件会输出到此目录

pom.xml——maven 项目核心配置文件

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

2.3.2 Maven 工程的运行

进入 maven 工程目录(当前目录有 pom.xml 文件),运行 tomcat:run 命令。

image-20200526172911506.png

2.3.3 问题处理

如果本地仓库配置错误会报下边的错误
image-20200526173005319.png

分析:

maven 工程运行先从本地仓库找 jar 包,本地仓库没有再从中央仓库找,上边提示 downloading…

表示 从中央仓库下载 jar,由于本地没有联网,报错。

解决:

在 maven 安装目录的 conf/setting.xml 文件中配置本地仓库,参考:“maven 仓库/配置本地仓库章节”。

四、 Maven 常用命令

我们可以在 cmd 中通过一系列的 maven 命令来对我们的 maven-helloworld 工程进行编译、测试、运行、打包、安装、部署。

4.1.1 compile

compile 是 maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target

目录下。

cmd 进入命令状态,执行 mvn compile,如下图提示成功:
image-20200526173046423.png

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

4.1.2 test

test 是 maven 工程的测试命令 mvn test,会执行 src/test/java 下的单元测试类。

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

image-20200526173132004.png

4.1.3 clean

clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容。

4.1.4 package

package 是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war

包。

4.1.5 install

install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。

从运行结果中,可以看出:

当后面的命令执行时,前面的操作过程也都会自动执行,

4.1.6 Maven 指令的生命周期

maven 对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,

这三套生命周期分别是:

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。

Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。

Site Lifecycle 生成项目报告,站点,发布站点。

4.1.7 maven 的概念模型

Maven 包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
image-20200526173206470.png

 项目对象模型 (Project Object Model)

一个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的坐标、项目依赖、项目信息、插件目标等。

 依赖管理系统(Dependency Management System)

通过 maven 的依赖管理对项目所依赖的 jar 包进行统一管理。

比如:项目依赖 junit4.9,通过在 pom.xml 中定义 junit4.9 的依赖即使用 junit4.9,如下所示是 junit4.9

的依赖定义:

<!-- 依赖关系 -->

<dependencies>

<!-- 此项目运行使用 junit,所以此项目依赖 junit -->

<dependency>

<!-- junit 的项目名称 -->

<groupId>junit</groupId>

<!-- junit 的模块名称 -->

<artifactId>junit</artifactId>

<!-- junit 版本 -->

<version>4.9</version>

<!-- 依赖范围:单元测试时使用 junit -->

<scope>test</scope>

</dependency>

 一个项目生命周期(Project Lifecycle)

使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven 将这些

过程规范为一个生命周期,如下所示是生命周期的各阶段:[图片上传中...(idea-2.jpg-b195a7-1590489078136-0)]


image-20200526173337730.png

maven 通过执行一些简单命令即可实现上边生命周期的各各过程,比如执行 mvn compile 执行编译、执行 mvn clean 执行清理。

 一组标准集合

maven 将整个项目管理过程定义一组标准,比如:通过 maven 构建工程有标准的目录结构,有

标准的生命周期阶段、依赖管理有标准的坐标定义等。

 插件(plugin)目标(goal)

maven 管理项目生命周期过程都是基于插件完成的。

五、****IDEA Maven 的配置

配置安装的 Maven,设置 setttings.xml 和本地仓库。
idea-2.jpg

看看啊看
compile:默认,适用于所有阶段,会随着项目一起发布,在编译,测试,运行时都有效;
provided:编译和测试阶段使用;典型的如 servlet-api.jar,打包时不需要,容器来提供; servlet /lombok
runtime:测试和运行阶段使用,用于接口和实现分离,典型的如 jdbc 具体驱动实现; mysql
test:测试阶段使用,不会随项目发布,如 junit。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352