/*
 * 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(
  automaticModuleName: 'org.apache.beam.sdks.extensions.sql.expansion',
  validateShadowJar: false,
  shadowClosure: {
    manifest {
      attributes "Main-Class": "org.apache.beam.sdk.expansion.service.ExpansionService"
    }
  }
)

configurations.runtimeClasspath {
  // Pin avro to 1.11.4 due to https://github.com/apache/beam/issues/34968
  // cannot upgrade this to the latest version due to https://github.com/apache/beam/issues/34993
  resolutionStrategy.force 'org.apache.avro:avro:1.11.4'
}

description = "Apache Beam :: SDKs :: Java :: SQL :: Expansion Service"
ext.summary = """Contains code to run a SQL Expansion Service."""


dependencies {
  implementation project(path: ":sdks:java:core", configuration: "shadow")
  implementation project(path: ":sdks:java:expansion-service")
  permitUnusedDeclared project(path: ":sdks:java:expansion-service") // BEAM-11761
  implementation project(path: ":sdks:java:extensions:sql")
  implementation library.java.vendored_guava_32_1_2_jre

}

task runExpansionService (type: JavaExec) {
  mainClass = "org.apache.beam.sdk.expansion.service.ExpansionService"
  classpath = sourceSets.main.runtimeClasspath
  args = [project.findProperty("constructionService.port") ?: "8097"]
}

shadowJar {
  manifest {
    attributes(["Multi-Release": true])
  }
}
