Maven是一个跨平台的项目管理工具,主要服务于Java
平台的项目构建、依赖管理和项目信息管理。java
Maven的用途之一是项目构建,可以自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署,只须要输入简单命令便可(如mvn clean install
)。web
Maven不只是构建工具,仍是依赖管理工具和项目信息管理工具,经过提供中央仓库,自动帮咱们下载构件(artifact
)。apache
Remark:
Maven
依赖于JDK
,安装Maven以前须要先安装JDK
。Maven
能够运行在JDK1.4
及以上版本。app
Maven项目的核心是pom.xml
,POM
(Project Object Model
)项目对象模型,定义项目基本信息,描述项目如何构建,声明项目依赖等。webapp
简单的pom.xml以下:maven
<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>4.0.0</modelVersion> <groupId>com.wangdh.maven</groupId> <artifactId>maven-demo</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>jar</packaging> </project>
project
是全部pom.xml
的根目录;工具
modelVersion
指定当前POM
模型的版本,对Maven 2
及Maven 3
而言,该值只能是4.0.0。测试
groupId、artifactId、version
定义了一个项目的基本坐标。ui
packaging
能够为jar
(默认)、pom
、war
,是基于基本坐标进行区分的。插件
在Maven
中,使用了约定大于配置的原则,能够大量减小配置。默认的约定有:
1) 源码路径 src/main/java
2) 编译输出目录 target/classes
3) 打包方式jar
4) 包输出目录target
5) 在项目的根目录放置pom.xml
在Maven
中,约定的项是可以经过配置项修改的,约定的项也是配置在超级POM
中,能够在当前的POM
文件,经过修改对应配置进行覆盖。
基于约定大于配置的思想,Maven
可使用Archetype
快速的生成项目骨架,在Maven 3
中,简单运行:mvn archetype:generate
。
Archetype
能够简单理解成项目模块。Archetype
不是Maven
的核心特性,主要是经过maven-archetype-plugin
插件来实现的。
经常使用的Archetype有:
maven-archetype-quickstart
maven-archetype-webapp
groupId
定义项目的组,通常为公司的反向域名+项目的名称,如:com.xxx.myApp
。
artifactId
定义了当前项目在组中的惟一id
,通常以项目名称为前缀,如:myApp-base
。
一个公司会有不少项目,一个项目会有不少模块,因此groupId
定义到到项目层次,artifactId
定义到模块层次,当只有一个模块时,artifactId
能够是项目名称。
1) 设置MAVEN_OPTS
环境变量
mvn
命令实际是执行了Java
命令,所以Java
命令可用的参数在运行mvn
时也可用。Java
默认的最大可用内存每每不可以知足Maven
运行的需求,通常将MAVEN_OPTS
的值设置为-Xms128m –Xmx512m
,而且设置到环境变量,而不建议修改mvn.bat
或mvn
,升级的时候会被覆盖,须要从新配置,麻烦而且容易忘记。
2) 配置用户范围的settings.xml
Maven
有两个配置文件${m2_HOME}/conf/settings.xml
和${user}/.m2/settings.xml
前者是全局范围的,整台机器上全部用户都会受该配置影响,然后者是用户范围的,只会影响当前用户。
推荐配置用户范围的配置,能够避免无心识影响其余用户,也能够避免Maven
升级时,配置被覆盖。
3) 不要使用IDE
内嵌的Maven
内嵌的Maven
版本一般会比较新,但不必定稳定,并且每每与命令行使用的Maven
不是同个版本,所以因为不稳定,可能会出现一些难以理解的问题,其次版本不一致可能致使构建行为不一致。