<?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/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>hop-assemblies-plugins</artifactId>
    <groupId>org.apache.hop</groupId>
    <version>2.4.0</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <packaging>pom</packaging>

  <artifactId>hop-assemblies-plugins-databases</artifactId>

  <name>Hop Assemblies Plugins Databases</name>
  <description />

  <modules>
    <module>greenplum-assemblies</module>
    <module>cockroachdb-assemblies</module>
    <module>postgresql-assemblies</module>
    <module>redshift-assemblies</module>
    <module>sybase-assemblies</module>
    <module>sybaseiq-assemblies</module>
    <module>vectorwise-assemblies</module>
    <module>vertica-assemblies</module>
    <module>teradata-assemblies</module>
    <module>universe-assemblies</module>
    <module>firebird-assemblies</module>
    <module>ingres-assemblies</module>
    <module>as400-assemblies</module>
    <module>db2-assemblies</module>
    <module>mariadb-assemblies</module>
    <module>infobright-assemblies</module>
    <module>derby-assemblies</module>
    <module>duckdb-assemblies</module>
    <module>monetdb-assemblies</module>
    <module>cache-assemblies</module>
    <module>exasol4-assemblies</module>
    <module>sqlbase-assemblies</module>
    <module>h2-assemblies</module>
    <module>hypersonic-assemblies</module>
    <module>informix-assemblies</module>
    <module>interbase-assemblies</module>
    <module>kingbasees-assemblies</module>
    <module>access-assemblies</module>
    <module>mssqlnative-assemblies</module>
    <module>mssql-assemblies</module>
    <module>mysql-assemblies</module>
    <module>netezza-assemblies</module>
    <module>oracle-assemblies</module>
    <module>oraclerdb-assemblies</module>
    <module>sapdb-assemblies</module>
    <module>sqlite-assemblies</module>
    <module>googlebigquery-assemblies</module>
    <module>snowflake-assemblies</module>
    <module>clickhouse-assemblies</module>
    <module>doris-assemblies</module>
    <module>generic-assemblies</module>
    <module>hive-assemblies</module>
  </modules>


</project>