Maven
backendApache Maven is a build tool that primarily uses a convention over configuration based approach to describe a project structure and the steps necessary to convert the source code into runnable code (typically Java byte code) and deployment artifacts. It can be credited with pushing Java projects to use a common directory structure (e.g. src/main/java
for production code, src/test/java
for test code) and for bringing package management into the Java ecosystem. The main Maven repository remains the primary source for Java libraries.
One of the main drawback is its reliance on XML, especially because most Maven plugins follow the core teams practice of only using XML tags, not attributes. With this approach, even defining a simple dependency takes no less than five lines of XML. This wasn't a problem when Maven was launched, but in today's world leads to project configuration files with thousands of lines of XML, making them hard to read and maintain.
Other weak points are the documentation, which can be both hard to find and hard to understand, and the plugin system. Writing custom Maven plugins isn't fun and requires thorough understanding of the Maven lifecycle and internal project representation. Newer build systems like Gradle provide a much better developer experience. For projects that are already using Maven, we don't see a pressing need to migrate away from it, but for new projects we prefer using Gradle.