1、简介
Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。
下载地址:http://maven.apache.org/download.cgi
POM 代表工程对象模型。它是使用 Maven 工作时的基本组建,是一个 xml 文件。它被放在工程根目录下,文件命名为 pom.xml。
2、POM创建
创建一个POM之前,应该要先决定项目组(groupId),它的名字(artifactId)和版本,因为这些属性在项目仓库是唯一标识的。
pom.xml 的根元素是 project,它有三个主要的子节点(且是所有pom必须包含的):
groupId: 项目组的编号,这在组织或项目中通常是独一无二的。
artifactId: 这是项目的ID;
version: 版本号
例(超级pom):
<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.0modelVersion> <parent> <groupId>ai.bell.aspcgroupId> <artifactId>aspc-parentartifactId> <version>1.0.0-SNAPSHOTversion> parent> <groupId>com.rtmgroupId> <artifactId>rtmartifactId> <version>0.0.1-SNAPSHOTversion> <packaging>pompackaging> <name>rtmname> <description>运营支撑系统description> <modules> <module>rtm-bizmodule> <module>rtm-spimodule> <module>rtm-webmodule> <module>rtm-web-srvmodule> modules> project>
普通pom:
<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.0modelVersion> <groupId>com.yiibai.project-groupgroupId> <artifactId>projectartifactId> <version>1.0version> <project>
3、生命周期
一个典型的 Maven 构建生命周期是由下列顺序的阶段:
阶段 处理 描述
准备 资源 资源复制 资源复制可以进行定制
编译 执行 编译 源代码编译在此阶段完成
包装 打包 创建JAR/WAR包如在 pom.xml 中定义提及的包
安装 安装 这一阶段在本地/远程Maven仓库安装程序包
构建生命周期阶段的目标是执行顺序是一个良好定义的序列。
Maven 主要的生命周期:
1 validate 验证项目是否正确,并且所有必要的信息可用于完成构建过程 2 initialize 建立初始化状态,例如设置属性 3 generate-sources 产生任何的源代码包含在编译阶段 4 process-sources 处理源代码,例如,过滤器值 5 generate-resources 包含在包中产生的资源 6 process-resources 复制和处理资源到目标目录,准备打包阶段 7 compile 编译该项目的源代码 8 process-classes 从编译生成的文件提交处理,例如:Java类的字节码增强/优化 9 generate-test-sources 生成任何测试的源代码包含在编译阶段 10 process-test-sources 处理测试源代码,例如,过滤器任何值 11 test-compile 编译测试源代码到测试目标目录 12 process-test-classes 处理测试代码文件编译生成的文件 13 test 运行测试使用合适的单元测试框架(JUnit) 14 prepare-package 执行必要的任何操作的实际打包之前准备一个包 15 package 提取编译后的代码,并在其分发格式打包,如JAR,WAR或EAR文件 16 pre-integration-test 完成执行集成测试之前所需操作。例如,设置所需的环境 17 integration-test 处理并在必要时部署软件包到集成测试可以运行的环境 18 pre-integration-test 完成集成测试已全部执行后所需操作。例如,清理环境 19 verify 运行任何检查,验证包是有效的,符合质量审核规定 20 install 将包安装到本地存储库,它可以用作当地其他项目的依赖 21 deploy 复制最终的包到远程仓库与其他开发者和项目共享
当一个阶段是通过 Maven命令调用,例如:mvn compile,只有阶段到达并包括这个阶段才会被执行。
4、配置文件
生成配置文件是一组可以用来设置或覆盖 Maven 构建配置值的默认值。
创建配置文件的文件主要有三种类型:
Per Project 在项目中定义的POM文件, pom.xml
Per User 定义在 Maven 中的设置 XML 文件(%USER_HOME%/.m2/settings.xml)
Global 定义在 Maven 中的全局设置 xml 文件 (%M2_HOME%/conf/settings.xml)
Maven 构建配置文件的文件,可以使用以下几种方式来激活:
明确使用命令从控制台输入;
通过 Maven 设置;
基于环境变量(用户/系统变量);
OS设置(例如,Windows系列);
呈现/丢失的文件;
例(系统设置):
<profile> <id>testid> <activation> <os> <name>Windows XPname> <family>Windowsfamily> <arch>x86arch> <version>5.1.2600version> os> activation> profile>
5、Maven资源库
是一个目录,即目录中保存所有项目的 jar 库,插件或任何其他项目特定文件,并可以容易由 Maven 使用;
Maven库中有三种类型:
local - 本地库
central - 中央库
remote - 远程库
1)、 本地存储库是一个在本地计算机上的一个文件夹位置。当你第一次运行 maven 命令的时候它就被创建了(默认是在%USER_HOME%/.m2)。当运行 Maven 构建,那么 Maven 会自动下载所有依赖的jar到本地存储库中。它有助于避免依赖存储在远程机器上的项目建立参考
2)、Maven中央存储库是由Maven社区提供的资源库。它包含了大量的常用程序库。当Maven没有在本地存储库找到任何依赖,就会开始搜索在中央存储库,它会使用下列网址: http://repo1.maven.org/maven2/
中央仓库网页浏览地址:http://search.maven.org/#browse
3)、远程仓库即用户自定义服务器仓库
例:
<repositories> <repository> <id>companyname.lib1id> <url>http://download.companyname.org/maven2/lib1url> repository> <repository> <id>companyname.lib2id> <url>http://download.companyname.org/maven2/lib2url> repository> repositories>
当我们执行 Maven 构建命令,Maven 依赖库会依次搜索本地仓库、中央仓库、远程仓库;
其他,外部依赖(即本地jar,但不在本地仓库的)
添加方式示例:
<dependency> <groupId>ldapjdkgroupId> <artifactId>ldapjdkartifactId> <scope>systemscope> <version>1.0version> <systemPath>${basedir}\src\lib\ldapjdk.jarsystemPath> dependency>
6、Maven 的插件
Maven 是一个执行插件的框架,每一个任务实际上是由插件完成的,包括创建jar、编译、单元测试等;
一个插件通常提供了一组目标,可使用以下语法来执行:mvn [plugin-name]:[goal-name] 如 mvn mvn compiler:compile
插件可在 pom.xml 使用的 plugin 元素来指定;
每个插件可以有多个目标;
常见插件:
clean 编译后的清理目标,删除目标目录
compiler 编译 Java 源文件
surefile 运行JUnit单元测试,创建测试报告
jar 从当前项目构建 JAR 文件
war 从当前项目构建 WAR 文件
javadoc 产生用于该项目的 Javadoc
antrun 从构建所述的任何阶段运行一组 Ant 任务
7、快照
快照(SNAPSHOT )是一个特殊版本,指出目前开发拷贝。不同于常规版本,Maven 每生成一个远程存储库都会检查新的快照版本。
8、maven常用命令
mvn clean dependency:copy-dependencies package 清理和打包,dependency:copy-dependencies package是一个目标
mvn clean deploy 在构建环境中,使用下面的调用来纯净地构建和部署项目到共享仓库中
mvn archetype:generate 使用互动模式创建项目;
mvn idea:idea 将项目转化为idea项目;
mvn eclipse:eclipse 将项目转化为eclipse项目;
mvn compile 编译;
mvn test 测试;
mvn clean 将以前编译得到的旧的 class 字节码文件删除;
mvn pakage 打包,动态 web工程打 war包,Java工程打 jar 包;
mvn site 生成项目相关信息的网站;
mvn -e 显示详细错误信息.
mvn dependency:resolve 打印出已解决依赖的列表
mvn dependency:tree 打印整个依赖树;
mvn verify 执行所有检查,验证包是有效的,符合质量规范;
mvn install 安装包至本地仓库,以备本地的其它项目作为依赖使用
mvn deploy 复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)
快速创建项目 mvn archetype:generate -DgroupId=com.companyname.bank -DartifactId=consumerBanking -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
创建web项目 mvn archetype:generate -DgroupId=com.yiibai -DartifactId=CounterWebApp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
打包时跳过测试代码 mvn package -Dmaven.test.skip=true