#
# 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.25.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
# localAutostyle=../autostyle
# enableMavenLocal=true
# Gradle metadata is not well supported in the build script, so it is disabled for now
# publishGradleMetadata=true

# Plugins
com.github.autostyle.version=3.0
com.github.johnrengelman.shadow.version=8.0.0
com.github.spotbugs.version=2.0.0
com.github.vlsi.vlsi-release-plugins.version=1.90
com.google.protobuf.version=0.8.12
de.thetaphi.forbiddenapis.version=3.4
org.jetbrains.gradle.plugin.idea-ext.version=0.5
org.nosphere.apache.rat.version=0.8.0
org.owasp.dependencycheck.version=5.2.2

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

# Tools
checkerframework.version=3.10.0
checkstyle.version=10.3.2
jdk8.checkstyle.version=9.3
spotbugs.version=3.1.11

asm.version=7.1
bouncycastle.version=1.70
bytebuddy.version=1.14.10
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=32.1.1-jre
hamcrest.version=1.3
hsqldb.version=2.4.1
h2.version=1.4.197
httpclient5.version=5.2.1
httpcore5.version=5.2.3
jackson.version=2.15.2
jcip-annotations.version=1.0-1
jcommander.version=1.72
jetty.version=9.4.44.v20210927
junit.version=4.12
kerby.version=1.1.1
log4j2.version=2.17.1
mockito.version=4.11.0
protobuf.version=3.21.9
scott-data-hsqldb.version=0.1
servlet.version=4.0.1
slf4j.version=1.7.25
