<?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/xsd/maven-4.0.0.xsd">
   <parent>
      <artifactId>artemis-pom</artifactId>
      <groupId>org.apache.activemq</groupId>
      <version>2.10.1</version>
      <relativePath>..</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>

   <properties>
      <activemq.basedir>${project.basedir}/..</activemq.basedir>
      <javax.annotation.version>1.3.2</javax.annotation.version>
   </properties>

   <artifactId>artemis-cdi-client</artifactId>
   <name>ActiveMQ Artemis CDI Integration</name>

   <dependencies>
      <dependency>
         <groupId>org.jboss.logging</groupId>
         <artifactId>jboss-logging-processor</artifactId>
         <scope>provided</scope>
         <optional>true</optional>
      </dependency>
      <dependency>
         <groupId>org.jboss.logging</groupId>
         <artifactId>jboss-logging-annotations</artifactId>
         <scope>provided</scope>
         <optional>true</optional>
      </dependency>
      <dependency>
         <groupId>org.jboss.logging</groupId>
         <artifactId>jboss-logging</artifactId>
      </dependency>
      <dependency>
         <groupId>org.jboss.logmanager</groupId>
         <artifactId>jboss-logmanager</artifactId>
      </dependency>
      <dependency>
          <groupId>org.wildfly.common</groupId>
          <artifactId>wildfly-common</artifactId>
      </dependency>
      <dependency>
         <groupId>org.apache.activemq</groupId>
         <artifactId>artemis-core-client</artifactId>
         <version>${project.version}</version>
      </dependency>
      <dependency>
         <groupId>org.apache.activemq</groupId>
         <artifactId>artemis-jms-client</artifactId>
         <version>${project.version}</version>
      </dependency>
      <dependency>
         <groupId>org.apache.activemq</groupId>
         <artifactId>artemis-server</artifactId>
         <version>${project.version}</version>
      </dependency>
      <dependency>
         <groupId>org.apache.activemq</groupId>
         <artifactId>artemis-jms-server</artifactId>
         <version>${project.version}</version>
      </dependency>
      <dependency>
         <groupId>javax.inject</groupId>
         <artifactId>javax.inject</artifactId>
      </dependency>
      <dependency>
         <groupId>javax.annotation</groupId>
         <artifactId>javax.annotation-api</artifactId>
         <version>${javax.annotation.version}</version>
      </dependency>
      <dependency>
         <groupId>javax.enterprise</groupId>
         <artifactId>cdi-api</artifactId>
      </dependency>
      <dependency>
         <groupId>org.jboss.arquillian.junit</groupId>
         <artifactId>arquillian-junit-core</artifactId>
      </dependency>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
      </dependency>
      <dependency>
         <groupId>org.apache.geronimo.specs</groupId>
         <artifactId>geronimo-jms_2.0_spec</artifactId>
      </dependency>
      <dependency>
         <groupId>org.jboss.shrinkwrap</groupId>
         <artifactId>shrinkwrap-api</artifactId>
         <version>1.2.6</version>
      </dependency>
      <dependency>
         <groupId>org.jboss.arquillian.junit</groupId>
         <artifactId>arquillian-junit-container</artifactId>
      </dependency>
   </dependencies>
   <profiles>
      <profile>
         <id>Weld</id>
         <activation>
            <activeByDefault>true</activeByDefault>
         </activation>
         <dependencies>
            <dependency>
               <groupId>org.jboss.weld.se</groupId>
               <artifactId>weld-se</artifactId>
            </dependency>
            <dependency>
               <groupId>org.jboss.arquillian.container</groupId>
               <artifactId>arquillian-weld-embedded</artifactId>
            </dependency>
         </dependencies>
      </profile>
      <profile>
         <id>OWB</id>
         <dependencies>
            <dependency>
               <groupId>org.apache.openwebbeans</groupId>
               <artifactId>openwebbeans-impl</artifactId>
            </dependency>
            <dependency>
               <groupId>org.apache.openwebbeans</groupId>
               <artifactId>openwebbeans-spi</artifactId>
            </dependency>
            <dependency>
               <groupId>org.apache.openwebbeans</groupId>
               <artifactId>openwebbeans-resource</artifactId>
            </dependency>
            <dependency>
               <groupId>org.apache.openwebbeans.arquillian</groupId>
               <artifactId>owb-arquillian-standalone</artifactId>
            </dependency>
            <dependency>
               <groupId>org.apache.geronimo.specs</groupId>
               <artifactId>geronimo-annotation_1.2_spec</artifactId>
            </dependency>
         </dependencies>
      </profile>
   </profiles>
</project>
