<?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>

    <prerequisites>
        <maven>3.0</maven>
    </prerequisites>
    <modules>
        <module>data-orchestrator</module>
        <module>data-resource-management-service</module>
        <module>loadtesting-utilities</module>
        <module>data-resource-management-service/drms-graph-impl</module>
        <module>data-resource-management-service/drms-rdbms-impl</module>
        <module>data-resource-management-service/drms-rdbms-impl/drms-server</module>
    </modules>

    <parent>
        <groupId>org.apache</groupId>
        <artifactId>apache</artifactId>
        <version>23</version>
    </parent>

    <groupId>org.apache.airavata.data.lake</groupId>
    <artifactId>airavata-data-lake</artifactId>
    <packaging>pom</packaging>
    <name>Airavata Data Lake</name>
    <version>0.01-SNAPSHOT</version>

    <url>http://airavata.apache.org/</url>
    <inceptionYear>2020</inceptionYear>

    <issueManagement>
        <url>https://issues.apache.org/jira/browse/AIRAVATA</url>
    </issueManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.plugin}</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                    <compilerVersion>11</compilerVersion>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>


    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${org.slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-1.2-api</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
    </dependencies>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <org.slf4j.version>1.7.25</org.slf4j.version>
        <log4j2.version>2.16.0</log4j2.version>
        <thrift.version>0.12.0</thrift.version>
        <openjpa.version>2.4.3</openjpa.version>
        <mysql.connector.version>5.1.34</mysql.connector.version>
        <maven.assembly.plugin>3.3.0</maven.assembly.plugin>
        <junit.version>4.8.1</junit.version>
        <jmockit.version>1.8</jmockit.version>
        <javax.annotation.version>1.3.2</javax.annotation.version>

        <maven.compiler.plugin>3.8.1</maven.compiler.plugin>

        <protobuf.maven.plugin>0.5.1</protobuf.maven.plugin>
        <os.maven.plugin>1.5.0.Final</os.maven.plugin>
        <javax.annotation>1.3.2</javax.annotation>
        <consul.client>1.3.8</consul.client>
        <h2>1.4.191</h2>
        <protobuf.java>3.10.0</protobuf.java>
        <grpc.spring.boot>3.5.1</grpc.spring.boot>
        <spring.boot.data.jpa>2.2.1.RELEASE</spring.boot.data.jpa>
        <log4j.over.slf4j>1.7.26</log4j.over.slf4j>
        <dozer>5.5.1</dozer>
        <jsch>0.1.55</jsch>
        <sshj>0.27.0</sshj>
        <mariadb.jdbc>2.5.1</mariadb.jdbc>
        <custos.clients.version>1.1-SNAPSHOT</custos.clients.version>
        <io.grpc.version>1.25.0</io.grpc.version>
        <google.common.protos>1.17.0</google.common.protos>
        <io.micrometer.version>1.3.1</io.micrometer.version>
        <brave.version>5.9.1</brave.version>
        <grpc.services>1.25.0</grpc.services>
        <docker.image.prefix>apachecustos</docker.image.prefix>
        <docker.image.repo>custos</docker.image.repo>
        <docker.plugin.version>1.4.13</docker.plugin.version>

        <helm.maven.plugin.version>2.8.0</helm.maven.plugin.version>
        <maven.assembly.plugin.version>3.2.0</maven.assembly.plugin.version>

        <mysql.connector.java>8.0.18</mysql.connector.java>
        <javax.persistance>1.0.2</javax.persistance>

        <keycloak.admin.version>7.0.0</keycloak.admin.version>

        <reasteasy.client.version>3.0.14.Final</reasteasy.client.version>

        <com.google.protobuf.util>3.11.3</com.google.protobuf.util>

        <springfox.swagger.version>2.9.2</springfox.swagger.version>
        <org.wso2.charon>3.3.16</org.wso2.charon>
        <jaxb.version>2.1</jaxb.version>

        <kube.java.client.version>5.0.0</kube.java.client.version>

        <testng.version>6.8</testng.version>
        <org.json.version>20190722</org.json.version>

        <apache.rat.plugin.version>0.13</apache.rat.plugin.version>

        <maven.surefile.plugin.version>3.0.0-M4</maven.surefile.plugin.version>

        <log.back.version>1.2.5</log.back.version>

        <com.jcraft.version>0.1.55</com.jcraft.version>

        <io.commons.version>2.7</io.commons.version>

        <com.codahale.version>0.7.0</com.codahale.version>

        <neo4j.ogm.version>3.2.25</neo4j.ogm.version>
        <neo4j.version>4.3.2</neo4j.version>
        <io.grpc.version>1.25.0</io.grpc.version>
        <spring-security.version>5.3.4.RELEASE</spring-security.version>
        <kafka-clients.version>1.0.0</kafka-clients.version>
        <snakeyaml.version>1.15</snakeyaml.version>

        <yaml.version>1.15</yaml.version>
        <spring.boot.version>2.4.5</spring.boot.version>
        <commons.beanutils.version>1.9.4</commons.beanutils.version>
        <docker.java.version>3.2.11</docker.java.version>
        <jackson.version>2.11.4</jackson.version>
        <commons.io.version>2.6</commons.io.version>

        <mysql.connector.java>8.0.18</mysql.connector.java>
        <javax.persistance>1.0.2</javax.persistance>

    </properties>

</project>
