#
# 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=-XX:+UseG1GC -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

# 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.30.0
# This is a version to be used from Maven repository. It can be overridden by localAvatica below
calcite.avatica.version=1.20.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.76
com.google.protobuf.version=0.8.10
de.thetaphi.forbiddenapis.version=3.1
kotlin.version=1.5.31
net.ltgt.errorprone.version=1.3.0
me.champeau.gradle.jmh.version=0.5.3
org.jetbrains.gradle.plugin.idea-ext.version=0.5
org.nosphere.apache.rat.version=0.7.0
org.owasp.dependencycheck.version=6.1.6

# For now, we use Kotlin for tests only, so we don't want to include kotlin-stdlib dependency to the runtimeClasspath
# See https://kotlinlang.org/docs/gradle.html#dependency-on-the-standard-library
kotlin.stdlib.default.dependency=false

# 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 19.0 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
byte-buddy.version=1.9.3
cassandra-all.version=4.0.1
cassandra-java-driver-core.version=4.13.0
cassandra-unit.version=4.3.1.0
chinook-data-hsqldb.version=0.1
commons-codec.version=1.13
commons-dbcp2.version=2.6.0
commons-io.version=2.11.0
commons-lang3.version=3.8
commons-pool2.version=2.6.2
dropwizard-metrics.version=4.0.5

# do not upgrade this, new versions are Category X license.
elasticsearch.version=7.10.2
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=2.1.210
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
immutables.version=2.8.8
innodb-java-reader.version=1.0.10
jackson-databind.version=2.9.10.1
jackson.version=2.10.0
janino.version=3.1.6
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.7.0
jsr305.version=3.0.2
jsoup.version=1.11.3
junit4.version=4.12
junit5.version=5.8.1
kafka-clients.version=2.1.1
kerby.version=1.1.1
log4j2.version=2.17.1
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.17.1
quidem.version=0.10
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.12.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
