#
# 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 -Xmx1g -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.38.0
# This is a version to be used from Maven repository. It can be overridden by localAvatica below
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
# 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.90
com.google.protobuf.version=0.8.10
de.thetaphi.forbiddenapis.version=3.5.1
jacoco.version=0.8.10
kotlin.version=1.7.10
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
org.sonarqube.version=3.5.0.2730
com.gradle.enterprise.version=3.13.2
com.gradle.common-custom-user-data-gradle-plugin.version=1.10


# 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 21.0 but prefer more recent versions.
# elasticsearch does not like asm:6.2.1+
aggdesigner-algorithm.version=6.0
apiguardian-api.version=1.1.2
arrow-gandiva.version=15.0.0
arrow.version=15.0.0
asm.version=7.2
byte-buddy.version=1.9.3
cassandra-all.version=4.1.3
cassandra-java-driver-core.version=4.17.0
cassandra-unit.version=4.3.1.0
chinook-data-hsqldb.version=0.2
commons-codec.version=1.16.0
commons-dbcp2.version=2.11.0
commons-io.version=2.15.0
commons-lang3.version=3.13.0
commons-math3.version=3.6.1
commons-pool2.version=2.12.0
commons-collections4.version=4.4
commons-text.version=1.11.0
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
jts-core.version=1.19.0
jts-io-common.version=1.19.0
proj4j.version=1.2.2
foodmart-data-hsqldb.version=0.5
foodmart-data-json.version=0.4
foodmart-queries.version=0.4.1
geode-core.version=1.15.1
guava.version=32.1.3-jre
h2.version=2.1.210
hadoop.version=2.7.5
hamcrest-date.version=2.0.4
hamcrest.version=2.1
hsqldb.version=2.7.2
httpclient.version=4.5.9
httpcore.version=4.4.11
hutool-all.version=5.8.23
hydromatic.tpcds.version=0.4
immutables.version=2.8.8
innodb-java-reader.version=1.0.10
jackson-databind.version=2.15.0
jackson.version=2.15.0
janino.version=3.1.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.46.v20220331
jmh.version=1.12
jna.version=5.14.0
jna-platform.version=5.14.0
joda-time.version=2.8.1
json-path.version=2.9.0
jsr305.version=3.0.2
jsoup.version=1.11.3
junit4.version=4.13.2
junit5.version=5.9.1
kafka-clients.version=2.1.1
kerby.version=1.1.1
log4j2.version=2.17.1
mockito.version=2.23.4
mongodb-driver-sync.version=4.10.2
# 1.43.0 is the last version with Java 8 support
mongo-java-server.version=1.43.0
mysql-connector-java.version=5.1.20
natty.version=0.13
ojdbc8.version=19.3.0.0
opencsv.version=2.3
oshi-core.version=6.4.9
pig.version=0.16.0
pigunit.version=0.16.0
postgresql.version=9.3-1102-jdbc41
protobuf.version=3.21.5
quidem.version=0.11
scala-library.version=2.10.3
scott-data-hsqldb.version=0.2
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
sql-logic-test.version=0.3
teradata.tpcds.version=1.2
testcontainers.version=1.19.3
tpch.version=1.0
uzaygezen.version=0.2
xalan.version=2.7.1
xercesImpl.version=2.9.1

# sonar properties
systemProp.sonar.organization=apache
systemProp.sonar.projectKey=apache_calcite
systemProp.sonar.host.url=https://sonarcloud.io
