<?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>0.3-SNAPSHOT</version>
    </parent>

    <groupId>org.apache.aries.samples.bank</groupId>
    <artifactId>bank</artifactId>
    <name>Apache Aries Bank Sample</name>
    <version>0.3-SNAPSHOT</version>
    <packaging>pom</packaging>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.aries.samples.bank</groupId>
                <artifactId>bank-api</artifactId>
                <version>${version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.aries.samples.bank</groupId>
                <artifactId>bank-biz</artifactId>
                <version>${version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.aries.samples.bank</groupId>
                <artifactId>bank-web</artifactId>
                <version>${version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.aries.samples.bank</groupId>
                <artifactId>bank-checkingAccount</artifactId>
                <version>${version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.aries.samples.bank</groupId>
                <artifactId>bank-checkingAccountBindings</artifactId>
                <version>${version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.aries.samples.bank</groupId>
                <artifactId>bank-creditCheck</artifactId>
                <version>${version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.aries.samples.bank</groupId>
                <artifactId>bank-creditCheckBindings</artifactId>
                <version>${version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.aries.samples.bank</groupId>
                <artifactId>bank-lineOfCreditAccount</artifactId>
                <version>${version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.aries.samples.bank</groupId>
                <artifactId>bank-lineOfCreditAccountBindings</artifactId>
                <version>${version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <modules>
		<module>bank-api</module>
		<module>bank-biz</module>
		<module>bank-chequingAccount</module>
		<module>bank-chequingAccountBindings</module>
		<module>bank-creditCheck</module>
		<module>bank-creditCheckBindings</module>
		<module>bank-lineOfCreditAccount</module>
		<module>bank-lineOfCreditAccountBindings</module>
		<module>bank-web</module>
		<module>bank-assembly</module>
    </modules>

</project>
