<?xml version="1.0" encoding="UTF-8"?>
<!-- 
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 * 
 * Licensed 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.
 */
 -->


<project>
  <!-- the version of maven's project object model -->

  <pomVersion>3</pomVersion>
  <!-- a unique name for this project -->

  <name>Web Services Commons : WS-Policy implemenation</name>
  <id>policy</id>
  <groupId>ws-commons</groupId>
  
  <!-- a short but descriptive name for the project -->

  <name>WS-Policy Implementation</name>
  <!-- The version of the project under development, e.g.
       1.1, 1.2, 2.0-SNAPSHOT -->

  <currentVersion>${policy.version}</currentVersion>
  <!-- details about the organization that 'owns' the project -->

  <organization>
    <name>Apache Software Foundation</name>
    <url>http://www.apache.org/</url>
  </organization>
  <!-- the year the project started -->

  <inceptionYear>2002</inceptionYear>
  <package>org.apache.policy</package>

  <!-- any mailing lists for the project -->

  <mailingLists/>
  <!-- who the developers are for the project -->

  <developers/>
  <!-- jar files the project is dependent on -->

    <dependencies>
        <dependency>
            <groupId>ws-commons</groupId>
            <artifactId>axiom</artifactId>
            <version>${axiom.version}</version>
        </dependency>
        <dependency>
            <groupId>${stax.impl.groupid}</groupId>
            <artifactId>${stax.impl.artifactid}</artifactId>
            <version>${stax.impl.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>stax</groupId>
            <artifactId>stax-api</artifactId>
            <version>${stax.api.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>${commons.logging.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
    </dependencies>
  <!-- build information for the project -->

  <build>
    <nagEmailAddress>general@ws.apache.org</nagEmailAddress>
    <sourceDirectory>src</sourceDirectory>
  </build>
</project>
