There are a number of best practices that can be handled at once by inheriting from a parent pom that takes care of them all. Liftwizard ships with several parent poms that form an inheritance hierarchy. is the most minimal parent pom. It is meant to contain uncontroversial best practices that are applicable to all projects. is a parent pom that inherits from and enables several linters and validators in profiles that are off by default. is a Bill of Materials (BOM) that exports all modules within Liftwizard. is a parent pom that inherits from , selects versions of libraries related to Dropwizard applications, and includes opinionated configurations for plugins. Learning Maven Maven can be confusing due to the extent of the "convention over configuration" approach. For example, to answer "how does maven run compilation before tests" you would need to learn: Plugins which are bound and enabled by default is the plugin that handles tests binds to the and phases. binds to the phase In the lifecycle phases comes before which comes before . None of this information appears in , and little of it is logged during the build. To make it easier to understand, includes region markers surrounding each plugin that label the phase that the plugin is bound to. The sections are sorted by phase. liftwizard-minimal-parent liftwizard-profile-parent liftwizard-minimal-parent liftwizard-bom liftwizard-parent liftwizard-profile-parent maven-surefire-plugin maven-compiler-plugin compile testCompile maven-surefire-plugin test compile testCompile test pom.xml liftwizard-minimal-parent <!--region Phase 22: install--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>3.2.0</version> </plugin> <!--endregion Phase 22: install-->