 ------
 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 exising 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 dependant 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/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>
-----

