Maven

一、为什么需要Maven?

1、当我们在开发中,常会遇到以下问题

  • 工程中用到的jar包都需要手动引入到工程目录,经常会遇到jar包冲突。不同项目中的jar包重用性弱。
  • 从编写java文件到工程项目部署,步骤繁琐,生命周期漫长。
  • 编写完代码后,需要写单元测试检验代码质量。
  • 每个人编写代码的风格不同,无法统一工程目录结构。

2、maven的概念及优势

概念:Maven是一个项目管理工具,它包含了一个项目对象模型(POM Project Object Model),一组标准集合,一个项目生命周期(Project LiftCycle)一个依赖管理系统(Dependency Mainagement System),和用来运行定义在声明周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

官方的定义总是那么绕,总的来说,maven主要是

  • 统一了开发规范
  • 统一管理jar包(依赖管理)

二、Maven的安装与配置

从官网上下载的压缩包直接解压即可,在安装maven前,需要确保自己的电脑中安装了jdk。

1、maven在本地的配置

配置环境变量
在这里插入图片描述
同样需要在Path中配置
在这里插入图片描述
验证是否安装成功

在命令提示行中输入mvn -v,显示如下,即证明暗转成功
在这里插入图片描述

2、在IDEA中配置maven插件

在IDEA中,依次打开Settings–>Build,Execution,Deployment–>Maven

配置maven目录及maven仓库
在这里插入图片描述
本地仓库的配置

本地仓库的路径默认为:${user.home}/.m2/repository

其中,本地仓库的路径是可以修改的,只需要在config/settings.xml中添加本地仓库路径即可,即localRepository
在这里插入图片描述

三、Maven的概要

1、maven的仓库分类及关系

  • 本地仓库:存储从远程仓库或者中央仓库下载的插件和jar包,项目中需要使用的jar优先从本地仓库中拿。

  • 远程仓库:若本地仓库中没有项目中要用的jar包,则从远程仓库取。

  • 中央仓库:maven中内置了一个远程仓库地址http://repo1.maven.org/maven2,这个网址就是中央仓库,服务于整个互联网,里面保存了几乎所有的jar包
    在这里插入图片描述
    Note:maven项目所需要的jar包会优先从本地仓库中取,若在本地仓库中没有找到,①若是个人项目,并且电脑联网,则会从中央仓库中下载所需的jar包放入到本地仓库中。②若是公司项目,公司可能会有自己的仓库(私服),当在本地方库找不到,会转向远程仓库,若远程仓库也找不到,则会转向中央仓库。

2、Maven工程的目录结构

使用maven创建的普通java工程,其目录结构如下

作为maven工程,它的src目录和pom.xml文件是必备的
在这里插入图片描述

  • **src/main/java:**放置编写的.java文件

  • src/main/resources:放置项目资源文件

  • **src/test/java:**存放所有单元测试.java文件,如Junit测试类

  • src/test/resources:测试资源文件

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

  • pom.xml:maven项目的核心配置文件

若使用maven创建Web工程,则会在原有的目录结构中多出webapp目录
在这里插入图片描述
src/main/webapp:页面素材资源等

但是WEB-INF是java的应用安全目录,即客户端无法访问,只有服务端可以访问的目录,如果想在页面中直接访问其中的文件,必须通过web.xml对要访文件进行相应的映射才能访问。

3、maven常用的指令及指令绑定

  • compile:maven的工程编译指令,其作用是将src/main/java下的文件编译为class文件输出到target目录下
  • test:maven工程测试命令,执行src/test/java下的单元测试类
  • clean:maven工程的清理命令,执行clean会删除target目录及内容
  • package:maven工程的打包命令,将java工程打成jar包,将web工程打成war包
  • install:maven工程的安装命令,其作用是将jar包或war包发布到本地仓库

4、maven的生命周期

maven对项目的构建过程分为三套相互独立的生命周期

  • Clean LifeCycle:项目构建前的清理工作

  • Default LifeCycle:项目构建的核心部分,如编译、测试、打包、部署等。

  • Site LifeCycle:项目报告的生成、站点的发布

生命周期内都包含了要执行的指令,一个标准的构建LifeCycle包含如下的指令:

validate: 用于验证项目的有效性和其项目所需要的内容是否具备
initialize:初始化操作,比如创建一些构建所需要的目录等。
generate-sources:用于生成一些源代码,这些源代码在compile phase中需要使用到
process-sources:对源代码进行一些操作,例如过滤一些源代码
generate-resources:生成资源文件(这些文件将被包含在最后的输入文件中)
process-resources:对资源文件进行处理
compile:对源代码进行编译
process-classes:对编译生成的文件进行处理
generate-test-sources:生成测试用的源代码
process-test-sources:对生成的测试源代码进行处理
generate-test-resources:生成测试用的资源文件
process-test-resources:对测试用的资源文件进行处理
test-compile:对测试用的源代码进行编译
process-test-classes:对测试源代码编译后的文件进行处理
test:进行单元测试
prepare-package:打包前置操作
package:打包
pre-integration-test:集成测试前置操作   
integration-test:集成测试
post-integration-test:集成测试后置操作
install:将打包产物安装到本地maven仓库
deploy:将打包产物安装到远程仓库

Note:当执行任何一个指令时,maven都会将其之前指令都会执行。

生命周期的每一个指令都需要相应的goal来执行。生命周期的每个过程都是基于插件完成的。
在这里插入图片描述在这里插入图片描述
我们并不需要了解生命周期内的所有的指令,只需要掌握核心的指令完成项目的构建,如清理、编译、测试、部署等过程即可。
在这里插入图片描述

5、项目对象模型

项目对象模型(Project Object Model)对应是工程中的pom.xml文件,我们可以通过pom.xml文件定义项目的坐标、项目的依赖、项目信息和插件等。
在这里插入图片描述

6、依赖管理系统

  • 使用maven可以对所依赖的jar包进行统一管理。如项目依赖servlet,就需要在pom.xml文件中引入相关的依赖
<dependencies>
    <dependency>
    <!--项目的名称-->
  <groupId>javax.servlet</groupId>
    <!--模块名称-->
  <artifactId>servlet-api</artifactId>
    <!--版本号-->
  <version>2.5</version>
    <!--依赖作用的范围-->
  <scope>provided</scope>
</dependency>
</dependencies>

  • 插件,以mvn-clean为例

    <plugin>
      <artifactId>maven-clean-plugin</artifactId>
      <version>3.1.0</version>
    </plugin>
    

Note:groupIdartifactIdversion这三个元素是项目的坐标,maven通过坐标找到相应的jar包

groupId:项目所在组,一般是组织或公司

artifactId:当前在组中的唯一Id

version:版本号

scope表示依赖范围

依赖范围对于编译classpath有效对于测试classpath有效对于运行时classpath有效例子
compileYYYspring-core
test-Y-Junit
providedYY-Servlet-api
runtime-YYJDBC驱动实现
systemYY-本地仓库之外的类库文件

7、一组标准集合

maven将整个项目的管理过程定义了一组标准,比如,通过maven构建工程有标准的目录结构,有标准的生命周期阶段,依赖管理有标准的坐标定义。

四、在IDEA中使用Maven

1、使用maven构建java工程

  • 采用maven骨架(maven-archetype-quickstart),也可不采用直接构建
    在这里插入图片描述
    • 填写唯一识别的坐标,GroupId、ArtifactId、Version
      在这里插入图片描述
    • 配置目录和本地仓库

在这里插入图片描述

  • 确定项目名称

在这里插入图片描述

  • 根据maven的标准目录结构补全项目的目录结构

    建新目录–>右击—>Mark Directory as—>想要的目录类型
    在这里插入图片描述

    2、使用maven创建web工程

    • 使用骨架(maven-archetype-quickstar-webapp)

在这里插入图片描述

剩下的操作步骤都是和构架java工程相同的

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐