# 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.

# This file contains project properties.
# More about how to use the gradle.properties file can be read here:
#   https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties

group = org.apache.kudu
url = https://kudu.apache.org/

# The Maven respository used when uploading artifacts.
mavenPublishUrl = https://repository.apache.org/service/local/staging/deploy/maven2

# Version passed to javac's -source, -target, and --release (Java 9+) parameters:
#
# -source Specifies the version of source code accepted.
# -target Generate class files that target a specified version of the VM. Class
#         files will run on the specified target and on later versions, but not
#         on earlier versions of the VM.
# --release (Java 9+) Configures the compiler to produce class files that will
#                     link against an implementation of the given platform version.
#                     (See http://openjdk.java.net/jeps/247)
javaCompatibility = 8

encoding = UTF-8
# Used by the scalafmt plugin because the encoding property can't be passed.
systemProp.file.encoding = UTF-8

# gpg-agent configuration for artifact signing.
# See https://docs.gradle.org/current/userguide/signing_plugin.html#sec:using_gpg_agent
signing.gnupg.executable = gpg
signing.gnupg.useLegacyGpg = true

# Maximum parallel forks to use while unit testing.
maxParallelForks = 1

# Warn about deprecated gradle usage
org.gradle.warning.mode = summary

# Flags to speed up the gradle build.
# https://guides.gradle.org/performance/
# https://docs.gradle.org/current/userguide/build_environment.html
org.gradle.daemon = true
org.gradle.parallel = true
#org.gradle.caching = true

# The below parameters are used in the `gradle wrapper` to generate `gradlew`
# and `gradle-wrapper.properties`
gradleDistUrlBase = https://services.gradle.org/distributions

# Leverages the wrapper jar checked into the gradle project on github because
# the jar isn't available elsewhere. Using raw.githubusercontent.com instead of
# github.com because github.com servers deprecated TLSv1/TLSv1.1 support some
# time ago, so older versions of curl (built against OpenSSL library that
# doesn't support TLSv1.2) would fail to fetch the jar.
# This jar doesn't change frequently and doesn't need to be updated to match
# the Gradle version to function properly.
wrapperBaseUrl = https://raw.githubusercontent.com/gradle/gradle/v6.8.3/gradle/wrapper

# Increase the default Java heap size for the build to avoid OOM issues.
# https://docs.gradle.org/current/userguide/build_environment.html#sec:configuring_jvm_memory
org.gradle.jvmargs=-Xmx1g -Dfile.encoding=UTF-8
