Build automation is the act of automating a wide variety of tasks that software developers do in their day-to-day activities including things like compiling source code, packaging, running tests, deployment, creating documentation and/or release notes. A build automation tool saves you lot of time by automating various build related activities, especially for enterprise level applications with lot of source files and dependencies. There are many such tools to assist us in the build process and build automation such as Ant, Maven, Gradle etc.
Apache Ant is a build tool for automating software build processes implemented using the Java language, and is best suited to building Java projects. Ant uses XML to describe the build process and its dependencies. By default the XML file is named build.xml. Ant is an Apache project. It is open source software, and is released under the Apache Software License. Ant provides flexibility to the user, but without any conventions.
Apache Ivy, a sub-project of the Apache Ant project, is a transitive relation dependency manager that adds dependency management to ANT. However it couldn’t resolve all of Ant’s issues and also was not popular like Ant.
Maven is another build automation tool used primarily for Java projects that addresses two aspects of building software: First, it describes how software is built, and second, it describes its dependencies. Comparing with Apache Ant, Maven uses conventions for the build procedure, and only exceptions need to be written down. The Maven project is hosted by the Apache Software Foundation, where it was formerly part of the Jakarta Project. However Maven was considered as very complex to learn and implement by many, especially to extend the functionality or to add exceptions to the conventions.
Gradle is also an open source project, and is licensed under the ASL. Gradle is designed for large multi-project builds. Gradle builds upon the concepts of Ant and Maven, and introduced a Groovy-based domain-specific language (DSL) instead of traditional XML form for configurations. Gradle supports incremental builds and intelligently determine to not to re-execute up-to-date parts of the build tree and dependencies. Though Gradle provides out of the box conventions, it also provides means of developing our own build standards.