<?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>

  <groupId>org.apache.qpid</groupId>
  <artifactId>qpid-interop-test-parent</artifactId>
  <packaging>pom</packaging>
  <version>0.2.0-rc1</version>
  <url>https://qpid.apache.org</url>
  <name>Qpid Interop Test</name>
  <description>Qpid client interoperability test suite for AMQP 1.0 clients</description>

  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>18</version>
  </parent>

  <issueManagement>
    <url>https://issues.apache.org/jira/browse/QPIDIT</url>
    <system>JIRA</system>
  </issueManagement>

  <scm>
    <connection>scm:git:http://git-wip-us.apache.org/repos/asf/qpid-interop-test.git</connection>
    <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/qpid-interop-test.git</developerConnection>
    <url>https://git-wip-us.apache.org/repos/asf?p=qpid-interop-test.git</url>
  </scm>

  <properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <maven-assembly-plugin-version>2.6</maven-assembly-plugin-version>
    
    <!-- Dependency versions -->
    <geronimo.jms.2.spec-version>1.0-alpha-2</geronimo.jms.2.spec-version>
    <json-version>1.1</json-version>
    <qpid-jms-client-version>0.25.0</qpid-jms-client-version>
    <slf4j-version>1.7.25</slf4j-version>
    
  </properties>

  <modules>
    <module>shims/qpid-jms</module>
    <module>utils</module>
  </modules>
  
  <dependencyManagement>
    <dependencies>
	  <dependency>
	    <groupId>org.apache.geronimo.specs</groupId>
	    <artifactId>geronimo-jms_2.0_spec</artifactId>
	    <version>${geronimo.jms.2.spec-version}</version>
	  </dependency>
	  <dependency>
	    <groupId>javax.json</groupId>
	    <artifactId>javax.json-api</artifactId>
	    <version>${json-version}</version>
	  </dependency>
	  <dependency>
	    <groupId>org.glassfish</groupId>
	    <artifactId>javax.json</artifactId>
	    <version>${json-version}</version>
	  </dependency>
	  <dependency>
	    <groupId>org.apache.qpid</groupId>
	    <artifactId>qpid-jms-client</artifactId>
	    <version>${qpid-jms-client-version}</version>
	  </dependency>
	  <dependency>
	    <groupId>org.slf4j</groupId>
	    <artifactId>slf4j-nop</artifactId>
	    <version>${slf4j-version}</version>
	  </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <optimize>true</optimize>
          <debug>true</debug>
          <showDeprecation>true</showDeprecation>
          <showWarnings>true</showWarnings>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
