<?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.helix.recipes</groupId>
    <artifactId>recipes</artifactId>
    <version>1.0.3</version>
  </parent>

  <artifactId>rabbitmq-consumer-group</artifactId>
  <packaging>bundle</packaging>
  <name>Apache Helix :: Recipes :: Rabbitmq Consumer Group</name>

  <properties>
    <osgi.import>
      org.apache.helix*,
      org.slf4j*;version="[1.7,2)",
      org.apache.logging.log4j*;version="[2.17,3)",
      org.apache.logging.slf4j*;version="[2.17,3)",
      *
    </osgi.import>
    <osgi.export>org.apache.helix.recipes.rabbitmq*;version="${project.version};-noimport:=true</osgi.export>
  </properties>

  <dependencies>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.32</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <version>2.17.1</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>6.0.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.helix</groupId>
      <artifactId>helix-core</artifactId>
    </dependency>
    <dependency>
      <groupId>com.rabbitmq</groupId>
      <artifactId>amqp-client</artifactId>
      <version>2.8.7</version>
    </dependency>
    <dependency>
      <groupId>com.101tec</groupId>
      <artifactId>zkclient</artifactId>
      <version>0.5</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>appassembler-maven-plugin</artifactId>
        <configuration>
          <!-- Extra JVM arguments that will be included in the bin scripts -->
          <!-- -D flag is a failsafe to address https://nvd.nist.gov/vuln/detail/CVE-2021-44228 -->
          <extraJvmArguments>-Dlog4j2.formatMsgNoLookups=true -Dlog4j2.configurationFile=file://"$BASEDIR"/conf/log4j2.properties</extraJvmArguments>
          <programs>
            <program>
              <mainClass>org.apache.helix.recipes.rabbitmq.SetupConsumerCluster</mainClass>
              <name>setup-cluster</name>
            </program>
            <program>
              <mainClass>org.apache.helix.recipes.rabbitmq.StartClusterManager</mainClass>
              <name>start-cluster-manager</name>
            </program>
            <program>
              <mainClass>org.apache.helix.recipes.rabbitmq.Consumer</mainClass>
              <name>start-consumer</name>
            </program>
            <program>
              <mainClass>org.apache.helix.recipes.rabbitmq.Emitter</mainClass>
              <name>send-message</name>
            </program>
          </programs>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
