文章目录
1.使用
1.1.运行
语法:
mvn [options] [<goal(s)>] [<phase(s)]
1.2.令人迷惑的 mvn 命令
mvn compile
mvn compiler:compile
mvn install
mvn install:install
mvn install:install-file
上面的这些命令看起来有点像。mvn compile
和 mvn compiler:compile
的作用也相同。但是这 2 个命令有区别。
参考 mvn
命令的语法 。mvn compile
中的 compile
指的 Maven 的 default
生命周期中的 compile
阶段。对应语法中的[phase(s)]
。而 mvn compiler:comile
是 Maven maven-compiler-plugin
插件的一个 goal
,对应语法中的 [goal(s)]
。
Maven 的阶段实质上还是有插件的 goal
来构成的,使用 mvn compile
命令是如何就找到 maven-compiler-plugin
这个插件来执行,这块实现原理现在还不太清楚。
什么时候用 mvn compiler:comile
这种格式呢?
比如我们需要设置 compile 插件的一些参数的时候,可以使用 mvn compiler:comile
这种格式,后面跟 -Dencoding=UTF-8
(通过使用 -D+参数名=值)这种格式来指定具体参数。
怎么知道 compile 插件的某个 goal 有哪些参数呢?
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin -Ddetail
mvn help:describe -Dplugin=groupId:artifactId:version -Ddetail
mvn help:describe -Dplugin=插件prefix -Ddetail
help:describe
本身也是 maven-help-plugin 的一个goal
使用以上命令可以打印某个插件的具体信息。Maven 提供的插件的 groupId 一般都是 org.apache.maven.plugins,artifactId 一般是 maven-****-plugin
格式。
1.3.可能常用的命令
-
install 到本地仓库: Maven 在
maven-install-plugin
插件中提供了install-file
的目标。-
install Jar 包(非 pom 包)到本地仓库
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
-
install pom 文件到本地仓库
mvn install:install-file -Dfile=<path-to-file> -DpomFile=<path-to-pomfile>
-
maven 2.5 之后 install jar 包可以更简单。如果这个 jar 包是通过 Maven 构建的,jar 包中有
META-INF/
目录且里面有这个 jar 包的 pom 文件,那么可以使用如下命令:mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=<path-to-file>
-
-
描述某个插件的具体信息: 使用 Maven 的
maven-help-plugin
插件的help:describe
goalmvn help:describe -Dplugin=groupId:artifactId:version -Ddetail
内置的生命周期及其阶段按顺序是:
- clean: pre-clean,clean,post-clean
- default: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify,install, deploy
- site: pre-site, site, post-site, site-deploy
只需创建软件包并将其安装在本地存储库中,以便在其他项目中重用,只需要使用:
mvn install
如果不是在项目中或是其他情况,可能希望调用由 Maven 的一部分实现的特定任务——这被称为插件的目标:
mvn archetype:generate
mvn checkstyle:check
1.4.构建的生命周期
1.4.1.基础
Maven基于构建生命周期这一核心概念。这意味着,构建和分发特定 artifact (project) 的过程是明确定义的。
有3个内建的生命周期: default , clean 和 site。default
生命周期处理项目的部署,clean
生命周期处理项目的清理,site
生命周期用于将项目构建成网站。
1.4.2.构建的生命周期由阶段(Phases)组成
default 生命周期的一些阶段说明:
- validate: 验证项目是否正确以及所有必要信息是否可用
- compile: 编译项目源码
- test: 使用合适的单元测试框架测试已编译的源代码。这些测试不应要求打包或部署代码
- package: 获取编译后的代码,并将其打包为其可分发格式,如JAR。
- integration-test: 集成测试
- verify: 对集成测试结果进行检查,以确保符合质量标准。
- install: 将包放到本地仓库。
- deploy: 构建完成,将包放到远程仓库。
这些周期将按照顺序执行,以完成 default
生命周期。
1.4.3.构建的阶段由插件的目标组成
然而,即使构建阶段负责构建生命周期中的特定步骤,但执行这些职责的方式也可能有所不同。这是通过声明绑定到这些构建阶段的插件目标来实现的。
一个插件目标代表一个具体的任务(比构建阶段更精细),它有助于项目的构建和管理。一个目标可以被绑定到零个或多个构建阶段。一个没有绑定到任何构建阶段的目标可以在构建生命周期之外通过直接调用来执行。执行的顺序取决于目标和构建阶段被调用的顺序。例如下面的示例,clean
和package
参数是构建阶段,dependency:copy-dependencies
是一个插件的目标。
mvn clean dependency:copy-dependencies package
执行上面命令后,先是 clean
阶段(包括 clean
之前的阶段)会先执行,然后执行 dependency:copy-dependencies
目标,最后执行 package
阶段(