Configuring Apache Maven

System properties and JVM

The MAVEN_OPTS environment variable contains parameters used to start up the JVM running Maven and can be used to supply additional options to it. For example, JVM memory settings could be defined with the value -Xms256m -Xmx512m.

JVM options can also be configured in the ${session.rootDirectory}/.mvn/jvm.config file, which means you can define the options for your build on a per-project basis. This file will become part of your project and will be checked in along with your project.

So for example if you put the following JVM options into the .mvn/jvm.config file:

-Xmx2048m -Xms1024m -XX:MaxPermSize=512m -Djava.awt.headless=true

The content of this file will be appended to the MAVEN_OPTS environment variable.

Note that the above mechanism is handled by the Maven launch scripts mvn and mvnDebug (mvn.cmd and mvnDebug.cmd on Windows platforms).

User Properties

Once the JVM is started, Maven uses user properties to configure various parts of the system. The main entry point is the ${maven.home}/conf/maven.properties properties file. This file, along with any other files loaded from it (see below) are called Maven properties files and are Java properties files with a few enhancements. Contrary to standard properties file, those files are UTF-8 encoded.

File Inclusion

Additional files can be loaded using the special ${includes} key. The associated value is a comma-separated list of additional files to include. Each item may be enclosed in quotes to gracefully include spaces. Items are trimmed before being loaded. If the first character of an item is a question mark, the load will silently fail if the file does not exist.

${includes} = ?"${maven.user.conf}/maven.properties", \
              ?"${maven.project.conf}/maven.properties"

Property Substitution

Properties undergo the property substitution process, so that any value containing a ${xxx} placeholder will be substituted with the value of the xxx property. In addition to properties defined in the files being loaded, the following properties are defined:

  • session.topDirectory
  • session.rootDirectory
  • maven.version
  • maven.build.version
  • env.XYZ to refer to the XYZ environment variable
  • cli.OPT to refer to the OPT command line option
  • system properties

The main ${maven.home}/conf/maven.properties defines a few basic properties, but more importantly, loads the user properties from ~/.m2/maven.properties and the project specific properties from ${session.rootDirectory}/.mvn/maven.properties.

Settings

Extensions

Maven Command Line Arguments

Maven is a command line tool, and, as such, accepts various command line arguments. The MAVEN_ARGS environment value is used to provide additional arguments to Maven. Those arguments will be prepended to the actual list of command line arguments.

For example, options and goals could be defined with the value -B -V checkstyle:checkstyle.