<?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>hudi</artifactId>
    <groupId>org.apache.hudi</groupId>
    <version>0.11.0-rc1</version>
    <relativePath>../../../pom.xml</relativePath>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>hudi-hadoop-docker</artifactId>
  <packaging>pom</packaging>
  <modules>
    <module>base</module>
    <module>base_java11</module>
    <module>namenode</module>
    <module>datanode</module>
    <module>historyserver</module>
    <module>hive_base</module>
    <module>spark_base</module>
    <module>sparkmaster</module>
    <module>sparkworker</module>
    <module>sparkadhoc</module>
    <module>prestobase</module>
    <module>trinobase</module>
    <module>trinocoordinator</module>
    <module>trinoworker</module>
  </modules>

  <dependencies>
    <dependency>
      <groupId>org.apache.hudi</groupId>
      <artifactId>hudi-spark${sparkbundle.version}-bundle_${scala.binary.version}</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>

  <properties>
    <skipITs>false</skipITs>
    <docker.build.skip>true</docker.build.skip>
    <docker.spark.version>2.4.4</docker.spark.version>
    <docker.hive.version>2.3.3</docker.hive.version>
    <docker.hadoop.version>2.8.4</docker.hadoop.version>
    <docker.presto.version>0.271</docker.presto.version>
    <docker.trino.version>368</docker.trino.version>
    <dockerfile.maven.version>1.4.13</dockerfile.maven.version>
    <checkstyle.skip>true</checkstyle.skip>
    <main.basedir>${project.parent.basedir}</main.basedir>
  </properties>

  <build>
    <extensions>
      <extension>
        <groupId>com.spotify</groupId>
        <artifactId>dockerfile-maven-extension</artifactId>
        <version>${dockerfile.maven.version}</version>
      </extension>
    </extensions>
    <plugins>
     <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>dockerfile-maven-plugin</artifactId>
        <version>${dockerfile.maven.version}</version>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
