 ------
 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>
-----

