{"id":343,"date":"2026-10-13T17:31:40","date_gmt":"2026-10-13T17:31:40","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2013\/09\/12\/maven-cli-options-reference-command-line\/"},"modified":"2026-10-13T17:31:40","modified_gmt":"2026-10-13T17:31:40","slug":"maven-cli-options-reference-command-line","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/maven-cli-options-reference-command-line\/","title":{"rendered":"Maven CLI Options Reference: Practical Flags, Comparisons, and Command Examples"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Maven CLI flags control <strong>what gets built<\/strong>, <strong>how failures are handled<\/strong>, and <strong>how dependencies are resolved<\/strong>. This reference is for developers, build engineers, and CI maintainers who want faster, more predictable Maven runs and a quick way to pick the right options.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Originally published on 2013-09-12; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Original article: <a href='https:\/\/www.devopsschool.com\/blog\/maven-cli-options-reference-command-line\/'>Maven commands Web References &amp; Cheatsheet<\/a>.<\/p>\n\n\n\n<figure class='wp-block-image'><img src='https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2013\/09\/maven-cli-options-reference.png' alt='Maven CLI options reference image from the original post' \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Maven CLI decision flow for day-to-day builds<\/h2>\n\n\n\n<pre class='mermaid'>\nflowchart TD\n    A[Start with mvn goal] --> B{Need partial reactor build}\n    B -- Yes --> C[Use -pl with -am or -amd]\n    B -- No --> D[Build full reactor]\n    C --> E{Previous run failed}\n    D --> E\n    E -- Yes --> F[Resume with -rf]\n    E -- No --> G[Choose failure policy]\n    F --> G\n    G --> H{Fast feedback needed}\n    H -- Yes --> I[Use -ff and maybe -T]\n    H -- No --> J[Use -fae]\n    I --> K[Run in CI with -B and -V]\n    J --> K\n    K --> L{Need fresh dependencies}\n    L -- Yes --> M[Use -U]\n    L -- No --> N[Use -o or -nsu]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">High-value Maven options by category<\/h2>\n\n\n\n<figure class='wp-block-table'><table class='has-fixed-layout'><thead><tr><th>Category<\/th><th>Options<\/th><th>What they control<\/th><th>Typical use<\/th><\/tr><\/thead><tbody><tr><td>Reactor scope<\/td><td><code>-pl<\/code>, <code>-am<\/code>, <code>-amd<\/code>, <code>-rf<\/code>, <code>-N<\/code><\/td><td>Which modules are built and where a build resumes<\/td><td>Monorepos and multi-module builds<\/td><\/tr><tr><td>Failure behavior<\/td><td><code>-ff<\/code>, <code>-fae<\/code>, <code>-fn<\/code><\/td><td>When Maven stops or continues after errors<\/td><td>Fast local feedback or full CI failure reporting<\/td><\/tr><tr><td>Dependency freshness<\/td><td><code>-U<\/code>, <code>-nsu<\/code>, <code>-o<\/code><\/td><td>Whether Maven checks remotes or stays offline<\/td><td>Snapshot troubleshooting, reproducible offline runs<\/td><\/tr><tr><td>Output and diagnostics<\/td><td><code>-q<\/code>, <code>-e<\/code>, <code>-X<\/code>, <code>-l<\/code>, <code>-V<\/code><\/td><td>How much logging is produced and where it goes<\/td><td>CI logs, debugging flaky builds<\/td><\/tr><tr><td>Environment files<\/td><td><code>-s<\/code>, <code>-gs<\/code>, <code>-t<\/code>, <code>-f<\/code><\/td><td>Alternate settings, toolchains, and POM path<\/td><td>Per-environment and per-pipeline customization<\/td><\/tr><tr><td>Automation and performance<\/td><td><code>-B<\/code>, <code>-T<\/code>, <code>-D<\/code><\/td><td>Batch mode, threading, and system properties<\/td><td>Non-interactive CI with controlled tuning<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Option comparisons that change build outcomes<\/h2>\n\n\n\n<figure class='wp-block-table'><table class='has-fixed-layout'><thead><tr><th>Goal<\/th><th>Prefer<\/th><th>Alternative<\/th><th>Trade-off<\/th><\/tr><\/thead><tbody><tr><td>Stop immediately on first failure<\/td><td><code>-ff<\/code> \/ <code>--fail-fast<\/code><\/td><td><code>-fae<\/code> \/ <code>--fail-at-end<\/code><\/td><td>Fast signal, but fewer downstream failures discovered in one run<\/td><\/tr><tr><td>Run all modules and report failures at the end<\/td><td><code>-fae<\/code> \/ <code>--fail-at-end<\/code><\/td><td><code>-ff<\/code> \/ <code>--fail-fast<\/code><\/td><td>More complete failure picture, potentially longer runtime<\/td><\/tr><tr><td>Never fail process exit<\/td><td><code>-fn<\/code> \/ <code>--fail-never<\/code><\/td><td><code>-fae<\/code> or <code>-ff<\/code><\/td><td>Useful for diagnostics only; risky for release gates<\/td><\/tr><tr><td>Enforce artifact integrity strictly<\/td><td><code>-C<\/code> \/ <code>--strict-checksums<\/code><\/td><td><code>-c<\/code> \/ <code>--lax-checksums<\/code><\/td><td>Strict mode is safer; lax mode may hide repository issues<\/td><\/tr><tr><td>Run with no network dependency checks<\/td><td><code>-o<\/code> \/ <code>--offline<\/code><\/td><td><code>-nsu<\/code> \/ <code>--no-snapshot-updates<\/code><\/td><td>Offline is most reproducible; no-snapshot-updates still allows non-snapshot remote interactions<\/td><\/tr><tr><td>Force fresh remote metadata\/artifacts<\/td><td><code>-U<\/code> \/ <code>--update-snapshots<\/code><\/td><td>Default update behavior<\/td><td>Can fix stale cache issues but may increase build time<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Practical command examples<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use these as starting points and adapt goals\/phases to your pipeline.<\/p>\n\n\n<pre class='wp-block-code'><span><code class=\"hljs\" class='language-bash'>mvn -B -V -e -T 1C clean verify<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Build one module plus required upstream modules:<\/p>\n\n\n<pre class='wp-block-code' aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\" class='language-bash'><span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">-pl<\/span> <span class=\"hljs-selector-pseudo\">:api-service<\/span> <span class=\"hljs-selector-tag\">-am<\/span> <span class=\"hljs-selector-tag\">test<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Resume a failed multi-module run from a specific module:<\/p>\n\n\n<pre class='wp-block-code' aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\" class='language-bash'><span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">-rf<\/span> <span class=\"hljs-selector-pseudo\">:payments-service<\/span> <span class=\"hljs-selector-tag\">verify<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Force remote snapshot\/release checks when debugging stale artifacts:<\/p>\n\n\n<pre class='wp-block-code'><span><code class=\"hljs\" class='language-bash'>mvn -U clean package<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use alternate settings and toolchains in CI:<\/p>\n\n\n<pre class='wp-block-code' aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\" class='language-bash'>mvn -s ~<span class=\"hljs-regexp\">\/.m2\/<\/span>settings-ci.xml -t ~<span class=\"hljs-regexp\">\/.m2\/<\/span>toolchains.xml deploy<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Capture all output to a log file for post-run analysis:<\/p>\n\n\n<pre class='wp-block-code' aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\" class='language-bash'><span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">-l<\/span> <span class=\"hljs-selector-tag\">build<\/span><span class=\"hljs-selector-class\">.log<\/span> <span class=\"hljs-selector-tag\">clean<\/span> <span class=\"hljs-selector-tag\">install<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Complete CLI options reference from the original post<\/h2>\n\n\n\n<figure class='wp-block-table'><table class='has-fixed-layout'><thead><tr><th>Option<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>-am, --also-make<\/code><\/td><td>If a project list is specified, also build projects required by that list.<\/td><\/tr><tr><td><code>-amd, --also-make-dependents<\/code><\/td><td>If a project list is specified, also build projects that depend on projects in that list.<\/td><\/tr><tr><td><code>-B, --batch-mode<\/code><\/td><td>Run in non-interactive batch mode.<\/td><\/tr><tr><td><code>-C, --strict-checksums<\/code><\/td><td>Fail the build if checksums do not match.<\/td><\/tr><tr><td><code>-c, --lax-checksums<\/code><\/td><td>Warn if checksums do not match.<\/td><\/tr><tr><td><code>-cpu, --check-plugin-updates<\/code><\/td><td>Ineffective; kept for backward compatibility.<\/td><\/tr><tr><td><code>-D, --define &lt;arg&gt;<\/code><\/td><td>Define a system property.<\/td><\/tr><tr><td><code>-e, --errors<\/code><\/td><td>Produce execution error messages.<\/td><\/tr><tr><td><code>-emp, --encrypt-master-password &lt;arg&gt;<\/code><\/td><td>Encrypt master security password.<\/td><\/tr><tr><td><code>-ep, --encrypt-password &lt;arg&gt;<\/code><\/td><td>Encrypt server password.<\/td><\/tr><tr><td><code>-f, --file &lt;arg&gt;<\/code><\/td><td>Force use of an alternate POM file (or a directory with pom.xml).<\/td><\/tr><tr><td><code>-fae, --fail-at-end<\/code><\/td><td>Only fail at the end; allow all non-impacted builds to continue.<\/td><\/tr><tr><td><code>-ff, --fail-fast<\/code><\/td><td>Stop at first failure in reactor builds.<\/td><\/tr><tr><td><code>-fn, --fail-never<\/code><\/td><td>Never fail the build, regardless of project result.<\/td><\/tr><tr><td><code>-gs, --global-settings &lt;arg&gt;<\/code><\/td><td>Alternate path for the global settings file.<\/td><\/tr><tr><td><code>-h, --help<\/code><\/td><td>Display help information.<\/td><\/tr><tr><td><code>-l, --log-file &lt;arg&gt;<\/code><\/td><td>Write all build output to a log file.<\/td><\/tr><tr><td><code>-llr, --legacy-local-repository<\/code><\/td><td>Use Maven 2 legacy local repository behavior (no _maven.repositories). Can also be activated with <code>-Dmaven.legacyLocalRepo=true<\/code>.<\/td><\/tr><tr><td><code>-N, --non-recursive<\/code><\/td><td>Do not recurse into sub-projects.<\/td><\/tr><tr><td><code>-npr, --no-plugin-registry<\/code><\/td><td>Ineffective; kept for backward compatibility.<\/td><\/tr><tr><td><code>-npu, --no-plugin-updates<\/code><\/td><td>Ineffective; kept for backward compatibility.<\/td><\/tr><tr><td><code>-nsu, --no-snapshot-updates<\/code><\/td><td>Suppress SNAPSHOT updates.<\/td><\/tr><tr><td><code>-o, --offline<\/code><\/td><td>Work offline.<\/td><\/tr><tr><td><code>-P, --activate-profiles &lt;arg&gt;<\/code><\/td><td>Comma-delimited list of profiles to activate.<\/td><\/tr><tr><td><code>-pl, --projects &lt;arg&gt;<\/code><\/td><td>Comma-delimited list of reactor projects to build instead of all projects. A project can be specified by [groupId]:artifactId or by relative path.<\/td><\/tr><tr><td><code>-q, --quiet<\/code><\/td><td>Quiet output; show errors only.<\/td><\/tr><tr><td><code>-rf, --resume-from &lt;arg&gt;<\/code><\/td><td>Resume reactor from a specified project.<\/td><\/tr><tr><td><code>-s, --settings &lt;arg&gt;<\/code><\/td><td>Alternate path for the user settings file.<\/td><\/tr><tr><td><code>-T, --threads &lt;arg&gt;<\/code><\/td><td>Thread count, for example 2.0C where C multiplies available cores.<\/td><\/tr><tr><td><code>-t, --toolchains &lt;arg&gt;<\/code><\/td><td>Alternate path for the user toolchains file.<\/td><\/tr><tr><td><code>-U, --update-snapshots<\/code><\/td><td>Force a check for updated releases and snapshots on remote repositories.<\/td><\/tr><tr><td><code>-up, --update-plugins<\/code><\/td><td>Ineffective; kept for backward compatibility.<\/td><\/tr><tr><td><code>-V, --show-version<\/code><\/td><td>Display version information without stopping the build.<\/td><\/tr><tr><td><code>-v, --version<\/code><\/td><td>Display version information.<\/td><\/tr><tr><td><code>-X, --debug<\/code><\/td><td>Produce execution debug output.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Best practices<\/h2>\n\n\n\n<ul class='wp-block-list'><li>In CI, prefer <code>-B<\/code> and include <code>-V<\/code> so logs always show the Maven version used.<\/li><li>Use <code>-ff<\/code> for fast developer feedback, and <code>-fae<\/code> when you need a full failure report across modules.<\/li><li>Use <code>-U<\/code> selectively while troubleshooting cache or snapshot issues; avoid it by default if build speed is critical.<\/li><li>Pin environment-specific behavior with <code>-s<\/code>, <code>-gs<\/code>, and <code>-t<\/code> instead of relying on implicit local defaults.<\/li><li>Avoid <code>-fn<\/code> in release or gating pipelines because it can mask real failures.<\/li><li>Verify option support in your installed Maven using <code>mvn -h<\/code>, especially for flags marked as backward-compatibility only.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The original page also included a broken YouTube embed; the fallback link visible on that page points to: <a href='https:\/\/www.youtube.com\/watch?v=ZCfrNvu6nMc'>https:\/\/www.youtube.com\/watch?v=ZCfrNvu6nMc<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A structured Maven command-line reference for CI\/CD and local builds, including option comparisons, workflow guidance, and ready-to-use mvn commands. Based on the original 2013 cheatsheet, updated for readability and operational use.<\/p>\n","protected":false},"author":1,"featured_media":3739,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[29],"tags":[829,333,824,2283,161,2279,2280,2291,2287,2290,2289,2288,2281,2284,1152,938,2282,2285,2286],"class_list":["post-343","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-maven","tag-cli","tag-command","tag-command-line","tag-command-line-options","tag-maven","tag-maven-cli","tag-maven-cli-options","tag-maven-cli-options-description","tag-maven-cli-options-guide","tag-maven-cli-options-instructions","tag-maven-cli-options-reference","tag-maven-cli-options-tutorial","tag-maven-cli-reference","tag-maven-command-line-cheatsheet","tag-options","tag-reference","tag-understand-maven-cli-options","tag-useful-maven-cli-options","tag-useful-maven-commands"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/343","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=343"}],"version-history":[{"count":4,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/343\/revisions"}],"predecessor-version":[{"id":79213,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/343\/revisions\/79213"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/3739"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=343"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=343"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}