Maven简介

 

 

一. 何为Maven

项目构建工具,抽象了构建生命周期,不必再去定义构建过程,像一个简单的maven install命令后对应着编译、测试、打包等动作

依赖管理工具,通过一个坐标系统(groupId, artifactId, version)准确定位到每一个构件(artifact),即可以根据一个坐标定位到任何一个jar文件

maven为全世界提供了免费的中央库,可以在这这个中央库找到绝大部分流行的开源类库。

 

对比:Ant

Ant(Another Neat Tool),含义是“另一个整洁的工具”

Ant使用XML定义构建脚本,有一个build.xml文件,在build.xml里定义构建过程(指定编译、打包等)

Ant需要开发者显式地指定每一个目标,以及完成该目标所需要执行的任务,针对每个项目都要写一遍

Ant没有依赖管理, 需要手工管理依赖,这点非常致命,特别是在多人参与的项目里很艰难

 

二. maven安装(Windows环境)

1. 下载地址:http://maven.apache.org/download.cgi

可以下载apache-maven-3.5.3-bin.zip,然后解压,我解压后的位置是:G:\study\tools\apache-maven-3.5.3

2. 环境变量配置

新建个变量名为M2_HOME,值为G:\study\tools\apache-maven-3.5.3

 

再在path里添加:%M2_HOME%\bin;

确定后,到命令窗口确认是否安装成功:mvn -v

 

 三. maven安装目录解析

 

1. bin

包含了mvn运行的脚本

 

2. conf

包含一个非常重要的文件:settings.xml

settings.xml是当前maven环境的全局配置文件

一般情况下,我们会把settings.xml复制到~/m2/目录下(~/表示用户目录),然后修改这个目录下的settings.xml,在用户范围控制maven配置

 如我的目录就是:C:\Users\conglin\.m2

3. ~/.m2/目录,这个目录不是安装目录,在我们安装maven后,任何一个涉及到下载jar(或其他依赖构件)的mvn命令都会默认在用户目录下生成/.m2

其中/.m2\repository/就是存放着我们构件项目时从远程库下载到本地的依赖构件

 

 四. maven项目核心文件——pom.xml

 pom(Project Object Model,项目对象模型),定义了项目的基础信息,用于描述项目如何构建以及声明项目依赖等。

如下是我在创建一个Spring boot项目demo时的pom.xml,其中<!-- -->是我添加用于描述标签含义的备注

<?xml version="1.0" encoding="UTF-8"?>
<!-- xml标签指定xml文档版本和编码 -->
<!-- project是pom.xml的根元素 -->
<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">
    <!-- modelVersion指定了当前POM模型的版本,对于maven2和maven3来说,值只能是4.0.0 -->
    <modelVersion>4.0.0</modelVersion>

    <!-- groupId,artifactId,version这三个元素定义了当前项目的基本坐标 
        其中,
        groupId定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联
        artifactId定义了当前项目组在组中唯一的id
        version表示当前项目的版本,SNAPSHOT表明当前项目还在开发过程中,是不稳定的快照版本
    
    -->
    <groupId>com.example</groupId>
    <artifactId>fuck</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!-- packaging指定打包类型,没指定时默认是jar -->
    <packaging>jar</packaging>

    <!-- 是项目更具可读性的名称,非必须 -->
    <name>fuck</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

其实在我们想通了maven的存在的意义后,对于pom.xml中陌生的标签,完全通过实时上网查询资料来了解,

只要清楚各种标签最终都体现在几种用途:打包说明、依赖说明、项目说明等

 

五. 仓库——repository

Maven可以在某个位置统一存储所有maven项目共享的构件,而这个统一的位置就是仓库。

对于maven来说,仓库只分为两类:本地仓库和远程仓库。当maven根据坐标寻找构件时,首先查询本地仓库,本地仓库没有时再查询远程仓库,当两者都没有时就会报错。

1. 本地仓库

在Windows环境下,本地仓库通常默认为~\.m\repository\

而当前用户的目录往往在C盘中,在C盘硬盘容量不够时,我们可以在setting.xml的localRepository标签里设置

<localRepository>D:\maven\repo\</localRepository>

 

2. 远程仓库

远程仓库往往被细分为三大类:中央仓库、私服、其他公开的远程仓库

其中,私服几乎是所有公司都会有!

私服详情可见稍后出的【Nexus maven私服记】

 

六. mvn clean install

我们在打包项目时,最常用的命令就是

mvn clean install

然而mvn clean install的背后还经历了啥?

执行mvn clean install命令时,相当于后台还依次执行了如下命令的动作:

mvn clean compile
mvn clean test
mvn clean package
mvn clean install
//注:以上命令依次从上往下,当执行下边的命令时,自动调用执行上边的命令动作;clean指定了清除项目的/target目录,clean并非必要的参数

即执行mvn clean install命令时,先后进行了编译、测试、打包,最后还将打包出来的该项目安装到本地仓库,以供其他maven项目使用

所以当我们被问maven的打包命令时,可以说是mvn install,但严格来说应该是mvn package

 

说明:本博客内容绝大部分摘抄于【Maven实战 第一版 许晓斌 机械工业出版社】,本文仅供个人学习,禁止任何形式的转载!

 

posted @ 2018-05-05 03:30  LinBug  阅读(680)  评论(0编辑  收藏  举报