Useful maven commands
Posted on 03/01/2019Maven
Maven是什么
- Maven是由Apache基金会开发的一套综合性的项目管理开源软件。在项目的构建、依赖包的管理、文档生成管理以及项目的发布等方面提供支持。
- Maven将一套模式应用到项目中,规范项目开发流程、提高开发效率。
Maven的配置文件
-
全局设置:Global Settings(
$M2_HOME/conf/settings.xml
) -
用户设置:User Settings(
~/.m2/repository/settings.xml
) -
项目级设置:
pom.xml
创建一个Maven项目
- 命令行中:
mvn -B archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DgroupId=com.mycompany.app \
-DartifactId=my-app
- Eclipse中直接创建项目时选择
Maven Project
POM
-
POM是Maven项目的基本工作单元,通常是一个包含项目信息和配置细节的xml文件
pom.xml
。 -
POM有两种:Super POM和Minimal POM。
-
Super POM包含Maven项目的默认设置。
-
Minimal POM在没有明确设置的情况下,所有参数自动继承自Super POM。Minimal POM最低的最低要求:
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> </project>
-
项目继承关系:如果要在my-app项目中添加一个模块my-module,则在该模块的pom.xml中添加一个parent元素:
<project> <parent> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-module</artifactId> <version>1</version> </project>
-
通过一下命令可以看到最终的pom文件配置信息:
mvn help:effective-pom
-
maven有3个生命周期:
- default
- clean
- site
maven的生命周期由构建阶段(phase)组成,构建阶段则由目标组成(goal),3个生命周期中clean
, site
可以单独作为mvn
的命令使用,default
生命周期则不能,只能使用组成该生命周期的构建阶段作为命令,default
生命周期由多个构建阶段按一定顺序执行,当某个构建阶段作为命令执行时,该阶段之前的构建阶段则按顺序依次执行。
Profile
Parent POM Relative Path
A parent POM can be declared with packaging pom
. It is not meant to be distributed because it is only referenced from other projects.
By default, Maven looks for the parent POM first at project’s root, then the local repository, and lastly in the remote repository. If parent POM file is not located in any other place, then you can use code tag. This relative path shall be relative to project root.
有用的命令
-
将当前工程打包到本地仓库,同时包含项目源代码
$ mvn source:jar install
核心概念
maven生命周期
生命周期(life cycle)是由一系列阶段(phase)组成,每个阶段完成特定的任务。这些任务是通过绑定插件(plugin)的目标(goal)完成的。阶段可以绑定0个或多个目标。通过pom.xml文件设定工程的打包方式或build的设定,可以改变每个阶段绑定的目标。
- default
- clean
- site
插件
- maven是一个插件执行框架,所有的任务都是通过插件完成的。
- 一个maven插件中可以有一个或多个目标(goal),目标即完成实际任务。
- 目标有其绑定的阶段的信息。如果某个目标能够绑定到多个阶段,则通过phase元素设定绑定的阶段。
仓库类型
- 本地仓库(local repository)
- 远程仓库(remote)
- 中央仓库(central)
- 内部仓库(internal)
maven解析依赖过程,首先在本地仓库查找依赖,如果本地仓库没有找到,则根据项目根目录下的pom.xml文件的repositories元素下的配置(如果没有配置则默认使用中央仓库)。.m2/settings.xml文件可以配置仓库的镜像,比如,可以为中央仓库配置镜像仓库,这样,访问中央仓库的请求都会重新定向到镜像仓库。