- Details
-
Last Updated: 05 September 2015
-
Created: 04 September 2015
The MavenPropertiesGuide that was on the wiki of Codehaus has been an incredible useful go-to resource for me for a long time. Since Codehaus is no more, that page also disappeared. The Wayback Machine has a copy, but it's incredibly slow, and hard to find. So here is a mostly-verbatim copy of it, "sic", for my and your reference.
Captured on May 20 2015, last updated on December 28 2012. Noted authors are Jasper Molenmaker and Frank Griswold.
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!
Built-in properties
${basedir}
represents the directory containing pom.xml${version}
equivalent to${project.version}
(deprecated:${pom.version}
)
Pom/Project properties
All elements in the pom.xml, can be referenced with the project.
prefix. This list is just an example of some commonly used elements. (deprecated: {pom.}
prefix)
${project.build.directory}
results in the path to your "target" directory, this is the same as${pom.project.build.directory}
${project.build.outputDirectory}
results in the path to your "target/classes" directory${project.name}
refers to the name of the project (deprecated:${pom.name}
).${project.version}
refers to the version of the project (deprecated: or${pom.version}
).${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
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()
.
17 Comments
-
Franz Allan Valencia See
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.dirThanks,
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#getProperties9 20, 2006
-
John Martin
Is there a way to pick up the path name to the settings.xml file that might have been provided with the -s switch?
9 29, 2006
-
Bjorn De Bakker
Is it possible to add a property to your pom.xml? I mean, doing something like this:
<version>${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.
10 27, 2006
-
Franz Allan Valencia See
Good day to you, Bjorn,
You might want to use your POM's dependencyManagement for that.
Cheers,
Franz11 13, 2006
-
Tjeerd Verhagen
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
12 12, 2006
-
Emmanuel Hugonnet
Maybe you should explain how you can set such a property from a MOJO.
I would like to know this very much ;-)12 15, 2006
-
Jamie Burrell
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>This email address is being protected from spambots. You need JavaScript enabled to view it.</email> <roles> <role>developer</role> </roles> <timezone>0</timezone> </developer> <developer> <id>herUserId</id> <name>Jane Doe</name> <email>This email address is being protected from spambots. You need JavaScript enabled to view it.</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
6 06, 2007
-
Nicolas Kyriazopoulos-Panagiotopoulos
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!11 15, 2007
-
Amit
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
12 26, 2007
-
QA_2
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?
1 24, 2008
-
Thomas Franconville
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.
10 16, 2008
-
Chris Laprun
${maven.repo.local}
doesn't seem to be working anymore...11 24, 2008
-
astroxl
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!
3 19, 2009
-
Nicolas Toublanc
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
12 22, 2009
-
Marco Soldati
In response to Nicolas Kyriazopoulos-Panagiotopoulos posting of >2 years ago. Hopefully it will help someone else:
Add your list to a CDATA section
<property> <site.links> <![CDATA[<links> <item name="Helio Home" href="http://www.helio-vo.eu/" /> <item name="Wiki" href="http://ourwiki.com" /> <item name="Helio Dev" href="http://ourdevserver.com" /> </links>]]> </site.links> <property>
4 01, 2010
-
Johann Renck
Also you can just add the following to check which properties are available:
....
<plugin> <artifactId>maven-antrun-plugin</artifactId> <version>1.6</version> <executions> <execution> <phase>install</phase> <configuration> <tasks> <echoproperties /> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build>10 09, 2011
-
Pino Silvaggio
For anyone interested,
I created this new plugin where it sets a property pointing to the artifact file for each selected project dependency. Each property name will have a base name in form of groupId:artifactId:type:[classifier][.relative][.suffix]. This is similar to the dependency:properties goal but with additional features, like filtering and relative paths.
Result:
junit:junit:jar=/home/user/.m2/repository/junit/junit/4.8.2/junit-4.8.2.jar
or
junit:junit:jar.relative=../../../.m2/repository/junit/junit/4.8.2/junit-4.8.2.jar
or
junit:junit:jar.relative.someSuffix=../../../.m2/repository/junit/junit/4.8.2/junit-4.8.2.jar
http://bitstrings.github.com/sites/dependencypath-maven-plugin/index.html
(home:bitstrings.org)The m2e connector will soon be released too.
11 20, 2011