<?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.3.2-SNAPSHOT</version>
  </parent>

  <artifactId>service-discovery</artifactId>
  <packaging>bundle</packaging>
  <name>Apache Helix :: Recipes :: service discovery</name>

  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <organization>
    <name>Apache Software Foundation</name>
    <url>http://www.apache.org</url>
  </organization>

  <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.servicediscovery*;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>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>6.0.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.helix</groupId>
      <artifactId>helix-core</artifactId>
    </dependency>
  </dependencies>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>appassembler-maven-plugin</artifactId>
          <configuration>
            <!-- Set the target configuration directory to be used in the bin scripts -->
            <!-- <configurationDirectory>conf</configurationDirectory> -->
            <!-- Copy the contents from "/src/main/config" to the target configuration
              directory in the assembled application -->
            <!-- <copyConfigurationDirectory>true</copyConfigurationDirectory> -->
            <!-- Include the target configuration directory in the beginning of
              the classpath declaration in the bin scripts -->
            <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
            <assembleDirectory>${project.build.directory}/${project.artifactId}-pkg</assembleDirectory>
            <!-- 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>-Xms512m -Xmx512m -Dlog4j2.formatMsgNoLookups=true -Dlog4j2.configurationFile=file://"$BASEDIR"/conf/log4j2.properties</extraJvmArguments>
            <!-- Generate bin scripts for windows and unix pr default -->
            <platforms>
              <platform>windows</platform>
              <platform>unix</platform>
            </platforms>
          </configuration>
          <executions>
            <execution>
              <phase>package</phase>
              <goals>
                <goal>assemble</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
            <configuration>
              <excludes combine.children="append">
              </excludes>
            </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>appassembler-maven-plugin</artifactId>
        <configuration>
          <programs>
            <program>
              <mainClass>org.apache.helix.servicediscovery.ServiceDiscoveryDemo</mainClass>
              <name>service-discovery-demo</name>
            </program>
          </programs>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
