Maven
Apache Maven is a general-purpose build system that does not rely on Makefiles to build software. It is designed for building and managing and Java-based project.
Phases
The MavenBuilder
and MavenPackage
base classes come with the following phases:
build
- compile code and package into a JAR fileinstall
- copy to installation prefix
By default, these phases run:
$ mvn package
$ install . <prefix>
Important files
Maven packages can be identified by the presence of a pom.xml
file.
This file lists dependencies and other metadata about the project.
There may also be configuration files in the .mvn
directory.
Build system dependencies
Maven requires the mvn
executable to build the project. It also
requires Java at both build- and run-time. Because of this, the base
class automatically adds the following dependencies:
depends_on("java", type=("build", "run"))
depends_on("maven", type="build")
In the pom.xml
file, you may see sections like:
<requireJavaVersion>
<version>[1.7,)</version>
</requireJavaVersion>
<requireMavenVersion>
<version>[3.5.4,)</version>
</requireMavenVersion>
This specifies the versions of Java and Maven that are required to build the package. See https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN402 for a description of this version range syntax. In this case, you should add:
depends_on("java@7:", type="build")
depends_on("maven@3.5.4:", type="build")
Passing arguments to the build phase
The default build and install phases should be sufficient to install most packages. However, you may want to pass additional flags to the build phase. For example:
def build_args(self):
return [
"-Pdist,native",
"-Dtar",
"-Dmaven.javadoc.skip=true"
]
External documentation
For more information on the Maven build system, see: https://maven.apache.org/index.html