MavenPropertiesGuide

Intro

Because I couldn't find a clear overview of which properties are availabe in maven2 I started this page. It is a collection of things found in the offcial maven documentation and postings to the maven user mailing list.

Note: In Maven 3.0, all pom.* properties are deprecated. Use project.* instead!

Build in properties

  • ${basedir} represents the directory containing pom.xml
  • ${version} equivalent to ${project.version} or ${pom.version}

Pom/Project properties

All elements in the pom.xml, can be referenced with the project. prefix or using pom. as prefix. This list is just an example of some commonly used elements.

  • ${project.build.directory} results in the path to your "target" dir, this is the same as ${pom.project.build.directory}
  • ${project.build.outputDirectory} results in the path to your "target/classes" dir
  • ${project.name} or ${pom.name} refers to the name of the project.
  • ${project.version} or ${pom.version} refers to the version of the project.
  • ${project.build.finalName} refers to the final name of the file created when the built project is packaged

Local user settings

Similarly, values in the user's settings.xml can be referenced using property names with settings. prefix.

  • ${settings.localRepository} refers to the path of the user's local repository.
  • ${maven.repo.local} also works for backward compatibility with maven1 ??

Environment variables

Environment variables can be referenced using the env prefix

  • ${env.M2_HOME} returns the Maven2 installation path.
  • ${java.home} specifies the path to the current JRE_HOME environment use with relative paths to get for example:
    <jvm>${java.home}../bin/java.exe</jvm>

Java system properties

All Java System Properties defined by the JVM.

Custom properties in the POM

User defined properties in the pom.xml.

<project>
...
  <properties>
     <my.filter.value>hello</my.filter.value>
  </properties>
...
</project>
  • ${my.filter.value} will result in hello if you inserted the above XML fragment in your pom.xml

Parent Project variables

How can parent project variables be accessed?

You can use the prefix: ${project.parent}.

A good way to determine possible variables is to have a look directly at the API. I'm currently using Maven 2.2.1, and to access the Parent you can use ${project.parent}. This will return an org.apache.maven.project.MavenProject instance.

To access the parent version: ${parent.version}.

Reflection Properties

The pattern ${someX.someY.someZ} can simply sometimes mean getSomeX().getSomeY().getSomeZ(). Thus, properties such as ${project.build.directory} is translated to getProject().getBuild().getDirectory().

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.
  1. Sep 20, 2006

    Franz Allan Valencia See says:

    Good day, Here is my list. Some of these are not yet on the list and some of th...

    Good day,

    Here is my list. Some of these are not yet on the list and some of them are already are. And I must admit that I am still not yet acquainted with some of them.

    I also placed here where I got these from just in case somebody wants to know how I came up with this list and where to get more info (code-reading-wise).

    Not sure though if this is the complete list (excluding plugin expressions and user-defined properties).

        *  project (from [1])
              o project.distributionManagementArtifactRepository
              o project.artifact
              o project.parent
              o project.file
              o project.artifacts
              o project.parentArtifact
              o project.pluginArtifacts
              o project.remoteArtifactRepositories
              o project.pluginArtifactRepositories
              o project.attachedArtifact
        * settings (from [2])
              o settings.offilne
              o settings.interactive
        * rootless (from [3])
              o localRepository
              o reactorProjects
        * java properties (from [4])
              o java.version
              o java.vendor
              o java.vendor.url
              o java.home
              o java.vm.specification.version
              o java.vm.specification.vendor
              o java.vm.specification.name
              o java.vm.version
              o java.vm.vendor
              o java.vm.name
              o java.specification.version
              o java.specification.vendor
              o java.specification.name
              o java.class.version
              o java.class.path
              o java.library.path
              o java.io.tmpdir
              o java.compiler
              o java.ext.dirs
              o os.name
              o os.arch
              o os.version
              o file.separator
              o path.separator
              o line.separator
              o user.name
              o user.home
              o user.dir

    Thanks,
    Franz 

    [1] http://svn.apache.org/repos/asf/maven/components/trunk/maven-core/src/main/resources/META-INF/maven/plugin-expressions/project.paramdoc.xml
    [2] http://svn.apache.org/repos/asf/maven/components/trunk/maven-core/src/main/resources/META-INF/maven/plugin-expressions/rootless.paramdoc.xml
    [3] http://svn.apache.org/repos/asf/maven/components/trunk/maven-core/src/main/resources/META-INF/maven/plugin-expressions/settings.paramdoc.xml
    [4] http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#getProperties

  2. Sep 29, 2006

    John Martin says:

    Is there a way to pick up the path name to the settings.xml file that might have...

    Is there a way to pick up the path name to the settings.xml file that might have been provided with the -s switch?

  3. Oct 27, 2006

    Bjorn De Bakker says:

    Is it possible to add a property to your pom.xml?  I mean, doing something ...

    Is it possible to add a property to your pom.xml?  I mean, doing something like this:
    <version>$

    Unknown macro: {app.version}

    </version>

    When you want to compile, just provide the value for the app.version via the command line.  The problem is that we have several builds for one application (local, server, ...) and for that we need multiple properties-files, to change settings according to the location we're deploying it to. 

  4. Nov 13, 2006

    Franz Allan Valencia See says:

    Good day to you, Bjorn, You might want to use your POM's dependencyManagement f...

    Good day to you, Bjorn,

    You might want to use your POM's dependencyManagement for that.

    Cheers,
    Franz

  5. Dec 12, 2006

    Tjeerd Verhagen says:

    Hi Bjorn,  Or maybe an other possibility is to use the Maven 2 profiles. S...

    Hi Bjorn, 

    Or maybe an other possibility is to use the Maven 2 profiles.
    See http://altuure.blogspot.com/2006/11/maven-profiles.html for an example.

    Cheers, Tjeerd 

  6. Dec 15, 2006

    Emmanuel Hugonnet says:

    Maybe you should explain how you can set such a property from a MOJO. I would li...

    Maybe you should explain how you can set such a property from a MOJO.
    I would like to know this very much

  7. Jun 06, 2007

    Jamie Burrell says:

    Not sure if anyone else finds it useful (I know I did), but I have submitted a p...

    Not sure if anyone else finds it useful (I know I did), but I have submitted a patch to plexus-utils that allows selection of properties from lists within the POM: http://jira.codehaus.org/browse/PLXUTILS-37
    For example, given the following in the POM:

    pom.xml
    <project>
      ...
      <developers>
        <developer>
          <id>myUserId</id>
          <name>Jamie Burrell</name>
          <email>jamie.burrell@nospam.com</email>
          <roles>
            <role>developer</role>
          </roles>
          <timezone>0</timezone>
        </developer> 
        <developer>
          <id>herUserId</id>
          <name>Jane Doe</name>
          <email>jane.doe@nospam.com</email>
          <organization>Doe Solutions</organization>
          <roles>
            <role>developer</role>
          </roles>
          <timezone>0</timezone>
        </developer> 
      </developers>
      ...
    </project>
    

    Referencing ${project.developers.0.id} in the POM would then return "myUserId".

    Not useful to everyone, but also not harmful, and allows access to all the list props on the POM (such as developers, contributors, profiles etc). I've been using it to automate directory path filtering for each developer (on *nix, the path is /home/group/userid).

    Comments welcome.

    Cheers, Jamie

  8. Nov 15, 2007

    Nicolas Kyriazopoulos-Panagiotopoulos says:

    Hi! It's not exactly the best place to ask, but, do you know how can we dec...

    Hi!

    It's not exactly the best place to ask, but, do you know how can we declare a custom property that is a collection? Something like

      <properties>
    <my.filter.value>
    <items> 
    <item>hello</item>
    <item>world</item> 
    </items>
    </properties>Thaanks in advance!

  9. Dec 26, 2007

    Amit says:

    Hi all, Thanks for the list. I am wondering if their is any Maven variable that...

    Hi all,

    Thanks for the list. I am wondering if their is any Maven variable that can be used to obtain date of the system, I want to use this as the folder name in which my maven builds will go in to.

     I fancy for something like  <directory>"Date"</directory> in the build tag of pom.xml.

    Please guide on the same.

    Regards,

    Amit

  10. Jan 24, 2008

    QA_2 says:

    Thanks for the list of the default ones! I was looking all over maven.apache...

    Thanks for the list of the default ones! I was looking all over maven.apache.org for something like that. They should really clean this up, make sure it's complete, and then put it up.

    On a related note, does anyone know if it's possible to provide a pom.xml file with a standard Java properties file and have maven read the file and set those properties accordingly?

  11. Oct 16, 2008

    Thomas Franconville says:

    Is it possible to know into a variable the goal launched ? I want with a develo...

    Is it possible to know into a variable the goal launched ?

    I want with a developper profile do the tests only with a maven test. So like that, the maven install will be faster. The idea is to use this variable with the skip test.

  12. Nov 24, 2008

    Chris Laprun says:

    ${maven.repo.local} doesn't seem to be working anymore...

    ${maven.repo.local} doesn't seem to be working anymore...

  13. Mar 19, 2009

    astroxl says:

    how can i reference the assembly id in my descriptor file?  <build> ...

    how can i reference the assembly id in my descriptor file? 

    <build>
            <plugins>
                <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>mysql</id>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                           
                            <configuration>
                                <descriptors>
                                    <descriptor>src/main/assemblies/descriptor.xml</descriptor>

                                    <!- I want to reference the assembly id "mysql" in this descriptor.xml, how to do that ? ->
                                 </descriptors>
                            [...]

                            </configuration>

                        </execution>

                  </executions>

              <plugin>

         <plugins>

     thanks alot!

  14. Dec 22

    Nicolas Toublanc says:

    Since Maven 2.1, you can use build timestamp as property: maven.build.timestam...

    Since Maven 2.1, you can use build timestamp as property:

    maven.build.timestamp

    and configure the format:

    <maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>

    http://maven.apache.org/guides/introduction/introduction-to-the-pom.html