<!--

    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.10.0-SNAPSHOT</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>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <executions>
          <execution>
            <id>checkstyle</id>
            <phase>verify</phase>
            <goals>
              <goal>check</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>
