Maven 入门实战(1)--简介及安装

Maven 是一种软件项目管理和理解工具;它基于项目对象模型(POM),从中央位置管理项目的构建、报告和文档,并帮助开发人员轻松管理依赖项并自动化构建过程。

1、简介

1.1、项目目录

Maven 使用约定优于配置的原则,提倡使用一个共同的标准目录结构。

目录说明
${basedir} 项目根目录,存放 pom.xml 和 所有的子目录
${basedir}/src/main/java java 源代码
${basedir}/src/main/resources 资源目录
${basedir}/src/test/java 测试代码
${basedir}/src/test/resources 测试用的资源
${basedir}/src/main/webapp/WEB-INF web 应用目录
${basedir}/target 打包输出目录
${basedir}/target/classes 编译输出目录
${basedir}/target/test-classes 测试编译输出目录
~/.m2/repository Maven 默认的本地仓库目录

1.2、生命周期

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

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

每个生命周期又包含多个阶段。

1.2.1、clean 生命周期

生命周期阶段 说明
pre-clean 执行一些需要在 clean 之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在 clean 之后完成的工作

1.2.2、default(build) 生命周期

生命周期阶段说明
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(部署) 将最终的项目包复制到远程仓库,与其他开发者和项目共享

1.2.3、site 生命周期

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

1.3、Maven 插件

Maven 每个生命周期中都包含着一系列的阶段(phase);这些 phase 相当于 Maven 提供的统一的接口,这些 phase的实现由 Maven 的插件来完成。我们在输入 mvn 命令的时候,比如 mvn clean,clean 对应的就是 clean 生命周期中的 clean 阶段。但是 clean 的具体操作是由 maven-clean-plugin 来实现的。所以说 Maven 生命周期的每一个阶段的具体实现都是由 Maven 插件实现的。Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。Maven 插件通常被用来:

插件通常提供了一个目标的集合,可以使用下面的语法执行:

mvn [plugin-name]:[goal-name]

例如,一个 Java 工程可以使用 maven-compiler-plugin 的 compile-goal 编译,使用以下命令:

mvn compiler:compile

常用插件:

插件说明
clean 清理目标文件,删除目标目录
compiler 编译 Java 源文件
surefile 运行 JUnit 单元测试,创建测试报告
jar 构建 JAR 文件
war 构建 WAR 文件
javadoc 为工程生成 Javadoc

1.4、仓库

Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有 JAR、WAR、ZIP、POM 文件的地方。Maven 仓库有三种类型:本地(local)、中央(central)、远程(remote)。

1.4.1、本地仓库

Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。Maven 本地仓库目录默认为:%USER_HOME%/.m2/repository;要修改默认位置,可在 Maven 的 settings.xml 文件中设置另一个路径:

<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd">
  <localRepository>d:/repo</localRepository>
/>

1.4.2、中央仓库

Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。中央仓库包含了绝大多数流行的开源 Java 构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的 Java项目依赖的构件都可以在这里下载到。中央仓库不需要配置,但需要通过网络才能访问。maven 社区提供了一个网站用来搜索浏览中央仓库的内容:https://central.sonatype.com/;通过该网站可以方便搜索查看相应的构件。

1.4.3、远程仓库

如果 Maven 在中央仓库中也找不到依赖的文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。

1.4.4、Maven 依赖搜索顺序

当我们执行 Maven 构建命令时,Maven 会按照以下顺序查找依赖的库:
步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库。
步骤 3 - 如果没有设置远程仓库,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。

2、安装

在官网(https://maven.apache.org/download.cgi)下载安装包并解压,然后配置环境变量即可;这里使用 3.8.8 版本安装部署。

2.1、Windows 安装

这里假设 Maven 的解压目录为:D:\apache\apache-maven-3.8.8,新建用户变量 MAVEN_HOME

编辑用户变量 Path,添加变量值:%MAVEN_HOME%\bin

打开 cmd,检查安装是否成功:

C:\Users\admin>mvn -version
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: D:\apache\apache-maven-3.8.8
Java version: 1.8.0_321, vendor: Oracle Corporation, runtime: D:\soft\Java\jdk1.8.0_321\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

2.2、Linux 安装

这里假设 Maven 的解压目录为:/home/mongo/soft/apache-maven-3.8.8,编辑 ~/.bash_profile 设置环境变量:

export MAVEN_HOME=/home/mongo/soft/apache-maven-3.8.8
export PATH=$PATH:$MAVEN_HOME/bin

使配置生效:source ~/.bash_profile;然后检查安装是否成功:

app4:[/home/mongo] mvn -verion
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: /home/mongo/soft/apache-maven-3.8.8
Java version: 1.8.0_321, vendor: Oracle Corporation, runtime: /home/mongo/soft/jdk1.8.0_321/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"

 

 

参考:https://www.runoob.com/maven/maven-tutorial.html。

热门相关:峡谷正能量   道君   前任无双   花月颂   道君