#
# 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.jvmargs=-Xmx512m -XX:MaxMetaspaceSize=512m
org.gradle.parallel=true
# Build cache can be disabled with --no-build-cache option
org.gradle.caching=true
#org.gradle.caching.debug=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.26.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.7.0
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.28
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=29.0-jre
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
log4j2.version=2.13.3
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=1.0
uzaygezen.version=0.2
xalan.version=2.7.1
xercesImpl.version=2.9.1
