Explain a complex build process you have configured using Maven. What were some key plugins or configurations you used?

A complex Maven build process typically chains together multiple plugins across the standard lifecycle phases to handle compilation, testing, packaging, and deployment for a real application, rather than relying on Maven's bare defaults. Configuring it well means binding each plugin to the correct phase with the right settings.

Key Points: • The maven-compiler-plugin configures the Java source/target version, since Maven's defaults are often outdated. • The maven-surefire-plugin runs unit tests during the test phase and can be configured to include/exclude specific test patterns. • The maven-war-plugin (for web apps) or maven-shade-plugin/maven-assembly-plugin (for executable JARs) handles packaging into the final deployable artifact. • Deployment-focused plugins, like a Tomcat or Docker plugin, can automate pushing the packaged artifact to a target environment as part of the pipeline. • Binding these plugins to the correct lifecycle phase (rather than running them manually) ensures a single mvn command drives the entire pipeline consistently.

Example: For a Java web application, chaining the Compiler Plugin (Java 17 target), Surefire (unit tests), the WAR Plugin (packaging), and a Tomcat plugin bound to a later phase meant a single mvn deploy command took the code from source through a running deployment on a test server.

Code Example:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>17</source>
                <target>17</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Interview Tip: A concise interview answer is:

"For a Java web app, I chained the Compiler Plugin to set the Java version, Surefire to run unit tests, the WAR Plugin to package the application, and a Tomcat plugin to deploy it, all bound to the appropriate lifecycle phases. That let a single mvn command take the code from source all the way to a deployed, tested artifact."