10分钟快速掌握 Maven 的核心概念

>>强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!

点击关注公众号,利用碎片时间学习

Maven 是什么?

Maven的意思是“专家,知识的积累着”,来自Yiddish语言,meyvn单词,意为“知识的积累者”

Maven是一个项目管理工具,基于项目对象模型(POM)管理项目,就是用XML描述一个项目的信息(主要是项目依赖jar,插件,仓库等等)

同类型工具还有Ant,Gradle,目前Maven用的更普遍一些,同等工具还有nodejs下的npm等等

Maven最大的好处是,基于“约定大于配置”思想,在全世界做好了Java项目开发的规范,使得开发人员可以在多个项目间平滑迁移。

Apache的开源工具,开源免费

  • 官网:https://maven.apache.org/
  • 源码:https://github.com/apache/maven

下载安装

  • 下载地址 https://maven.apache.org/download.cgi
10分钟快速掌握 Maven 的核心概念
  • 下载压缩包解压可用,非常简单
  • 需要预装JDK环境,并配置JAVA_HOME环境变量
  • 将Maven的解压目录加入系统环境变量PATH
10分钟快速掌握 Maven 的核心概念

运行

  • 运行Maven的语法如下:mvn [选项] [<目标>] [<阶段>]
  • 获取帮助命令 mvn -h

约定配置

一个Maven项目目录如下,约定如此:

-- 项目目录
----src 资源目录,存放项目代码
------main 代码主目录,存放项目主体代码
--------java 存放java代码
--------resource 存放资源代码
------test  测试目录,存放测试相关代码
--------java 存放java代码
--------resource 存放资源代码
-----target 打包输出目录,存放项目打包后输出的jar或war包
-------classes 编译输出目录
-------test-classes 测试代码编译输出目录
--pom.xml 项目对象模型描述文件,是一个xml文件

一个项目的开发流程约定如下:

Maven提供一个中心仓库,大家把自己写好的代码打包成jar发布到中心仓库,用一段pom片段描述项目信息,别人使用该项目的时候,引入该pom片段,Maven自动把相关jar依赖下载并配置到项目开发环境中,如果多个jar之间有相互依赖或继承等关系,Maven会自动处理好。

Maven仓库

仓库分为:

  • 中央(central)
  • 远程(remote)
  • 本地(local)

中央仓库是中心节点,有Maven社区提供,但是各国或各公司网络访问中心仓库速度可能很慢,所以可以自己搭建远程仓库,相当于中央仓库的一个缓存点,加快网络访问速度,还有一个问题,每次都下载jar是非常浪费带宽和时间的,所以在开发者本机也有一个本地仓库,用来缓存jar。

仓库本质就是一个文件夹,用来存放依赖jar等文件。

本地仓库目录默认存放在用户目录下.m2文件下

  • .m2/respository/ 为仓库存放目录
  • .m2/settings.xml 为Maven的设置文件

本地仓库路径修改需要修改setting.xml

<localRepository>C:/MyLocalRepository</localRepository>

远程仓库修改需要修改项目中的pom.xml文件

 <repositories>
      <repository>
         <id>companyname.lib1</id>
         <url>http://download.companyname.org/maven2/lib1</url>
      </repository>
      <repository>
         <id>companyname.lib2</id>
         <url>http://download.companyname.org/maven2/lib2</url>
      </repository>
   </repositories>
  • 中央仓库地址:https://mvnrepository.com/

可以web打开搜索依赖。

Maven依赖的搜索顺序:

  • 本地仓库搜索,搜索到即使用,搜索不到就去中央仓库搜索
  • 中央仓库搜索到则下载缓存到本地仓库,搜索不到则查找配置的远程仓库
  • 如果没配置远程仓库,则报错,配置了远程仓库,则去远程仓库查找
  • 远程仓库搜索到则下载到本地缓存,搜索不到则报错

POM 坐标

<project>
    <!-- 模型版本 -->
    <modelVersion>4.0.0</modelVersion>
    <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
    <!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
    <artifactId>project</artifactId>
    <!-- 版本号 -->
    <version>1.0</version>
</project>

Maven生命周期

10分钟快速掌握 Maven 的核心概念
  • 验证 validate 验证项目 验证项目是否正确且所有必须信息是可用的
  • 编译 compile 执行编译 源代码编译在此阶段完成
  • 测试 Test 测试 使用适当的单元测试框架(例如JUnit)运行测试。
  • 包装 package 打包 创建JAR/WAR包如在 pom.xml 中定义提及的包
  • 检查 verify 检查 对集成测试的结果进行检查,以保证质量达标
  • 安装 install 安装 安装打包的项目到本地仓库,以供其他项目使用
  • 部署 deploy 部署 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

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

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

Clean 生命周期

当我们执行 mvn post-clean 命令时,Maven 调用 clean 生命周期,它包含以下阶段:

  • pre-clean:执行一些需要在clean之前完成的工作
  • clean:移除所有上一次构建生成的文件
  • post-clean:执行一些需要在clean之后立刻完成的工作

Default (Build) 生命周期

这是 Maven 的主要生命周期,被用于构建应用,包括下面的 23 个阶段:

  • validate(校验) 校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
  • initialize(初始化) 初始化构建状态,比如设置属性值。
  • generate-sources(生成源代码) 生成包含在编译阶段中的任何源代码。
  • process-sources(处理源代码) 处理源代码,比如说,过滤任意值。
  • generate-resources(生成资源文件) 生成将会包含在项目包中的资源文件。
  • process-resources (处理资源文件) 复制和处理资源到目标目录,为打包阶段最好准备。
  • compile(编译) 编译项目的源代码。
  • process-classes(处理类文件) 处理编译生成的文件,比如说对Java class文件做字节码改善优化。
  • generate-test-sources(生成测试源代码) 生成包含在编译阶段中的任何测试源代码。
  • process-test-sources(处理测试源代码) 处理测试源代码,比如说,过滤任意值。
  • generate-test-resources(生成测试资源文件) 为测试创建资源文件。
  • process-test-resources(处理测试资源文件) 复制和处理测试资源到目标目录。
  • test-compile(编译测试源码) 编译测试源代码到测试目标目录.
  • process-test-classes(处理测试类文件) 处理测试源码编译生成的文件。
  • test(测试) 使用合适的单元测试框架运行测试(Juint是其中之一)。
  • prepare-package(准备打包) 在实际打包之前,执行任何的必要的操作为打包做准备。
  • package(打包) 将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
  • pre-integration-test(集成测试前) 在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
  • integration-test(集成测试) 处理和部署项目到可以运行集成测试环境中。
  • post-integration-test(集成测试后) 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
  • verify (验证) 运行任意的检查来验证项目包有效且达到质量标准。
  • install(安装) 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
  • deploy(部署) 将最终的项目包复制到远程仓库中与其他开发者和项目共享。
说明:

有一些与 Maven 生命周期相关的重要概念需要说明:

当一个阶段通过 Maven 命令调用时,例如 mvn compile,只有该阶段之前以及包括该阶段在内的所有阶段会被执行。

不同的 maven 目标将根据打包的类型(JAR / WAR / EAR),被绑定到不同的 Maven 生命周期阶段。

Site 生命周期

Maven Site 插件一般用来创建新的报告文档、部署站点等。

  • pre-site:执行一些需要在生成站点文档之前完成的工作
  • site:生成项目的站点文档
  • post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy:将生成的站点文档部署到特定的服务器上

Maven的所有生命周期都是由插件完成的,你也可以自定义自己的插件,用来实现特定的功能。

常用的命令

# 清理
mvn clean 
# 编译
>mvn compile
# 安装
mvn install
# 先清理再部署
mvn clean deploy
# 生成站点文档
mvn site

IDEA中使用Maven

idea自带了maven,使用非常方便,都是图形界面化操作,在项目的右侧导航栏,对应的生命周期之间双击鼠标即可

10分钟快速掌握 Maven 的核心概念

具体的设置如下图:

10分钟快速掌握 Maven 的核心概念

来源:www.jianshu.com/p/2fe690ff84b7

推荐:

主流Java进阶技术(学习资料分享)

10分钟快速掌握 Maven 的核心概念
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。“在看”支持我们吧!

原文始发于微信公众号(Java笔记虾):10分钟快速掌握 Maven 的核心概念