<?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.axis2</groupId>
        <artifactId>axis2-transports</artifactId>
        <version>1.7.0-SNAPSHOT</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <groupId>org.apache.axis2</groupId>
    <artifactId>axis2-transport-jms</artifactId>
    <name>Apache Axis2 - Transport - JMS</name>
    <description>Apache Axis2 - JMS Transport</description>
    <packaging>bundle</packaging>

    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/axis/axis2/java/transports/trunk/modules/jms</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/axis/axis2/java/transports/trunk/modules/jms</developerConnection>
        <url>http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/jms</url>
    </scm>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.0</version>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>generate-test-resources</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <stripVersion>true</stripVersion>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>org.aspectj</groupId>
                                    <artifactId>aspectjweaver</artifactId>
                                    <outputDirectory>target/lib</outputDirectory>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <systemProperties>
                        <property>
                            <name>log4j.configuration</name>
                            <value>file:../../log4j.properties</value>
                        </property>
                    </systemProperties>
                    <argLine>-javaagent:target/lib/aspectjweaver.jar -Xms64m -Xmx128m</argLine>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>1.4.0</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-Name>${project.artifactId}</Bundle-Name>
                        <Bundle-Vendor>Apache Software Foundation</Bundle-Vendor>
                        <Bundle-Description>${project.description}</Bundle-Description>
                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                        <Export-Package>
                            org.apache.axis2.transport.jms.*;-split-package:=merge-last,
                        </Export-Package>
                        <Import-Package>
                            !javax.xml.namespace,
                            javax.xml.namespace; version=0.0.0,
                            *; resolution:=optional
                        </Import-Package>
                        <DynamicImport-Package>*</DynamicImport-Package>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-transport-base</artifactId>
            <version>${project.version}</version>
        </dependency>

      <dependency>
          <groupId>org.apache.axis2</groupId>
          <artifactId>axis2-transport-testkit</artifactId>
          <version>${project.version}</version>
          <scope>test</scope>
      </dependency>
      <dependency>
          <groupId>org.mockejb</groupId>
          <artifactId>mockejb</artifactId>
          <version>0.6-beta2</version>
          <scope>test</scope>
      </dependency>
      <dependency>
          <groupId>org.apache.qpid</groupId>
          <artifactId>qpid-broker</artifactId>
          <version>1.0-incubating-M2.1</version>
          <scope>test</scope>
      </dependency>
      <dependency>
          <groupId>org.apache.qpid</groupId>
          <artifactId>qpid-client</artifactId>
          <version>1.0-incubating-M2.1</version>
          <scope>test</scope>
      </dependency>
      <dependency>
          <groupId>org.apache.activemq</groupId>
          <artifactId>activemq-core</artifactId>
          <version>5.1.0</version>
          <scope>test</scope>
          <exclusions>
              <!-- We want to choose the JAF implementation ourselves -->
              <exclusion>
                  <groupId>javax.activation</groupId>
                  <artifactId>activation</artifactId>
              </exclusion>
          </exclusions>
      </dependency>

        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-jms_1.1_spec</artifactId>
            <version>${jms-1.1-spec.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-jta_1.0.1B_spec</artifactId>
            <version>${jta-spec.version}</version>
        </dependency>
        
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <repositories>
        <!-- this is for qpid -->
        <repository>
            <id>apache-incubating</id>
            <name>Apache Maven 2 Incubating Repository</name>
            <url>http://people.apache.org/repo/m2-incubating-repository/</url>
            <releases>
                <updatePolicy>never</updatePolicy>
            </releases>
            <snapshots>
                <updatePolicy>interval:60</updatePolicy>
            </snapshots>
        </repository>
    </repositories>
    
    <properties>
        <jms-1.1-spec.version>1.1</jms-1.1-spec.version>
        <jta-spec.version>1.0</jta-spec.version>
    </properties>

</project>
