#
# 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=-Xmx1500m -XX:MaxMetaspaceSize=768m
org.gradle.parallel=true
# Build cache can be disabled with --no-build-cache option
org.gradle.caching=true
#org.gradle.caching.debug=true

kapt.include.compile.classpath=false

# 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.code.style=official

# See https://community.sonarsource.com/t/sonarscanner-for-gradle-you-can-now-decide-when-to-compile/102069/4
systemProp.sonar.gradle.skipCompile=true

# This is version for Apache JMeter 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
jmeter.version=5.6.3

# Plugins
com.github.vlsi.checksum-dependency.sha512=FAC41BF54A7C833BEAE9AB64083F6BEB3E1935BD6866C1B2F1D48FF926ABA4AECA53600FC3E41BE6ECBC87B73CE12F59C59836FB2E1DECC9408288060D66E988
com.github.vlsi.checksum-dependency.version=1.89
# Restrict uses of Kotlin APIs to 1.5 only, so projects that use Kotlin 1.5 can use JMeter
kotlin.api.version=1.5
# See https://kotlinlang.org/docs/whatsnew14.html#explicit-api-mode-for-library-authors
kotlin.explicitApi=true

# com.github.vlsi.gradle-extensions prints only failing or slow test results
slowTestLogThreshold=1000
slowSuiteLogThreshold=2000
