<?xml version="1.0" encoding="UTF-8"?>
<!--
    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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.aries.samples</groupId>
        <artifactId>samples</artifactId>
        <version>1.0.1-SNAPSHOT</version>
    </parent>

    <groupId>org.apache.aries.samples.ariestrader</groupId>
    <artifactId>ariestrader</artifactId>
    <name>AriesTrader :: Performance Benchmark Sample</name>
    <description>Java EE 5.0 Performance Benchmark Sample Application</description>
    <packaging>pom</packaging>

    <properties>
        <!-- set siteId to artifactId for any "top level" project rooting a website -->
        <siteId>ariestrader</siteId>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.aries.samples.ariestrader</groupId>
                <artifactId>modules</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.aries.samples.ariestrader</groupId>
                <artifactId>assemblies</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <modules>
        <!-- application components-->
        <module>modules</module>
        <!-- Installable assemblies -->
        <module>assemblies</module>
    </modules>

</project>
