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

apply from: "${rootDir}/${scriptDir}/standard-subproject-configuration.gradle"

apply from: "${project.projectDir}/../gradle/publish-java.gradle"
apply from: "${project.projectDir}/../gradle/warnings.gradle"

dependencies {
  compile(platform(project(':boms:geode-all-bom')))
  implementation('org.apache.commons:commons-lang3')
  implementation('com.fasterxml.jackson.core:jackson-databind')
  implementation('com.fasterxml.jackson.core:jackson-core')
  implementation('com.fasterxml.jackson.core:jackson-annotations')
  implementation('org.springframework:spring-web')
  implementation('org.apache.httpcomponents:httpclient')

  compileOnly(project(':geode-common')) {
    exclude module: 'junit'
  }
  compileOnly('io.springfox:springfox-swagger2') {
    exclude module: 'slf4j-api'
    exclude module: "jackson-annotations"
  }

  testImplementation(project(':geode-common'))
  testImplementation(project(':geode-junit')) {
    exclude module: 'geode-core'
  }

  testCompileOnly(platform(project(':boms:geode-all-bom')))
  testCompileOnly('io.swagger:swagger-annotations')

  integrationTestImplementation(project(':geode-dunit'))
  integrationTestImplementation(project(':geode-junit'))
  integrationTestImplementation('junit:junit')
  integrationTestImplementation('org.awaitility:awaitility')
}
