<?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>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.tuscany.sca</groupId>
        <artifactId>tuscany-itest</artifactId>
        <version>2.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <packaging>pom</packaging>
    <artifactId>itest-jms</artifactId>
    <name>Apache Tuscany SCA iTest JMS</name>
    

    <dependencies>

        <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-base-runtime-pom</artifactId>
            <type>pom</type>
            <version>2.0-SNAPSHOT</version>
        </dependency> 

        <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-binding-jms-runtime</artifactId>
            <version>2.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-core</artifactId>
            <version>5.2.0</version>
        </dependency>

        <dependency>
            <groupId>xmlunit</groupId>
            <artifactId>xmlunit</artifactId>
            <version>1.2</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

  <modules>
    <module>args</module>
    <module>callbacks</module>
    <module>defaults</module>
    <module>DynamicReplyQ</module>
    <module>exceptions</module>
    <module>exceptions1</module>
    <module>externalBroker</module>
    <module>format-jmsbytes</module>
    <module>format-jmsbytesxml</module>
    <module>format-jmsdefault</module>
    <module>format-jmsmessage</module>
    <module>format-jmsobject</module>
    <module>format-jmstext</module>
    <module>format-jmstextxml</module>
    <module>format-jmstextxmlinjmsobjectout</module>
    <module>non-sca-client</module>
    <module>noreplyto</module>
    <module>nulls</module>
    <module>oneway</module>
    <module>oneway-nocf</module>
    <module>policy-headers</module>
    <module>properties</module>
    <module>responsecf</module>
    <module>rpc</module>
    <module>selectors</module>
    <module>topics</module>
    <module>ttl</module>
    <module>uri-rpc</module>

<!-- still to bring up in 2.x
    <module>definitions</module>
-->

  </modules>

</project>
