<?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.activemq</groupId>
      <artifactId>artemis-pom</artifactId>
      <version>1.5.0-SNAPSHOT</version>
      <relativePath>../../pom.xml</relativePath>
   </parent>

   <artifactId>artemis-vertx-integration</artifactId>
   <packaging>jar</packaging>
   <name>ActiveMQ Artemis Vert.x Integration</name>

  <properties>

    <activemq.basedir>${project.basedir}/../..</activemq.basedir>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <!-- Set pullInDeps to true if you want any modules specified in the 'includes' and 'deploys' fields
    in your mod.json to be automatically pulled in during packaging and added inside your module. Doing this means your
    module won't download and install those dependencies at run-time when they're first requested. -->
    <vertx.pullInDeps>false</vertx.pullInDeps>

    <!-- Set createFatJar to true if you want to create a fat executable jar which contains the Vert.x binaries
    along with the module so it can be run with java -jar <jarname> -->
    <vertx.createFatJar>false</vertx.createFatJar>

    <!--Vertx module name-->
    <module.name>${project.groupId}~${project.artifactId}~${project.version}</module.name>

    <!-- The directory where the module will be assembled - you can override this on the command line
    with -Dmods.directory=mydir -->
    <mods.directory>target/mods</mods.directory>

    <!--Dependency versions-->
    <vertx.version>2.1.2</vertx.version>
    <vertx.testtools.version>2.0.3-final</vertx.testtools.version>
    <junit.version>4.11</junit.version>

    <!--Plugin versions-->
    <maven.compiler.plugin.version>3.0</maven.compiler.plugin.version>
    <maven.resources.plugin.version>2.6</maven.resources.plugin.version>
    <maven.clean.plugin.version>2.5</maven.clean.plugin.version>
    <maven.vertx.plugin.version>2.0.8-final</maven.vertx.plugin.version>
    <maven.surefire.plugin.version>2.14</maven.surefire.plugin.version>
    <maven.failsafe.plugin.version>2.14</maven.failsafe.plugin.version>
    <maven.surefire.report.plugin.version>2.14</maven.surefire.report.plugin.version>
    <maven.javadoc.plugin.version>2.9</maven.javadoc.plugin.version>
    <maven.dependency.plugin.version>2.7</maven.dependency.plugin.version>
  </properties>

  <repositories>
    <repository>
      <id>sonatype-nexus-snapshots</id>
      <url>https://oss.sonatype.org/content/repositories/public</url>
    </repository>
  </repositories>

  <dependencies>
     <dependency>
        <groupId>org.jboss.logging</groupId>
        <artifactId>jboss-logging-processor</artifactId>
        <scope>provided</scope>
        <optional>true</optional>
     </dependency>

      <!--
          JBoss Logging
      -->
      <dependency>
         <groupId>org.jboss.logging</groupId>
         <artifactId>jboss-logging</artifactId>
      </dependency>
      <dependency>
         <groupId>org.apache.activemq</groupId>
         <artifactId>artemis-server</artifactId>
         <version>${project.version}</version>
      </dependency>

    <!--Vertx provided dependencies-->
    <dependency>
      <groupId>io.vertx</groupId>
      <artifactId>vertx-core</artifactId>
      <version>${vertx.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>io.vertx</groupId>
      <artifactId>vertx-platform</artifactId>
      <version>${vertx.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>io.vertx</groupId>
      <artifactId>vertx-hazelcast</artifactId>
      <version>${vertx.version}</version>
      <scope>provided</scope>
    </dependency>
    <!--Test dependencies-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.vertx</groupId>
      <artifactId>testtools</artifactId>
      <version>${vertx.testtools.version}</version>
      <scope>test</scope>
    </dependency>

    <!-- Add any other dependencies that you want packaged into your module (in the lib dir) here
    as 'compile' dependencies. Here is an example
    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-core</artifactId>
      <version>1.3</version>
      <scope>compile</scope>
    </dependency>
    -->

  </dependencies>

</project>
