#
# 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 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.version=1.24.0
# This is a version to be used from Maven repository. It can be overridden by localAvatica below
calcite.avatica.version=1.17.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
# localAvatica=../calcite-avatica

# By default, Maven Local repository is not used
# 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=5.1.0
com.github.spotbugs.version=2.0.0
com.github.vlsi.vlsi-release-plugins.version=1.70
com.google.protobuf.version=0.8.10
de.thetaphi.forbiddenapis.version=2.7
kotlin.version=1.3.50
me.champeau.gradle.jmh.version=0.5.0
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=8.27
spotbugs.version=3.1.11

# We support Guava versions as old as 14.0.1 (the version used by Hive)
# but prefer more recent versions.
# elasticsearch does not like asm:6.2.1+
aggdesigner-algorithm.version=6.0
apiguardian-api.version=1.1.0
asm.version=7.2
bouncycastle.version=1.60
cassandra-all.version=3.11.2
cassandra-driver-core.version=3.6.0
cassandra-unit.version=3.5.0.1
chinook-data-hsqldb.version=0.1
commons-codec.version=1.12
commons-dbcp2.version=2.6.0
commons-io.version=2.4
commons-lang3.version=3.8
dropwizard-metrics.version=4.0.5
elasticsearch.version=7.0.1
embedded-redis.version=0.6
esri-geometry-api.version=2.2.0
findbugs.jsr305.version=3.0.1
foodmart-data-hsqldb.version=0.3
foodmart-data-json.version=0.4
foodmart-queries.version=0.4.1
geode-core.version=1.10.0
guava.version=19.0
h2.version=1.4.197
hadoop.version=2.7.5
hamcrest-date.version=2.0.4
hamcrest.version=2.1
hsqldb.version=2.4.1
httpclient.version=4.5.9
httpcore.version=4.4.11
hydromatic.tpcds.version=0.4
jackson-databind.version=2.9.10.1
jackson.version=2.10.0
janino.version=3.0.11
java-diff.version=1.1.2
jcip-annotations.version=1.0-1
jcommander.version=1.72
jedis.version=2.9.0
jetty.version=9.4.15.v20190215
jmh.version=1.12
jna.version=5.5.0
joda-time.version=2.8.1
json-path.version=2.4.0
jsoup.version=1.11.3
junit4.version=4.12
junit5.version=5.6.0-M1
kafka-clients.version=2.1.1
kerby.version=1.1.1
log4j.version=1.2.17
log4j2.version=2.11.0
mockito.version=2.23.4
mongo-java-driver.version=3.10.2
mongo-java-server.version=1.16.0
mysql-connector-java.version=5.1.20
natty.version=0.13
ojdbc8.version=19.3.0.0
opencsv.version=2.3
pig.version=0.16.0
pigunit.version=0.16.0
postgresql.version=9.3-1102-jdbc41
protobuf.version=3.6.1
quidem.version=0.9
scala-library.version=2.10.3
scott-data-hsqldb.version=0.1
servlet.version=4.0.1
sketches-core.version=0.9.0
slf4j.version=1.7.25
spark.version=2.2.2
sqlline.version=1.9.0
teradata.tpcds.version=1.2
tpch.version=0.1
xalan.version=2.7.1
xercesImpl.version=2.9.1
