<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>zeppelin-interpreter-parent</artifactId>
        <groupId>org.apache.zeppelin</groupId>
        <version>0.11.0-SNAPSHOT</version>
        <relativePath>../zeppelin-interpreter-parent/pom.xml</relativePath>
    </parent>

    <artifactId>spark-parent</artifactId>
    <packaging>pom</packaging>
    <name>Zeppelin: Spark Parent</name>
    <description>Zeppelin Spark Support</description>

    <properties>
        <datanucleus.rdbms.version>3.2.9</datanucleus.rdbms.version>
        <datanucleus.apijdo.version>3.2.6</datanucleus.apijdo.version>
        <datanucleus.core.version>3.2.10</datanucleus.core.version>

        <!-- spark versions -->
        <spark.version>3.1.2</spark.version>
        <protobuf.version>2.5.0</protobuf.version>
        <py4j.version>0.10.9</py4j.version>
        <spark.scala.version>2.12.7</spark.scala.version>
        <spark.scala.binary.version>2.12</spark.scala.binary.version>

        <scala.compile.version>${spark.scala.version}</scala.compile.version>

        <spark.archive>spark-${spark.version}</spark.archive>
        <spark.src.download.url>
            https://archive.apache.org/dist/spark/${spark.archive}/${spark.archive}.tgz
        </spark.src.download.url>
        <spark.bin.download.url>
            https://archive.apache.org/dist/spark/${spark.archive}/${spark.archive}-bin-without-hadoop.tgz
        </spark.bin.download.url>
    </properties>

    <modules>
        <module>interpreter</module>
        <module>spark-scala-parent</module>
        <module>scala-2.11</module>
        <module>scala-2.12</module>
        <module>scala-2.13</module>
        <module>spark-shims</module>
        <module>spark2-shims</module>
        <module>spark3-shims</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
