<!--

    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">
  <modelVersion>4.0.0</modelVersion>
  <packaging>pom</packaging>
  <parent>
    <groupId>org.apache.pulsar</groupId>
    <artifactId>pulsar</artifactId>
    <version>2.9.4</version>
  </parent>

  <artifactId>pulsar-io</artifactId>
  <name>Pulsar IO :: Parent</name>

  <profiles>
    <profile>
      <id>main</id>
      <activation>
        <property>
          <name>disableIoMainProfile</name>
          <!-- always active unless true is passed as a value -->
          <value>!true</value>
        </property>
      </activation>
      <modules>
        <module>core</module>
        <module>batch-discovery-triggerers</module>
        <module>batch-data-generator</module>
        <module>common</module>
        <module>docs</module>
        <module>aws</module>
        <module>twitter</module>
        <module>cassandra</module>
        <module>aerospike</module>
        <module>kafka</module>
        <module>rabbitmq</module>
        <module>kinesis</module>
        <module>hdfs3</module>
        <module>jdbc</module>
        <module>data-generator</module>
        <module>elastic-search</module>
        <module>kafka-connect-adaptor</module>
        <module>kafka-connect-adaptor-nar</module>
        <module>debezium</module>
        <module>hdfs2</module>
        <module>canal</module>
        <module>file</module>
        <module>netty</module>
        <module>hbase</module>
        <module>mongo</module>
        <module>flume</module>
        <module>redis</module>
        <module>solr</module>
        <module>influxdb</module>
        <module>dynamodb</module>
        <module>nsq</module>
      </modules>
    </profile>

    <profile>
      <id>core-modules</id>
      <modules>
        <module>core</module>
        <module>batch-discovery-triggerers</module>
        <module>batch-data-generator</module>
        <module>common</module>
        <module>twitter</module>
        <module>cassandra</module>
        <module>data-generator</module>
      </modules>
    </profile>

  </profiles>

</project>
