# 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.
#
org.gradle.parallel=true
# See https://github.com/gradle/gradle/pull/11358 , https://issues.apache.org/jira/browse/INFRA-14923
# repository.apache.org does not yet support .sha256 and .sha512 checksums
systemProp.org.gradle.internal.publish.checksums.insecure=true
kotlin.parallel.tasks.in.project=true

# This is version for Calcite Avatica itself
# Note: it should not include "-SNAPSHOT" as it is automatically added by build.gradle.kts
# Release version can be generated by using -Prelease or -Prc=<int> arguments
calcite.avatica.version=1.16.0

# The options below configures the use of local clone (e.g. testing development versions)
# You can pass un-comment it, or pass option -PlocalReleasePlugins, or -PlocalReleasePlugins=<path>
# localReleasePlugins=../vlsi-release-plugins
# enableMavenLocal=true
# Gradle metadata is not well supported in the build script, so it is disabled for now
# publishGradleMetadata=true

# Plugins
com.diffplug.gradle.spotless.version=3.25.0
com.github.johnrengelman.shadow.version=5.1.0
com.github.spotbugs.version=2.0.0
com.github.vlsi.vlsi-release-plugins.version=1.48.0
com.google.protobuf.version=0.8.10
de.thetaphi.forbiddenapis.version=2.7
org.jetbrains.gradle.plugin.idea-ext.version=0.5
org.nosphere.apache.rat.version=0.5.2
org.owasp.dependencycheck.version=5.2.2

# TODO
# error_prone_core.version=2.3.3
# docker-maven-plugin.version=1.2.0

# Tools
checkstyle.version=6.18
spotbugs.version=3.1.11
# For Checkstyle
hydromatic-toolbox.version=0.3

asm.version=7.1
bouncycastle.version=1.60
dropwizard-metrics.version=4.0.5
# We support Guava versions as old as 14.0.1 (the version used by Hive)
# but prefer more recent versions.
guava.version=14.0.1
hamcrest.version=1.3
hsqldb.version=2.4.1
h2.version=1.4.197
httpclient.version=4.5.9
httpcore.version=4.4.11
jackson.version=2.10.0
jcip-annotations.version=1.0-1
jcommander.version=1.72
jetty.version=9.4.15.v20190215
junit.version=4.12
kerby.version=1.1.1
mockito.version=2.23.4
protobuf.version=3.6.1
scott-data-hsqldb.version=0.1
servlet.version=4.0.1
slf4j.version=1.7.25
