学习Maven,我们将按照什么为什么怎么用三步骤来学习,步步惊心,发发入魂!!!

Maven,就是那么简单_java

1、为什么需要Maven?

Simon是个划水的程序猿,技术不咋的,废话挺多!!!写个代码絮絮叨叨

  • 哎,又得下载jar包引入到工程,不知道会不会遇到jar包冲突,

  • 写好的java文件到工程部署,烦死了,步骤好多

  • 代码写的好乱啊,哎,编写个单元测试吧

  • 老王写的什么代码,完全不符合我的飘逸的风格,工程目录都看不懂,这让我开发个捶捶

Maven,就是那么简单_jar包_02

细细数来,问题还真不少,不要担心,Maven来了,它可以帮我们解决以上所有的问题,

  • Maven的官方定义

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

Maven,就是那么简单_maven_03

好吧,其实Maven的功能主要是有两个

  • 统一了开发规范

  • 统一管理jar包(依赖管理)

这样说还是很空洞,来,让我们深入学习下!!!

2、Maven的深入学习

2.1、Maven的仓库分类及关系

maven的最强大的一点莫过于根据jar包坐标找jar包,我们只需要在工程中引入相关jar包坐标,Maven就可以帮我们找到所需的jar包下载到工程,哪么maven从哪里下载的呢?

maven主要从这三个仓库下载。

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

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

    • 中央仓库:maven中内置了一个远程仓库,这个网址就是中央仓库,服务于整个互联网,里面保存了几乎所有的jar包

来,看一下仓库间的关系及优先顺序。

Maven,就是那么简单_jar包_04

Note:maven项目所需要的jar包会优先从本地仓库中取,若在本地仓库(本地仓库需要自己在配置文件中指定,会面的内容会讲到如何配置)中没有找到,①若是个人项目,并且电脑联网,则会从中央仓库中下载所需的jar包放入到本地仓库中。②若是公司项目,公司可能会有自己的仓库(私服),当在本地方库找不到,会转向远程仓库,若远程仓库也找不到,则会转向中央仓库Maven,就是那么简单_jar包_05

别着急,Maven还定义了一套开发规范,继续往下品!

2.2、Maven的工程目录

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

Maven,就是那么简单_jar包_06

每个目录都有自己的功能,我们只需要按照它的规定开发就好了,只有这样,才是你好,我好,大家好!!!

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

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

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

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

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

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

使用maven创建Web工程,与java工程不太一样,它会在原有的目录结构中多出webapp目录

Maven,就是那么简单_生命周期_07

仅仅上上面的学习是不够的,我们还需了解Maven的一些常用指令,提高开发效率,来,学一波。

2.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包发布到本地仓库

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

Maven,就是那么简单_jar包_08

你看上面的图,是不是发现指令下面有个插件包,它们是不是在上下呼应,实际上,每条指令都绑定了插件内的goal,仔细看下面的图品一品。

Maven,就是那么简单_java_09

作为一个控制欲很强的男生,我要探究生命的真谛,来,生命周期走一波!

2.4、maven的生命周期

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

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

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

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

       

    • Maven,就是那么简单_jar包_10

说了那么多,什么是坐标啊,对象模型又是啥,来,继续往下看

2.5、项目对象模型

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

2.6、依赖管理系统

  • 使用maven可以对所依赖的jar包进行统一管理。如项目依赖servlet,就需要在pom.xml文件中引入相关的依赖,它就会找指定的仓库下载Jar包。

<dependencies>
    <dependency>
    <!--项目的名称-->
  <groupId>javax.servlet</groupId>
    <!--模块名称-->
  <artifactId>servlet-api</artifactId>
    <!--版本号-->
  <version>2.5</version>
    <!--依赖作用的范围-->
  <scope>provided</scope>
</dependency>
</dependencies>
  • 同样的,插件也在POM文件中,以mvn-clean为例

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

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

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

artifactId:当前在组中的唯一Id

version:版本号

scope:表示依赖范围

2.7、一组标准的集合

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

好了,Maven的基础知识就搞得差不多了,让我们使用Maven建个工程感受一波。

3、Maven的安装与使用

3.1、Maven的安装

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

  • maven在本地的配置

Maven,就是那么简单_远程仓库_11

同样的,也需要在Path中进行配置

 

来,验证一下是否安装成功

在命令提示行中输入mvn -v,显示如下,即证明安装成功

Maven,就是那么简单_jar包_12

  • 在IDEA中配置maven插件

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

配置maven目录及maven仓库

Maven,就是那么简单_生命周期_13

Note :maven home directory是maven的安装目录,选择即可,当我们选择好之后,会自动添加好用户的设置文件和本地仓库路径。

  • 本地仓库的配置

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

其中,本地仓库的路径是可以修改的,只需要在config/settings.xml中添加本地仓库路径即可,即localRepository

打开maven中的E:\maven\apache-maven-3.5.2\conf\settings.xml文件,修改即可

Maven,就是那么简单_生命周期_14

3.2、Maven在IDEA中的使用

3.2.1、使用maven构建java工程

  • 采用maven骨架(maven-archetype-quickstart),也可不采用直接构建

Maven,就是那么简单_jar包_15

  • 填写唯一识别的坐标,GroupId、ArtifactId、Version

     

  • Maven,就是那么简单_jar包_16

  • 配置目录和本地仓库

     

  • Maven,就是那么简单_java_17

  • 确定项目名称

     

  • Maven,就是那么简单_java_17

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

    建新目录-->右击--->Mark Directory as--->想要的目录类型

     

  • Maven,就是那么简单_jar包_06

3.2.2、使用maven创建web工程

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

     

  • Maven,就是那么简单_远程仓库_20

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

Maven的学习就到此结束了。

Maven,就是那么简单_生命周期_21

   -END-扫码,关注,持续更新更多优质内容

Maven,就是那么简单_远程仓库_22