<!--

    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-io</artifactId>
    <version>2.10.6-SNAPSHOT</version>
  </parent>

  <artifactId>pulsar-io-debezium</artifactId>
  <name>Pulsar IO :: Debezium</name>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.wildfly.security</groupId>
        <artifactId>wildfly-elytron-sasl-digest</artifactId>
        <version>${wildfly-elytron.version}</version>
      </dependency>
      <dependency>
        <groupId>org.wildfly.security</groupId>
        <artifactId>wildfly-elytron-sasl-external</artifactId>
        <version>${wildfly-elytron.version}</version>
      </dependency>
      <dependency>
        <groupId>org.wildfly.security</groupId>
        <artifactId>wildfly-elytron-sasl-gs2</artifactId>
        <version>${wildfly-elytron.version}</version>
      </dependency>
      <dependency>
        <groupId>org.wildfly.security</groupId>
        <artifactId>wildfly-elytron-sasl-oauth2</artifactId>
        <version>${wildfly-elytron.version}</version>
      </dependency>
      <dependency>
        <groupId>org.wildfly.security</groupId>
        <artifactId>wildfly-elytron-sasl-plain</artifactId>
        <version>${wildfly-elytron.version}</version>
      </dependency>
      <dependency>
        <groupId>org.wildfly.security</groupId>
        <artifactId>wildfly-elytron-sasl-scram</artifactId>
        <version>${wildfly-elytron.version}</version>
      </dependency>
      <dependency>
        <groupId>org.wildfly.security</groupId>
        <artifactId>wildfly-elytron-password-impl</artifactId>
        <version>${wildfly-elytron.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <modules>
    <module>core</module>
    <module>mysql</module>
    <module>postgres</module>
    <module>mongodb</module>
    <module>oracle</module>
    <module>mssql</module>
  </modules>

</project>
