<?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>
    <pomVersion>3</pomVersion>
    <extend>../../etc/project.xml</extend>

    <id>axis2-codegen</id>
    <name>Apache Axis 2.0 - Code Generation</name>
    <groupId>org.apache.axis2</groupId>
    <description>Axis2 Code Generation module</description>

    <dependencies>
       <dependency>
            <groupId>org.apache.ws.commons.axiom</groupId>
            <artifactId>axiom-api</artifactId>
            <version>${axiom.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-java2wsdl</artifactId>
            <version>${pom.currentVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ws.commons.axiom</groupId>
            <artifactId>axiom-impl</artifactId>
            <version>${axiom.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-kernel</artifactId>
            <version>${pom.currentVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-adb</artifactId>
            <version>${pom.currentVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ws.commons.schema</groupId>
            <artifactId>XmlSchema</artifactId>
            <version>${XmlSchema.version}</version>
        </dependency>
        <dependency>
            <groupId>xmlbeans</groupId>
            <artifactId>xbean</artifactId>
            <version>${xbean.version}</version>
            <type>jar</type>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>${activation.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>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>${commons.httpclient.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>httpcomponents-httpcore</groupId>
            <artifactId>jakarta-httpcore</artifactId>
            <version>${jakarta.httpcore.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency> 
        <dependency>
            <groupId>${stax.impl.groupid}</groupId>
            <artifactId>${stax.impl.artifactid}</artifactId>
            <version>${stax.impl.version}</version>
            <properties>
                <module>true</module>
            </properties>
            <url>http://dist.codehaus.org/stax/jars/</url>
        </dependency>
        <dependency>
            <groupId>stax</groupId>
            <artifactId>stax-api</artifactId>
            <version>${stax.api.version}</version>
            <properties>
                <module>true</module>
            </properties>
            <url>http://dist.codehaus.org/stax/jars/</url>
        </dependency>
        <dependency>
            <groupId>stax-utils</groupId>
            <artifactId>stax-utils</artifactId>
            <version>${stax_utils.version}</version>
        </dependency>
        <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
            <version>${wsdl4j.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>ant</groupId>
            <artifactId>ant</artifactId>
            <version>${ant.version}</version>
            <type>jar</type>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>xmlunit</groupId>
            <artifactId>xmlunit</artifactId>
            <version>${xmlunit.version}</version>
            <properties>
                <module>true</module>
            </properties>
            <url>http://www.ibiblio.org/maven/xmlunit/jars/</url>
        </dependency>
         <dependency>
            <groupId>annogen</groupId>
            <artifactId>annogen</artifactId>
            <version>${annogen.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>backport-util-concurrent</groupId>
            <artifactId>backport-util-concurrent</artifactId>
            <version>${backport_util_concurrent.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>org.apache.neethi</groupId>
            <artifactId>neethi</artifactId>
            <version>${neethi.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>jaxme</groupId>
            <artifactId>jaxme2</artifactId>
            <version>${jaxme.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>jaxme</groupId>
            <artifactId>jaxmejs</artifactId>
            <version>${jaxme.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>jaxme</groupId>
            <artifactId>jaxmeapi</artifactId>
            <version>${jaxme.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>jaxme</groupId>
            <artifactId>jaxmexs</artifactId>
            <version>${jaxme.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
	  <dependency>
            <groupId>incubator-woden</groupId>
            <artifactId>woden</artifactId>
            <version>${woden.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>

    </dependencies>

    <reports/>
    <!-- add the build properties-->
    <build>
        <resources>
            <resource>
                <directory>src</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                    <include>**/*.xsl</include>
                    <include>**/*.xsd</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>
