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