Maven学习(一)

一、Maven是什么?

Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期。
在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行。因为大部分的工程配置操作都非常简单并且可复用,在创建报告、检查、构建和测试自动配置时,Maven 可以让开发者的工作变得更简单。
Maven 能够帮助开发者完成以下工作:

  • 构建
  • 文档生成
  • 报告
  • 依赖
  • SCMs
  • 发布
  • 分发
  • 邮件列表

总的来说,Maven 简化了工程的构建过程,并对其标准化。它无缝衔接了编译、发布、文档生成、团队合作和其他任务。Maven 提高了重用性,负责了大部分构建相关的任务。

二、Maven 的历史

Maven 最初是在 Jakarta Turbine 项目中为了简化构建过程而设计的。项目中有几个子工程,每个工程包含稍有不同的 ANT 文件。JAR 文件使用 CVS 管理。
Apache 小组随后开发了 Maven,能够同时构建多个工程、发布工程信息、部署工程、在几个工程中共享 JAR 文件,并且协助团队合作。

三、Maven 的目标

Maven 的主要目的是为开发者提供

  • 一个可复用、可维护、更易理解的工程综合模型
  • 与这个模型交互的插件或者工具
    Maven 工程结构和内容被定义在一个 xml 文件中 - pom.xml,是 Project Object Model (POM) 的简称,此文件是整个 Maven 系统的基础组件。

约定优于配置

Maven 使用约定而不是配置,意味着开发者不需要再自己创建构建过程。
开发者不需要再关心每一个配置细节。Maven 为工程提供了合理的默认行为。当创建 Maven 工程时,Maven 会创建默认的工程结构。开发者只需要合理的放置文件,而在 pom.xml 中不再需要定义任何配置。
举例说明,下面的表格展示了工程源码文件、资源文件的默认配置,和其他一些配置。假定${basedir}表示工程目录:

配置项 默认值
source code ${basedir}/src/main/java
resources ${basedir}/src/main/resources
Tests ${basedir}/src/test
Complied byte code ${basedir}/target
distributable JAR ${basedir}/target/classes

为了构建工程,Maven 为开发者提供了选项来配置生命周期目标和工程依赖(依赖于 Maven 的插件扩展功能和默认的约定)。大部分的工程管理和构建相关的任务是由 Maven 插件完成的。
开发人员不需要了解每个插件是如何工作的,就能够构建任何给定的 Maven 工程。

四、安装maven

安装Maven前请先确定你安装好了jdk,进而再安装maven。

  1. 首先,从以下网址下载 Maven 3.2.5:http://maven.apache.org/download.html)
  2. 解压后你会得到apache-maven-3.5.3-bin这个文件,放到你的c盘软件盘(我这里是放在c盘下我的软件目录下)
    3.然后跟jdk一样,设置maven的环境变量,设置如下
    添加 M2_HOME、M2、MAVEN_OPTS 到环境变量中。
操作系统 输出
Windows 使用系统属性设置环境变量。 M2_HOME=C:\Program Files\ApacheSoftware Foundation\apache-maven-3.2.5; M2=%M2_HOME%\bin;MAVEN_OPTS=-Xms256m -Xmx512m
Linux 打开命令终端设置环境变量。;export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.5;export M2=$M2_HOME/bin;export MAVEN_OPTS=-Xms256m -Xmx512m
Mac 打开命令终端设置环境变量。;export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.5;export M2=$M2_HOME/bin;export MAVEN_OPTS=-Xms256m -Xmx512m

4.添加 Maven bin 目录到系统路径中
现在添加 M2 变量到系统“Path”变量中

操作系统 输出
Windows 添加字符串 “;%M2%” 到系统“Path”变量末尾
Linux export PATH=M2:PATH
Mac export PATH=M2:PATH

5.好了,这么多步骤,最后来测试一下是否安装成功?
验证 Maven 安装
现在打开控制台,执行以下 mvn 命令。

操作系统 输出 命令
Windows 打开命令控制台 c:> mvn --version
Linux 打开命令终端 $ mvn --version
Mac 打开终端 machine:~ joseph$ mvn --version

结果应该如下,才证明安装成功:

操作系统 输出
windows Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T03:49:05+08:00);Maven home: C:\StudySoftware\apache-maven-3.5.3\bin..;Java version: 1.8.0_40, vendor: Oracle Corporation;Java home:C:\Program Files\Java\jdk1.8.0_40\jre;Default locale: zh_CN, platform encoding: GBK;OS name: "windows 8.1", version: "6.3", arch: "amd64", family: "windows"

五、POM文件

POM 代表工程对象模型。它是使用 Maven 工作时的基本组建,是一个 xml 文件。它被放在工程根目录下,文件命名为 pom.xml。
POM 包含了关于工程和各种配置细节的信息,Maven 使用这些信息构建工程。
POM 也包含了目标和插件。当执行一个任务或者目标时,Maven 会查找当前目录下的 POM,从其中读取所需要的配置信息,然后执行目标。能够在 POM 中设置的一些配置如下:

  • project dependencies
  • plugins
  • goals
  • build profiles
  • project version
  • developers
  • mailing list
    在创建 POM 之前,我们首先确定工程组(groupId),及其名称(artifactId)和版本,在仓库中这些属性是工程的唯一标识。
    POM 举例

   4.0.0

   com.companyname.project-group
   project
   1.0


需要说明的是每个工程应该只有一个 POM 文件。

  • 所有的 POM 文件需要 project 元素和三个必须的字段:groupId, artifactId,version。
  • 在仓库中的工程标识为 groupId:artifactId:version
  • POM.xml 的根元素是 project,它有三个主要的子节点:
节点 描述
groupId 这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.company.bank 拥有所有的和银行相关的项目。
artifactId 这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。
version 这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如:com.company.bank:consumer-banking:1.0;com.company.bank:consumer-banking:1.1.

Super POM

所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)。父 POM 也被称作 Super POM,它包含了一些可以被继承的默认设置。
Maven 使用 effective pom(Super pom 加上工程自己的配置)来执行相关的目标,它帮助开发者在 pom.xml 中做尽可能少的配置,当然这些配置可以被方便的重写。
查看 Super POM 默认配置的一个简单方法是执行以下命令:mvn help:effective-pom
在你的电脑上的任意目录下创建一个 pom.xml 文件,使用上面提到的示例 pom 中的内容。
在下面的例子中,我们在 d:\MVN\project 目录中创建了一个 pom.xml 文件。
现在打开命令控制台,到 pom.xml 所在的目录下执行以下 mvn 命令。

D:\MVN\project>mvn help:effective-pom

Maven 将会开始处理并显示 effective-pom。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 41.645 s
[INFO] Finished at: 2018-04-27T11:30:10+08:00
[INFO] ------------------------------------------------------------------------

很多,这里就不全部写出来了,有兴趣的可以去试试。

你可能感兴趣的:(Maven学习(一))