Maven 命令

1. mvn clean package

使用 mvn package 进行编译、打包时,会执行 src/test/java 中的 JUnit 测试用例,可以跳过测试

1
2
3
4
5
# 不执行测试用例,但编译测试用例类生成相应的 class 文件至 target/test-classes 下
$ mvn clean package -DskipTests

# 不执行测试用例,也不编译测试用例类
$ mvn clean package -Dmaven.test.skip=true

2. package 与 install 区别

package 是把 jar 打到本项目的 target 下,而 install 时把 target 下的 jar 安装到本地仓库,供其他项目使用.

  • mvn clean package 依次执行了clean、resources、compile、testResources、testCompile、test、war(jar)(打包)7个阶段;
  • mvn clean install 依次执行了clean、resources、compile、testResources、testCompile、test、war(jar)(打包)、install 8个阶段;

3. version

1
2
3
4
# pom文件中 <version> 中的 ${my.version} 取值,是在本或者父 <properties> 中定义
<properties>
<my.version>1.1.1</my.version>
</properties>

4. 内置属性

Maven 预定义,用户可以直接使用,共 6 种

1
2
3
4
5
6
7
${basedir} 表示项目根目录,即包含pom.xml文件的目录;
${version} 表示项目版本;
${project.basedir} 同${basedir};
${project.baseUri} 表示项目文件地址;
${project.build.directory} 指向 target 目录
${maven.build.timestamp} 表示项目构件开始时间;
${maven.build.timestamp.format} 表示属性 ${maven.build.timestamp} 的展示格式,默认值为 yyyyMMdd-HHmm ,可自定义其格式,其类型可参考 java.text.SimpleDateFormat。

5. 默认(default)生命周期

  • 验证(validate) :验证项目是正确的,所有必要的信息可用。
  • 初始化(initialize) :初始化构建状态,例如设置属性或创建目录。
  • 产生来源(generate-sources) :生成包含在编译中的任何源代码。
  • 流程源(process-sources) :处理源代码,例如过滤任何值。
  • 生成资源(generate-resources) :生成包含在包中的资源。
  • 流程资源(process-resources) :将资源复制并处理到目标目录中,准备打包。
  • 编译(compile) :编译项目的源代码。
  • 工艺类(process-classes) :从编译后处理生成的文件,例如对Java类进行字节码增强。
  • 生成测试来源(generate-test-sources) :生成包含在编译中的任何测试源代码。
  • 流程测试来源(process-test-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) :在集成或发布环境中完成,将最终软件包复制到远程存储库,以与其他开发人员和项目共享。

6. 常用常量

  • ${basedir}:项目根目录
  • ${project.groupId}:项目的 groupId
  • ${project.artifactId}:项目的 artifactId
  • ${project.version}${version}:项目的 version
  • ${project.build.directory}:构建目录,缺省为 target
  • ${project.build.outputDirectory}:构建过程输出目录,缺省为 target/classes
  • ${project.build.sourceDirectory}:项目的主源码目录,默认为 src/main/java
  • ${project.build.testSourceDirectory}:项目的测试源码目录,默认为 src/test/java
  • ${project.testOutputDirectory}:项目测试代码编译输出目录,默认为 target/test-classes/
  • ${project.build.fianlName}:项目打包输出文件的名称。默认为{project.artifactId}-${project.version}
  • ${project.packaging}:打包类型,缺省为jar
  • ${project.xxx}:当前pom文件的任意节点的内容

7. mvn dependency:tree -X

检查模块依赖正确性