blob: 385336d142815098362e23abbeeceba1b0c45255 [file] [log] [blame]
------
Pom
------
Brett Porter
Hervé Boutemy
Paul Gier
------
2009-05-06
------
~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements. See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership. The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License. You may obtain a copy of the License at
~~
~~ http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied. See the License for the
~~ specific language governing permissions and limitations
~~ under the License.
~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html
Introduction
The pom task can be used in one of two ways, either to read an existing pom file
(typically pom.xml), or to define an in memory pom object. Either technique
can be used to resolve build dependencies, build the project classpath, and/or
define project properties.
Reading an existing POM file
An example pom is provided here:
-----
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.project</groupId>
<artifactId>project-model</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.codehaus.modello</groupId>
<artifactId>modello-core</artifactId>
<version>1.0-alpha-2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
-----
These elements represent:
* <modelVersion> - this is the version of the POM layout in use, currently <<<4.0.0>>>.
* <groupId> - the group ID represents your organisation and project name, much like a Java package name.
This must be universally unique. This becomes the base directory in the repository as well.
* <artifactId> - the artifact ID represents the current build unit. It usually equals the filename of the
resulting file, and must be unique within the group.
* <version> - the version of the artifact you are building.
* <dependencies> - the artifacts that this project is dependent on.
This is all that is required for most projects. However, it is also possible to use other fields available in
Maven to describe your project, and reference them from your build script.
Once the pom file is created, it can be read by the pom task.
-----
<artifact:pom id="mypom" file="pom.xml" />
-----
Defining a POM in Ant
If a POM file is not available, the ant task can also be used to define an in-memory pom.
----
<artifact:pom id="mypom" groupId="org.acme" artifactId="project1" version="1.0">
<dependency groupId="junit" artifactId="junit" version="4.1"/>
<dependency groupId="org.codehaus.plexus" artifactId="plexus-utils" version="1.5.5"/>
<license name="apache" url="http://www.apache.org"/>
</artifact:pom>
----
Accessing POM information
To access a part of the POM as an Ant property, you must define it as a reference. For example, to access the version from a POM,
you can use the following:
-----
<artifact:pom id="mypom" file="pom.xml" />
<echo>The version is ${mypom.version}</echo>
-----
You can also access nested parts of the POM. For example, you can read the default value of the <<<directory>>>
element within the <<<build>>> element using a <<<.>>> separator.
-----
<artifact:pom id="mypom" file="pom.xml" />
<echo>The build directory is ${mypom.build.directory}</echo>
-----
For more information on the elements available in the POM, see the
{{{http://maven.apache.org/ref/current/maven-model/maven.html} descriptor reference}}.
Accessing dependencies in the POM
The <<<pom>>> task can be used in combination with the <<<dependencies>>> task to declare a list of dependencies.
-----
<artifact:pom id="mypom" file="pom.xml" />
<artifact:dependencies filesetId="mydeps" pomRefId="mypom" />
-----
In this example, the <<<dependencies>>> task will resolve the list of dependencies in the pom
and add them to the fileset.
Using profiles in the POM
POM profiles can be activated or deactivated using the nested profile element. For example
to activate a profile called <<<my-profile>>>.
-----
<artifact:pom id="maven.project" file="pom.xml">
<profile id="my-profile"/>
</artifact:pom>
-----
This can also be used to deactivate a POM profile that is active by default.
-----
<artifact:pom id="maven.project" file="pom.xml">
<profile id="my-default-profile" active="false"/>
</artifact:pom>
-----