Maven 核心技术基础入门篇

Posted ZSYL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven 核心技术基础入门篇相关的知识,希望对你有一定的参考价值。

1. Maven 简介

MavenApache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理。Maven 这个单词的本意是:专家,内行。读音是['meɪv(ə)n]或['mevn]。

  1. 在Javaweb开发中,需要使用大量的jar包,我们手动去导入;

  2. 如何能够让一个东西自动帮我导入和配置这个jar包。由此,Maven诞生了!

  3. Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)

  4. Maven是用Java语言编写的。他管理的东西统统以面向对象的形式进行设计,最终它把一个项目看成一个对象,而这个对象叫做POM(project object model),即项目对象模型。

我们说一个项目就是一个对象,作为对象的行为、对象的属性都有哪些呢?

  • Maven说我们需要编写一个pom.xml文件,Maven通过加载这个配置文件就可以知道我们项目的相关信息了!到这里我们知道了Maven离不开一个叫pom.xml的文件。因为这个文件代表就一个项目。

那Maven是如何帮我们进行项目资源管理的呢?这就需要用到Maven中的第二个东西:依赖管理。这也是它的第二个核心!

  • 所谓依赖管理就是maven对项目所有依赖资源的一种管理,它和项目之间是一种双向关系,即当我们做项目的时候maven的依赖管理可以帮助你去管理你所需要的其他资源,当其他的项目需要依赖我们项目的时候,maven也会把我们的项目当作一种资源去进行管理,这就是一种双向关系。
  • 那maven的依赖管理它管理的这些资源存在哪儿呢?主要有三个位置:本地仓库,私服,中央仓库
  • 本地仓库顾名思义就是存储在本地的一种资源仓库,如果本地仓库中没有相关资源,可以去私服上获取,私服也是一个资源仓库,只不过不在本地,是一种远程仓库,如果私服上也没有相关资源,可以去中央仓库去获取,中央仓库也是一种远程仓库。
  • Maven除了帮我们管理项目资源之外还能帮助我们对项目进行构建,管理项目的整个生命周期,当然它的这些功能需要使用一些相关的插件来完成,当然整个生命周期过程中插件是需要配合使用的,单独一个无法完成完整的生命周期。

2. Maven 作用

导言:生产环境下开发不再是一个项目一个工程,而是每一个模块创建一个工程,而多个模块整合在一起就需要
使用到像 Maven 这样的构建工具。

为什么要使用 Maven?它能帮助我们解决什么问题?

①添加第三方 jar 包

在今天的 JavaEE 开发领域,有大量的第三方框架和工具可以供我们使用。要使用这些 jar 包最简单的方法就是复制粘贴到 WEB-INF/lib 目录下。但是这会导致每次创建一个新的工程就需要将 jar 包重复复制到 lib 目录下,从而造成工作区中存在大量重复的文件,让我们的工程显得很臃肿。

而使用 Maven 后每个 jar 包本身只在本地仓库中保存一份,需要 jar 包的工程只需要以坐标的方式简单的引用一下就可以了。不仅极大的节约了存储空间,让项目更轻巧,更避免了重复文件太多而造成的混乱。

②jar 包之间的依赖关系

jar 包往往不是孤立存在的,很多 jar 包都需要在其他 jar 包的支持下才能够正常工作,我们称之为jar 包之间的依赖关系。最典型的例子是:commons-fileupload-1.3.jar 依赖于 commons-io-2.0.1.jar,如果没有 IO 包,FileUpload 包就不能正常工作。

那么问题来了,你知道你所使用的所有 jar 包的依赖关系吗?

而引入 Maven 后,Maven 就可以替我们自动的将当前 jar 包所依赖的其他所有 jar 包全部导入进来,无需人工参与,节约了我们大量的时间和精力。用实际例子来说明就是:通过 Maven 导入commons-fileupload-1.3.jar 后,commons-io-2.0.1.jar 会被自动导入,程序员不必了解这个依赖关系。

③获取第三方 jar 包

JavaEE 开发中需要使用到的 jar 包种类繁多,几乎每个 jar 包在其本身的官网上的获取方式都不尽相同。

使用 Maven 我们可以享受到一个完全统一规范的 jar 包管理体系。你只需要在你的项目中以坐标的方式依赖一个 jar 包,Maven 就会自动从中央仓库进行下载,并同时下载这个 jar 包所依赖的其他 jar 包——规范、完整、准确!一次性解决所有问题!

Tips:在这里我们顺便说一下,统一的规范几乎可以说成是程序员的最高信仰。如果没有统一的规范,就意味着每个具体的技术都各自为政,需要以诸多不同的特殊的方式加入到项目中;好不容易加入进来还会和其他技术格格不入,最终受苦的是我们。而任何一个领域的统一规范都能够极大的降低程序员的工作难度,减少工作量。例如:USB 接口可以外接各种设备,如果每个设备都有自己独特的接口,那么不仅制造商需要维护各个接口的设计方案,使用者也需要详细了解每个设备对应的接口,无疑是非常繁琐的。

④将项目拆分成多个工程模块

随着 JavaEE 项目的规模越来越庞大,开发团队的规模也与日俱增。一个项目上千人的团队持续开发很多年对于 JavaEE 项目来说再正常不过。那么我们想象一下:几百上千的人开发的项目是同一个 Web工程。那么架构师、项目经理该如何划分项目的模块、如何分工呢?这么大的项目已经不可能通过package 结构来划分模块,必须将项目拆分成多个工程协同开发。多个模块工程中有的是 Java 工程,有的是 Web 工程。

那么工程拆分后又如何进行互相调用和访问呢?这就需要用到 Maven 的依赖管理机制。

总之:

  1. 项目构建:提供标准的、跨平台的自动化项目构建方式
  2. 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
  3. 统一开发结构:提供标准的、统一的项目结构


各目录存放资源类型说明:

  • src/main/java:项目java源码
  • src/main/resources:项目的相关配置文件(比如mybatis配置,xml映射配置,自定义配置文件等)
  • src/main/webapp:web资源(比如html,css,js等)
  • src/test/java:测试代码
  • src/test/resources:测试相关配置文件
  • src/pom.xml:项目pom文件

3. 下载安装Maven

3.1 新版下载

官网:Maven官网

3.2 旧版下载

旧版本下载步骤:我们以3.6.1版本为例


点击 sources

3.3 安装

maven是一个绿色软件,解压即安装,非常容易,

我们将下载好的apache-maven-3.6.1-bin.zip直接解压到D盘根目录下即可

解压完成后我们可以查看一下maven自己的一个目录结构如下:


各目录结构说明:

  • bin:可执行程序目录,

  • boot:maven自身的启动加载器

  • conf:maven配置文件的存放目录

  • lib:maven运行所需库的存放目录

3.4 配置环境变量

我的电脑-------->属性--------->高级系统设置---------->新建系统变量MAVEN_HOME

在我们的系统环境变量中

配置如下配置:

  • M2_HOME maven目录下的bin目录(可以忽略)
  • MAVEN_HOME maven的目录
  • 在系统的path中配置 %MAVEN_HOME%\\bin
  • 之后在命令行窗口中输入mvn -version
  • 测试Maven是否安装成功,保证必须配置完毕!


环境变量配置好之后需要测试环境配置结果,我们需要在DOS命令窗口下输入以下命令查看输出

mvn -v


如果能够看到输出的maven的版本信息代表配置成功

3.5 配置阿里云镜像

国内建议使用阿里云的镜像(百度搜 maven 阿里云镜像)

settings.xml里面的mirrors标签里面导入:

<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>

3.6 配置本地仓库

Maven -bin 的同级目录下建立一个文件夹 maven-repo


建立一个本地仓库:localRepository

  • settings.xml里面的localRepository下导入
<localRepository>D:\\Develop\\apache-maven-3.6.1\\maven-repo</localRepository>

4. Maveb基础概念

4.1 仓库

仓库:用于存储资源,主要是各种jar包


关于仓库:本地仓库,私服,中央仓库,其中私服和中央仓库都属于远程仓库

  • 中央仓库:maven团队自身维护的仓库,属于开源的
  • 私服:各公司/部门等小范围内存储资源的仓库,私服也可以从中央仓库获取资源
  • 本地仓库:开发者自己电脑上存储资源的仓库,也可从远程仓库获取资源

私服的作用:

(1)保存具有版权的资源,包含购买或自主研发的jar

(2)一定范围内共享资源,能做到仅对内不对外开放

4.2 坐标

我们说maven的仓库里存储了各种各样的资源(jar包),那这些资源我们如何找到它们呢?我们需要知道它们具体的一个位置才能知道如何找到它们,这个就叫坐标。

坐标:maven中的坐标用于描述仓库中资源的位置

maven坐标的主要组成如下:

  • groupId:定义当前资源隶属组织名称(通常是域名反写,如:org.mybatis;com.itheima)

  • artifactId:定义当前资源的名称(通常是项目或模块名称,如:crm,sms)

  • version:定义当前资源的版本号

  • packaging:定义资源的打包方式,取值一般有如下三种

    • jar:该资源打成jar包,默认是jar java工程打包为jar
    • war:该资源打成war包 web工程打包为war
    • pom:该资源是一个父资源(表明使用maven分模块管理),打包时只生成一个pom.xml不生成jar或其他包结构
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!--指定pom的模型版本-->
    <modelVersion>4.0.0</modelVersion>
    <!--打包方式 web工程打包为war java工程打包为jar-->
    <packaging>war</packaging>
    
    <!--组织id-->
    <groupId>com.itheima</groupId>
    <!--项目id-->
    <artifactId>web01</artifactId>
    <!--组织id  release代表完成版,SNAPSHOT代表开发版-->
    <version>1.0-SNAPSHOT</version>
    
    <!--设置当前工程的所有依赖-->
    <dependencies>
        <!--具体的依赖-->
        <dependency>
        </dependency>
    </dependencies>
</project>

5. 创建一个MavenWeb项目

  1. 启动IDEA

  2. 创建一个MavenWeb项目



3. 创建完成等待项目初始化完成



4. 观察maven仓库中多了什么东西?
5. 注意:IDEA项目创建成功后,看一眼Maven的配置


到这里,Maven在IDEA中的配置和使用就OK了!

5.1 标记文件夹功能

  1. 我们在创建的MavenWeb 项目的 main 目录下创建 java,resources

  1. 鼠标悬停在java文件夹,右键


3. resources 也同样标记


创建MavenWeb 项目我们需要手动去补全目录,并且要对补全的目录进行标记,切记

5.2 Maven项目构建命令

Maven构建命令使用mvn开头,后面加功能参数,可以一次执行多个命令,使用空格分隔:

mvn compile #编译
mvn clean #清理
mvn test #测试
mvn package	#打包
mvn install #安装到本地仓库

参考Link

以上是关于Maven 核心技术基础入门篇的主要内容,如果未能解决你的问题,请参考以下文章

Java安全-入门篇开发基础(MavenJavaMVC反射类加载代码远程调试)

Maven 入门篇 ( 上 )

Apache Maven 入门篇(下)

Apache Maven 入门篇 ( 上 )

Apache Maven 入门篇 ( 上 )

maven入门(上)