mvn -h顯示mvn命令幫助:

usage: mvn [options] [<goal(s)>] [<phase(s)>]
Options:
-am,--also-make If project list is specified, also
build projects required by the
list
-amd,--also-make-dependents If project list is specified, also
build projects that depend on
projects on the list
-B,--batch-mode Run in non-interactive (batch)
mode
-b,--builder <arg> The id of the build strategy to
use.
-C,--strict-checksums Fail the build if checksums don't
match
-c,--lax-checksums Warn if checksums don't match
-cpu,--check-plugin-updates Ineffective, only kept for
backward compatibility
-D,--define <arg> Define a system property
-e,--errors Produce execution error messages
-emp,--encrypt-master-password <arg> Encrypt master security password
-ep,--encrypt-password <arg> Encrypt server password
-f,--file <arg> Force the use of an alternate POM
file (or directory with pom.xml).
-fae,--fail-at-end Only fail the build afterwards;
allow all non-impacted builds to
continue
-ff,--fail-fast Stop at first failure in
reactorized builds
-fn,--fail-never NEVER fail the build, regardless
of project result
-gs,--global-settings <arg> Alternate path for the global
settings file
-h,--help Display help information
-l,--log-file <arg> Log file to where all build output
will go.
-llr,--legacy-local-repository Use Maven 2 Legacy Local
Repository behaviour, ie no use of
_remote.repositories. Can also be
activated by using
-Dmaven.legacyLocalRepo=true
-N,--non-recursive Do not recurse into sub-projects
-npr,--no-plugin-registry Ineffective, only kept for
backward compatibility
-npu,--no-plugin-updates Ineffective, only kept for
backward compatibility
-nsu,--no-snapshot-updates Suppress SNAPSHOT updates
-o,--offline Work offline
-P,--activate-profiles <arg> Comma-delimited list of profiles
to activate
-pl,--projects <arg> Comma-delimited list of specified
reactor projects to build instead
of all projects. A project can be
specified by [groupId]:artifactId
or by its relative path.
-q,--quiet Quiet output - only show errors
-rf,--resume-from <arg> Resume reactor from specified
project
-s,--settings <arg> Alternate path for the user
settings file
-T,--threads <arg> Thread count, for instance 2.0C
where C is core multiplied
-t,--toolchains <arg> Alternate path for the user
toolchains file
-U,--update-snapshots Forces a check for missing
releases and updated snapshots on
remote repositories
-up,--update-plugins Ineffective, only kept for
backward compatibility
-V,--show-version Display version information
WITHOUT stopping build
-v,--version Display version information
-X,--debug Produce execution debug output
goal和phase分別指插件目標和生命周期階段。
我們知道,可以通過mvn命令激活生命周期階段,從而執行那些綁定在生命周期階段上的插件目標。但Maven還支持直接從命令行調用插件目標。Maven支持這種方式是因為有些任務不適合綁定在生命周期上,例如maven-help-plugin:describe,我們不需要在構建項目的時候去描述插件信息。又如maven-dependency-plugin:tree,我們也不需要在構建項目的時候去顯示依賴樹。因此這些插件目標應該通過如下方式使用:
$ mvn help:describe -Dplugin=compiler
$ mvn dependency:tree
不過,這里還有一個疑問,describe是maven-help-plugin的目標沒錯,但冒號前面的help是什么呢?它既不是groupId,也不是artifactId,Maven是如何根據該信息找到對應版本插件的呢?同理,為什么不是maven-dependency-plugin:tree而是dependency:tree呢?
解答該疑問之前,可以先嘗試一下如下的命令:
$ mvn org.apache.maven.plugins:maven-help-plugin:2.1:describe -Dplugin=compiler
$ mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:tree
這兩條命令就比較容易理解了。它們的效果與之前的兩條命令基本是一樣的,但顯然前面的命令更簡潔,更容易記憶和使用。為了達到該目的,Maven引入了目標前綴的概念。help是maven-help-plugin的目標前綴,dependency是maven-dependency-plugin的目標前綴,有了插件前綴,Maven就能找到對應的artifactId。不過僅有artifactId,而沒有groupId和version,Maven是無法精確定位到某個插件的。那么,Maven是如何做到的呢?我們將在后面的文章詳細剖析這個問題。
