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表示仅仅参与到测试) |