Apache Maven是一个软件项目管理和理解工具。基于项目对象模型(POM)的概念,Maven可以从中央信息管理项目的构建,报告和文档。官方网站
在 Maven 中,有三套相互独立的生命周期,分别是 clean、default 和 site。每个生命周期都包括多个阶段,后一个阶段依赖前一个阶段,执行一个阶段会执行它之前的所有阶段。
更详细的可以参见官网对生命周期的描述。官网生命周期描述
阶段 | 描述 |
---|---|
pre-clean | 在实际项目清理之前执行所需的过程 |
clean | 删除上一版本生成的所有文件 |
post-clean | 执行完成项目清理所需的过程 |
阶段 | 描述 |
---|---|
validate | 验证项目正确无误,并提供所有必要的信息 |
initialize | 初始化构建状态,例如设置属性或创建目录 |
generate-sources | 生成任何要包含在编译中的源代码 |
process-sources | 处理源代码,例如过滤任何值 |
generate-resources | 生成资源以包含在包中 |
process-resources | 将资源复制并处理到目标目录中,以备打包 |
compile | 编译项目的源代码 |
process-classes | 对编译后生成的文件进行后处理,例如对Java类进行字节码增强 |
generate-test-sources | 生成任何测试源代码以包含在编译中 |
process-test-sources | 处理测试源代码,例如过滤所有值 |
generate-sources | 生成任何要包含在编译中的源代码 |
generate-test-resources | 创建测试资源 |
process-test-resources | 将资源复制并处理到测试目标目录中 |
test-compile | 将测试源代码编译到测试目标目录中 |
process-test-classes | 从测试编译中对生成的文件进行后处理,例如对Java类进行字节码增强。对于Maven 2.0.5及更高版本 |
test | 使用合适的单元测试框架运行测试。这些测试不应要求打包或部署代码 |
prepare-package | 在实际包装之前执行准备包装所需的任何操作。这通常会导致包装的未包装,已处理版本。(Maven 2.1及更高版本) |
package | 获取编译后的代码,并将其打包为可分发格式,例如JAR |
pre-integration-test | 在执行集成测试之前执行所需的操作。这可能涉及诸如设置所需环境的事情 |
integration-test | 处理该程序包,并在必要时将其部署到可以运行集成测试的环境中 |
post-integration-test | 在执行集成测试后执行所需的操作。这可能包括清理环境 |
verify | 运行任何检查以确认包装有效并符合质量标准 |
install | 将软件包安装到本地存储库中,以作为本地其他项目中的依赖项 |
deploy | 在集成或发行环境中完成后,将最终程序包复制到远程存储库,以便与其他开发人员和项目共享 |
阶段 | 描述 |
---|---|
pre-site | 在实际项目站点生成之前执行所需的过程 |
site | 生成项目的站点文档 |
post-site | 执行完成站点生成并为站点部署做准备所需的过程 |
site-deploy | 将生成的站点文档部署到指定的Web服务器 |
更详细的请参考官方描述
命令 | 描述 |
---|---|
mvn clean | 清理临时文件(例如target) |
mvn compile | 编译(例如src/main/java) |
mvn test | 测试(例如src/test/java/下junit的测试用例) |
mvn package | 打包(target目录生成jar或war等文件) |
mvn install | 将打包的jar/war文件复制到你的本地仓库中,供其他模块使用 |
mvn deploy | 将打包的文件发布到远程参考,提供其他人员进行下载依赖 |
mvn site | 生成项目相关信息的网站 |
mvn eclipse:eclipse | 将项目转化为Eclipse项目 |
mvn dependency:tree | 打印出项目的整个依赖树 |
mvn archetype:generate | 创建Maven的普通java项目 |
mvn tomcat:run | 在tomcat容器中运行web应用 |
mvn jetty:run | 调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用 |
mvn package -Dmaven.test.skip=true | 打包但是不测试 |
配置动态打包
<profiles> <profile> <!-- 开发环境 --> <id>dev</id> <properties> <profiles.active>dev</profiles.active> </properties> <activation> <!-- 默认激活 --> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <!-- 测试环境 --> <id>beta</id> <properties> <profiles.active>beta</profiles.active> </properties> </profile> <profile> <!-- 发布环境 --> <id>prod</id> <properties> <profiles.active>release</profiles.active> </properties> </profile> </profiles> <resources> <resource> <directory>src/main/resources</directory> <!--先全部排除--> <excludes> <exclude>application*.properties</exclude> </excludes> </resource> <resource> <directory>src/main/resources</directory> <!--打包相应的配置文件--> <filtering>true</filtering> <includes> <include>application.properties</include> <include>application-${profile.active}.properties</include> </includes> </resource> </resources> 复制代码
mvn clean package -P<profile_name> 复制代码
标签 | 描述 |
---|---|
project | 所有Maven pom.xml文件中的顶级元素 |
modelVersion | 对象模型的版本 |
groupId | 项目的组织或组的唯一标识符(通常域名倒置) |
artifactId | 项目名称 |
packaging | 打包类型(例如JAR,WAR,EAR等) |
version | 项目版本 |
name | 指示用于项目的显示名称。这通常在Maven的生成文档中使用 |
url | 指示可以在哪里找到项目的站点。这通常在Maven的生成文档中使用 |
description | 项目的基本描述 |
type | 项目类型 |
scope | 参与到哪个阶段(例如test表示仅仅参与到测试) |