Maven 概述与使用


Maven 项目管理工具

1. Maven 简介

a. Maven 是什么?

  • Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。
  • 对 Maven 比较正式的定义:Maven 是一个项目管理工具,它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的工具。

b. Maven 能解决什么问题?

  • 可以用更通俗的方式来说明。我们知道,项目开发不仅仅是写写代码而已,期间会伴随着各种必不可少的事情要做,下面列举几个例子:
  1. 我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个,每用到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突
  2. 我们写好的 java 文件,需要通过 javac 编译成 class 文件才能交给 JVM 运行。这项工作可以由各种 集成开发工具 帮我们完成 Eclipse、IDEA 等都可以将代码即时编译。
  3. 世界上没有不存在 bug 的代码,因此写完了代码,我们还要写一些单元测试,然后 逐一 运行来检验代码质量。
  4. 再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,进行 打包。如果是 web 项目,还需要将之发布到服务器 。
  • 试想,如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你构建工程,管理 jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站点,你会心动吗?Maven 就可以解决上面所提到的这些问题。

c. Maven 的两个核心功能(重点)

i. 依赖管理
  • 传统的 WEB 工程中,我们必须将工程所依赖的 jar 包复制到工程中,导致了工程的变得很大。
  • Maven 的 WEB 工程中不直接将jar包导入到工程中,而是通过在 pom.xml 文件中添加所需jar包的坐标。项目运行时,通过读取坐标到一个专门用于“存放jar包仓库"(Maven仓库)找到相应的jar包。
    在这里插入图片描述
  • 仓库如何存放 jar 包?
    在这里插入图片描述
ii. 项目构建
  • 我们开发的项目,往往都要经历编译、测试、打包、安装,部署等一系列过程。
  • 什么是构建项目?
    指的是项目从编译、测试、打包、安装,部署整个过程都交给 ?Maven 进行管理,这个过程称为构建。
  • 一键构建
    指的是整个构建过程,使用 Maven 一个命令可以轻松完成整个工作。

2. Maven 安装和使用

a. Maven 下载和安装

  • 下载
    Maven 官网下载地址 :http://maven.apache.org/download.cgi
    Maven 3.3+ 必须要求 JDK 1.7+
  • 安装
    Maven 使用 java 语言开发的,解压即可运行
    注意:Maven 依赖 JAVA_HOME
  • 目录
    bin:存放了 Maven 的命令,比如我们前面用到的 mvn tomcat7:run
    boot:存放了一些 Maven 本身的引导程序,如类加载器等
    conf:存放了 Maven 的一些配置文件,如 setting.xml 文件
    lib:存放了 Maven 本身运行所需的一些 jar 包
    在这里插入图片描述
  • 环境变量
    MAVEN_HOMEMaven 安装目录
    path%MAVEN_HOME%\bin
  • 配置完毕后检查版本
    mvn --version
    在这里插入图片描述

b. Maven仓库(重点)

i. Maven 仓库的分类
  1. 本地仓库
    项目通过 jar 坐标,先从本地仓库找对应 jar 包,如果找不到会从远程仓库(互联网)去下载 jar 包,保存在本地仓库(在程序员的电脑上),第二次不需要从远程仓库去下载。
  2. 远程仓库
    • 中央仓库
      由专业团队(Maven 团队)统一维护。
      中央仓库的地址:http://repo1.maven.org/maven2/
    • 私服
      架设在公司局域网内,提供给内部的人员使用。
    • 第三方仓库
      中央仓库只有一个,国内使用非常慢,我们可以更换为:阿里云镜像。

在这里插入图片描述

ii. Maven 本地仓库的配置
  1. 将 repository.zip 解压到非中文及特殊符号目录下
    (Maven 仓库)
    在这里插入图片描述
  2. 修改 Maven 的安装目录 /conf/settings.xml 文件的标签
    <localRepository>本地仓库地址</localRepository>
    (指定自定义本地仓库)
    在这里插入图片描述
iii. Maven 仓库国内镜像配置
  • 修改 Maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加内容如下:
<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
</mirrors>

在这里插入图片描述

c. Maven 坐标和依赖

  • 想要只用哪个 jar 包,通过坐标方式进行依赖引入。
    在这里插入图片描述
    在这里插入图片描述

d. Maven 工程的结构(重点)

  • 传统的 java 工程遇到的问题:
    在这里插入图片描述
* java项目
	java工程名(项目名)
		|-- src目录
			|-- main目录(主干代码)
				|-- java目录(java代码)
				|-- resources目录(配置文件)
			|-- test目录(测试代码)
				|-- java目录(java代码)
				|-- resources目录(配置文件)
		|-- pom.xml(maven工程核心配置文件)
		|-- target目录(存放编译后的class文件,没有test目录下的编译文件)

* web项目(重点)
	web工程名(项目名)
		|-- src目录
			|-- main目录(主干代码)
				|-- java目录(java代码)
				|-- resources目录(配置文件)
				|-- webapp目录(页面资源)
					|-- WEB-INF
						|-- web.xml(web工程核心配置文件)
					|-- index.jsp
					|-- css、js、img..
			|-- test目录(测试代码)
				|-- java目录(java代码)
				|-- resources目录(配置文件)
		|-- pom.xml(maven工程核心配置文件)
		|-- target目录(存放编译后的class文件,没有test目录下的编译文件)

3. Maven 生命周期和插件(了解)

a. Maven 常用命令和插件

  • 可以在 cmd 中通过一系列的 Maven 命令,来对我们的工程进行编译、测试、打包、安装、部署。
i. clean
  • Maven 工程的清理命令,执行 clean 会删除 target 目录及内容(之前的 out 目录)。
  • mvn clean
    在这里插入图片描述
ii. compile
  • Maven 工程的编译命令,作用是将 src/main/.java 下的文件编译为 class 文件,并和 src/main 目录下的配置文件一起输出到 target/classes 目录下。
  • mvn compile
    在这里插入图片描述
iii. test
  • Maven 工程的测试命令,作用是执行 src/test/java 下单元测试类,并编译为 class 文件。
  • mvn clean test 先清理再测试
    在这里插入图片描述
    在这里插入图片描述
iv. package
  • Maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war 包。 会自动进行测试,测试成功就打包,不成功不打包。
  • mvn clean package 先清理再打包
    在这里插入图片描述

注意:为什么 maven_hello 是 war 包而不是 jar 包呢?
在这里插入图片描述

v. install
  • Maven 工程的安装命令,执行 install 将 mave 工程打成 jar 包或 war 包,并发布到本地仓库。也是先编译主干再测试,需要添加依赖。
  • mvn clean install 先清理再安装
    在这里插入图片描述
    在这里插入图片描述
vi. deploy
  • Maven 工程部署命令,将 jar 或 war 包部署(上传)到私服中。
  • Maven 高级介绍了这个命令。

b. 生命周期

  • Maven 对项目构建过程分为 “三套相互独立的” 生命周期,这三套生命周期分别是:
  1. Clean Lifecycle(清理生命周期)
    在进行真正的构建之前进行一些清理工作。
    命令:clean
  2. Default Lifecycle(默认生命周期)
    构建的核心部分,编译,测试,打包,部署等等。
    命令:compile test package install deploy
  3. Site Lifecycle(站点生命周期)
    生成项目报告,站点,发布站点。
    命令:site
  • 在同一个生命周期中的命令,执行后面的命令,前面的命令自动执行
    在这里插入图片描述

c. Maven 概念模型(了解)

在这里插入图片描述

4. IDEA 创建 Maven 工程(重点)

a. IDEA 配置本地 Maven 环境(全局)

在这里插入图片描述

  • 我们在 IDEA 创建 Maven 工程默认从互联网在下载一个骨架(但是我们电脑没有联网,就会卡顿一段时间,再使用本地骨架),我们可以直接指定 IDEA 查找本地骨架,提升效率并指定编码防止乱码。
-DarchetypeCatalog=internal -Dfile.encoding=GB2312

在这里插入图片描述

  • 需要创建一个全新的工作空间(基于 Mave 结构),注意要遵守 IDEA 初始化工作空间规范。

b. IDEA 创建工程

i. Java 工程

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

  • 手动创建 test 测试配置文件目录:
    在这里插入图片描述
    在这里插入图片描述
  • 指定 Maven 环境的 JDK 版本和字符集:
<build>
    <plugins>
        <!-- 设置编译版本为1.8 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

在这里插入图片描述

	<!--依赖管理-->
    <dependencies>
        <!--junit坐标-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

在这里插入图片描述

ii. web 工程(重点)

在这里插入图片描述

  • IDEA 创建 web 工程,需要我们安装一个插件:
    在这里插入图片描述
  • 安装成功后,重启 IDEA 工具
    在这里插入图片描述
    在这里插入图片描述
iii. 注意
  • 创建完 Maven 之后,如果文件夹不会变颜色,可以手动刷新:
    在这里插入图片描述

c. 发布 web 工程

i. IDEA 使用外置 Tomcat 运行(重点)
  • 点击 Add Configuration:
    在这里插入图片描述
    在这里插入图片描述
  • 测试:
    在这里插入图片描述
ii. IDEA 使用 Maven 内置 Tomcat 插件(了解)
	<build>
        <plugins>
            <!-- 设置编译版本为1.8 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                    <uriEncoding>utf-8</uriEncoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

在这里插入图片描述

  • 双击启动(推荐):
    在这里插入图片描述
  • 命令启动(不推荐,取消会默认退回到之前的 Module):
    在这里插入图片描述

d. 依赖管理

  • 开发期间,jar 包都在仓库;运行期间,Maven 自动把 jar 包放到了项目的 lib 目录下。
  • 不考虑依赖范围引起的问题:
    在这里插入图片描述
    在这里插入图片描述
  • clean package 之后,javax.servlet-api.jar 包消失了。
    在这里插入图片描述
依赖范围对于编译 classpath 有效对于测试 classpath 有效对于运行时classpath 有效例子
compile(默认)YYYmybatis
test-Y-junit
providedYY-servlet-api
runtime-YYJDBC驱动
systemYY-本地,maven仓库之外的库
  • compile
    默认依赖范围,作用域在编译、测试、运行时都有效。
  • test
    作用域在测试时有效。编译和运行时不需要,比如:Junit。
  • provided
    作用域在编译、测试时有效。运行时不需要,比如: servlet api 被 tomcat 容器提供,不指定可能会因为版本不兼容导致冲突。
  • runtime
    作用域在测试、运行时有效。编译时不需要,比如:jdbc 的驱动包。
  • system
    system 范围依赖与 provided 类似,jar 包在本地磁盘而不是 Maven 仓库。相当于找到 WEB-INF/lib,自己导入 jar 包,一般是因为在 Maven 仓库(本地、官网)里没有该 jar 包,不过一般很少出现该情况。

5. 项目流程

在这里插入图片描述


原文链接:https://qwert.blog.csdn.net/article/details/106132879

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值