import groovy.json.JsonOutput

/*
 * 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.
 */

plugins { id 'org.apache.beam.module' }

applyJavaNature()

def hive_version = "2.1.0"
def netty_version = "4.1.30.Final"

dependencies {
  provided project(path: ":sdks:java:extensions:sql", configuration: "shadow")
  provided project(path: ":sdks:java:io:hcatalog", configuration: "shadow")

  // Needed for HCatalogTableProvider tests,
  // they use HCat* types
  shadowTest "io.netty:netty-all:$netty_version"
  shadowTest("org.apache.hive.hcatalog:hive-hcatalog-core:$hive_version") {
    // Hive brings full Calcite 1.6 + Avatica with JDBC driver which
    // gets registered and gets started instead of ours
    exclude group: "org.apache.calcite", module:"calcite-avatica"
  }
}
