{"id":240,"date":"2026-10-13T01:41:37","date_gmt":"2026-10-13T01:41:37","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2010\/04\/16\/maven-interview-questions-and-answers\/"},"modified":"2026-10-13T01:41:37","modified_gmt":"2026-10-13T01:41:37","slug":"maven-interview-questions-and-answers","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/maven-interview-questions-and-answers\/","title":{"rendered":"Maven Interview Questions: Practical Answers on POM, Lifecycle, Plugins, and Repositories"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This guide distills a large legacy Maven Q&amp;A into interview-ready explanations for DevOps and Java engineers. You will learn how to answer common Maven questions clearly, with practical examples for configuration scope, lifecycle execution, repository strategy, plugin setup, and debugging.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Originally published on 2010-04-16; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img src='https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2010\/04\/maven-interview-questions-a.png' alt='Maven interview questions and answers' width='600' height='400' \/><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Original compilation was contributed by Rajesh Kumar, with references to <a href='http:\/\/www.scmgalaxy.com\/'>scmGalaxy.com<\/a> and Maven community documentation. This revision keeps the useful technical patterns and removes repetition.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What Maven interviewers usually test<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Most Maven interviews test whether you understand <strong>standard lifecycle behavior<\/strong>, <strong>configuration boundaries<\/strong>, and <strong>dependency\/repository operations<\/strong> in real projects.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Difference between <code>pom.xml<\/code> and <code>settings.xml<\/code><\/li><li>How plugin goals bind to lifecycle phases<\/li><li>How to troubleshoot dependency resolution and test execution<\/li><li>How multi-module and aggregator builds work<\/li><li>How to configure packaging details (manifest, output directory, assembly)<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Interview topic<\/th><th>Strong answer should include<\/th><th>Typical follow-up question<\/th><\/tr><\/thead><tbody><tr><td>Configuration scope<\/td><td>Project config in POM; user\/machine config in settings<\/td><td>When would you use mirrors instead of project repositories?<\/td><\/tr><tr><td>Lifecycle<\/td><td>Default phases plus plugin goals bound per phase<\/td><td>Where would you attach code generation?<\/td><\/tr><tr><td>Dependencies<\/td><td>Transitive resolution, local cache, debug commands<\/td><td>How do you find the source of a conflict?<\/td><\/tr><tr><td>Packaging<\/td><td>Compiler\/jar\/assembly plugin customization<\/td><td>How do you create multiple distributables?<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Configuration scope and precedence: pom.xml, settings.xml, and CLI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A reliable interview answer is: use <strong>pom.xml for project behavior<\/strong> and <strong>settings.xml for user\/environment behavior<\/strong> (credentials, mirrors, local policy). CLI properties are typically the highest-priority temporary overrides.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Location<\/th><th>Scope<\/th><th>Good use<\/th><th>Avoid<\/th><\/tr><\/thead><tbody><tr><td>pom.xml<\/td><td>Shared project<\/td><td>Dependencies, plugins, build\/reporting config<\/td><td>Personal credentials or machine-specific paths<\/td><\/tr><tr><td>settings.xml<\/td><td>User or CI agent<\/td><td>Mirrors, auth, proxies, local repository policy<\/td><td>Project logic needed by all developers<\/td><\/tr><tr><td>-Dkey=value<\/td><td>Per run<\/td><td>Temporary overrides and experiments<\/td><td>Hidden permanent behavior<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-xml\"><span class=\"hljs-comment\">&lt;!-- project-level repository declaration --&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">repositories<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">repository<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id<\/span>&gt;<\/span>company-proxy<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">id<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">url<\/span>&gt;<\/span>https:\/\/repo.example.com\/maven2<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">url<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">repository<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">repositories<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">project<\/span>&gt;<\/span>\n\n<span class=\"hljs-comment\">&lt;!-- user-level mirror declaration --&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">settings<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">mirrors<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">mirror<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id<\/span>&gt;<\/span>local-mirror<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">id<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">mirrorOf<\/span>&gt;<\/span>*<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">mirrorOf<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">url<\/span>&gt;<\/span>https:\/\/repo.example.com\/maven2<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">url<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">mirror<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">mirrors<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">settings<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The original FAQ states precedence as parent POM, project POM, settings, then CLI (last one wins). In practice, interviewers usually care that you understand <strong>CLI overrides are strongest for that run<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Maven lifecycle execution works<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When asked about Maven architecture, describe the sequence from model loading through dependency resolution and phase-bound plugin execution.<\/p>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Run mvn clean verify] --> B[Load parent and project POM]\n    B --> C[Apply settings and active profiles]\n    C --> D[Resolve dependencies from repositories]\n    D --> E[Execute lifecycle phases]\n    E --> F[Run plugin goals bound to each phase]\n    F --> G[Produce artifacts and reports]\n<\/pre>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-bash\">mvn clean verify<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Common technical questions with practical examples<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">How can I use the current date in a build?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The original answer uses the buildnumber plugin to generate a timestamp during <code>validate<\/code>. This is a legacy example from the original post.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugin<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>org.codehaus.mojo<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>maven-buildnumber-plugin<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version<\/span>&gt;<\/span>0.9.4<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">version<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">configuration<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">format<\/span>&gt;<\/span>{0,date,yyyy-MM-dd HH:mm:ss}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">format<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">items<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">item<\/span>&gt;<\/span>timestamp<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">item<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">items<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">doCheck<\/span>&gt;<\/span>false<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">doCheck<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">doUpdate<\/span>&gt;<\/span>false<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">doUpdate<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">configuration<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">executions<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">execution<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">phase<\/span>&gt;<\/span>validate<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">phase<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">goals<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">goal<\/span>&gt;<\/span>create<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">goal<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">goals<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">execution<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">executions<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">plugin<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">How do I configure array and map types in Mojo\/plugin configuration?<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">configuration<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">tags<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">tag<\/span>&gt;<\/span>value1<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">tag<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">tag<\/span>&gt;<\/span>value2<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">tag<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">tags<\/span>&gt;<\/span>\n\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">myMap<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">yourkey<\/span>&gt;<\/span>yourvalue<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">yourkey<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">myMap<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">configuration<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">What causes duplicate plugin execution errors?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If you execute a plugin multiple times with the same execution ID (or missing IDs), Maven reports a duplicate execution problem. Give each execution a unique ID.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugin<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>org.apache.maven.plugins<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>maven-assembly-plugin<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">executions<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">execution<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id<\/span>&gt;<\/span>bin-dist<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">id<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">phase<\/span>&gt;<\/span>install<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">phase<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">goals<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">goal<\/span>&gt;<\/span>assembly<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">goal<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">goals<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">configuration<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">descriptor<\/span>&gt;<\/span>src\/main\/descriptors\/bin.xml<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">descriptor<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">finalName<\/span>&gt;<\/span>${project.build.finalName}-bin<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">finalName<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">configuration<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">execution<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">execution<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id<\/span>&gt;<\/span>src-dist<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">id<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">phase<\/span>&gt;<\/span>install<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">phase<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">goals<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">goal<\/span>&gt;<\/span>assembly<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">goal<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">goals<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">configuration<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">descriptor<\/span>&gt;<\/span>src\/main\/descriptors\/src.xml<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">descriptor<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">finalName<\/span>&gt;<\/span>${project.build.finalName}-src<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">finalName<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">configuration<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">execution<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">executions<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">plugin<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">How do I change jar output location and add a Main-Class?<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugin<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>org.apache.maven.plugins<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>maven-jar-plugin<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">configuration<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">outputDirectory<\/span>&gt;<\/span>${project.build.directory}\/custom<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">outputDirectory<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">archive<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">manifest<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">mainClass<\/span>&gt;<\/span>com.mycompany.app.App<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">mainClass<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">manifest<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">archive<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">configuration<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">plugin<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">How do I install a third-party jar into the local repository?<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-bash\">mvn install:install-file -Dfile=<span class=\"hljs-regexp\">\/path\/<\/span>to\/file.jar -DgroupId=com.example -DartifactId=custom-lib -Dversion=<span class=\"hljs-number\">1.0<\/span><span class=\"hljs-number\">.0<\/span> -Dpackaging=jar -DgeneratePom=<span class=\"hljs-literal\">true<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><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<h3 class=\"wp-block-heading\">Why are tests compiled but not executed?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The original FAQ notes accidental test filtering via a <code>test<\/code> property. Check both POM and settings for unintended values.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">properties<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">test<\/span>&gt;<\/span>SomeSpecificTest<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">test<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">properties<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-bash\">mvn test -Dtest=SomeSpecificTest<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Repository models and interview-ready trade-offs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Be ready to explain local cache behavior, private organizational proxies, and external remotes. The original article uses older terminology like ibiblio; the core architecture idea still applies.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Repository type<\/th><th>Purpose<\/th><th>Interview talking point<\/th><\/tr><\/thead><tbody><tr><td>Local repository<\/td><td>Developer\/agent cache of resolved artifacts<\/td><td>Speeds repeated builds and supports offline work<\/td><\/tr><tr><td>Private remote repository<\/td><td>Organization-controlled proxy\/hosted artifacts<\/td><td>Policy control, access control, and reliability<\/td><\/tr><tr><td>Public remote repository<\/td><td>External source for open artifacts<\/td><td>Usually accessed via internal mirror\/proxy in enterprises<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Prefer repository implementations with admin tooling, backup strategy, and access control.<\/li><li>Use internal repositories to reduce internet dependency and improve repeatability.<\/li><li>Keep internal artifacts separated from proxied external artifacts.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Ant vs Maven: explain the difference without oversimplifying<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Aspect<\/th><th>Ant<\/th><th>Maven<\/th><\/tr><\/thead><tbody><tr><td>Model<\/td><td>Task-oriented scripting<\/td><td>Lifecycle and convention-oriented<\/td><\/tr><tr><td>Flexibility<\/td><td>Very high; manual wiring<\/td><td>High via plugins within lifecycle conventions<\/td><\/tr><tr><td>Standardization<\/td><td>Team-defined<\/td><td>Strong defaults and common structure<\/td><\/tr><tr><td>Dependency management<\/td><td>Manual unless extended<\/td><td>Built-in transitive dependency model<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You can still run Ant tasks from Maven when needed (for small project-specific tasks) using the AntRun plugin and multiple executions bound to different phases.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugin<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>maven-antrun-plugin<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">executions<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">execution<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id<\/span>&gt;<\/span>one<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">id<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">phase<\/span>&gt;<\/span>generate-sources<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">phase<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">goals<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">goal<\/span>&gt;<\/span>run<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">goal<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">goals<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">execution<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">execution<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id<\/span>&gt;<\/span>two<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">id<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">phase<\/span>&gt;<\/span>package<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">phase<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">goals<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">goal<\/span>&gt;<\/span>run<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">goal<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">goals<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">execution<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">executions<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">plugin<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Useful troubleshooting commands and references<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-bash\"><span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">-X<\/span>\n<span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">-e<\/span>\n<span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">help<\/span><span class=\"hljs-selector-pseudo\">:effective-pom<\/span>\n<span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">dependency<\/span><span class=\"hljs-selector-pseudo\">:tree<\/span>\n<span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">--help<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><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\">Useful documentation links from the original material: <a href='http:\/\/maven.apache.org\/plugins\/maven-antrun-plugin\/classpaths.html'>Antrun classpath references<\/a>, <a href='http:\/\/maven.apache.org\/plugins\/maven-assembly-plugin\/'>Assembly Plugin documentation<\/a>, <a href='http:\/\/ant.apache.org\/manual\/antexternal.html'>Using external Ant tasks<\/a>, and historical reference at <a href='http:\/\/www.javabeat.net\/'>javabeat.net<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Common pitfalls in interview answers<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Mixing user-specific settings (mirrors, credentials) into <code>pom.xml<\/code>.<\/li><li>Forgetting unique execution IDs when the same plugin runs multiple times.<\/li><li>Assuming compiled tests will always run; hidden <code>test<\/code> filters can skip suites.<\/li><li>Using old Maven 2-era snippets without validating them against your current stack.<\/li><li>Giving only theory; always include at least one command or plugin snippet in your answer.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Prepare for Maven interviews with concise, real-world answers and configuration snippets. This guide covers pom.xml vs settings.xml, lifecycle flow, repositories, plugin execution, and troubleshooting.<\/p>\n","protected":false},"author":1,"featured_media":4283,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[52],"tags":[767,3915,3855,766,3914,507,161,3345,3912,3352,3911,3349,3913,1553,482,1830,3910,637],"class_list":["post-240","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-interview-questions-answers","tag-answer","tag-apache-maven-interview-questions-answer","tag-build-automation-tool","tag-interview","tag-interview-questions-answer-for-maven","tag-list","tag-maven","tag-maven-interview","tag-maven-interview-guide","tag-maven-interview-qa","tag-maven-interview-questions-answer","tag-maven-job-interview","tag-maven-job-interview-kit","tag-most-asked","tag-questions","tag-selected","tag-sets","tag-top"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/240","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=240"}],"version-history":[{"count":4,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/240\/revisions"}],"predecessor-version":[{"id":79071,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/240\/revisions\/79071"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/4283"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=240"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=240"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}