#
# 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
s3.build.cache=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.28.0
# This is a version to be used from Maven repository. It can be overridden by localAvatica below
calcite.avatica.version=1.18.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.autonomousapps.dependency-analysis.version=0.71.0
org.checkerframework.version=0.5.16
com.github.autostyle.version=3.0
com.github.burrunan.s3-build-cache.version=1.2
com.github.johnrengelman.shadow.version=5.1.0
com.github.spotbugs.version=2.0.0
com.github.vlsi.vlsi-release-plugins.version=1.72
com.google.protobuf.version=0.8.10
de.thetaphi.forbiddenapis.version=3.1
kotlin.version=1.3.50
net.ltgt.errorprone.version=1.3.0
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=6.1.6

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

# Tools
checkerframework.version=3.10.0
checkstyle.version=8.28
spotbugs.version=3.1.11
errorprone.version=2.5.1
# The property is used in https://github.com/wildfly/jandex regression testing, so avoid renaming
jandex.version=2.2.3.Final

# 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.13
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
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
innodb-java-reader.version=1.0.10
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=3.3.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.11.0
teradata.tpcds.version=1.2
testcontainers.version=1.15.1
tpch.version=1.0
uzaygezen.version=0.2
xalan.version=2.7.1
xercesImpl.version=2.9.1
