#############################
#  Local developer settings #
#############################
#
# The first invocation of any task in Solr gradlew will generate and save this project-local 'gradle.properties' file.
# This file contains the defaults you may (but don't have to) tweak for your particular hardware (or taste). Note there
# are certain settings in that file that may be _required_ at runtime for certain plugins (an example is the spotless/
# google java format plugin, which requires adding custom exports to JVM modules). gradlew only generates this file
# if it's not already present (it never overwrites the defaults) -- occasionally you may have to manually delete (or move)
# this file and regenerate from scratch.
#
# This is an overview of some of these settings.
#
###############
# Parallelism #
###############
#
# Gradle build can run tasks in parallel but by default it consumes all CPU cores which
# is too optimistic a default for Solr tests. You can disable the parallelism
# entirely or assign it a 'low' priority with these properties:
#
# org.gradle.parallel=[true, false]
# org.gradle.priority=[normal, low]
#
# The default level of parallelism is computed based on the number of cores on
# your machine (on the first run of gradle build). By default these are fairly conservative
# settings (half the number of cores for workers, for example):
#
# org.gradle.workers.max=[X]
# tests.jvms=[N <= X]
#
# The number of test JVMs can be lower than the number of workers: this just means
# that two projects can run tests in parallel to saturate all the workers. The I/O and memory
# bandwidth limits will kick in quickly so even if you have a very beefy machine bumping
# it too high may not help.
#
# You can always override these settings locally using command line as well:
# gradlew -Ptests.jvms=N --max-workers=X
#
#############
# Test JVMS #
#############
#
# Test JVMs have their own set of arguments which can be customized. These are configured
# separately from the gradle workers, for example:
#
# tests.jvms=3
# tests.heapsize=512m
# tests.minheapsize=512m
# tests.jvmargs=-XX:+UseParallelGC -XX:TieredStopAtLevel=1 -XX:ActiveProcessorCount=1
#
#################
# Gradle Daemon #
#################
#
# The gradle daemon is a background process that keeps an evaluated copy of the project
# structure, some caches, etc. It speeds up repeated builds quite a bit but if you don't
# like the idea of having a (sizeable) background process running in the background,
# disable it.
#
# org.gradle.daemon=[true, false]
# org.gradle.jvmargs=...
#############################################################################################

# UTF-8 as standard file encoding
systemProp.file.encoding=UTF-8

# Set up gradle JVM defaults.
#
# We also open up internal compiler modules for spotless/ google java format.
org.gradle.jvmargs=-Xmx1g -XX:TieredStopAtLevel=1 -XX:+UseParallelGC -XX:ActiveProcessorCount=1 \
 --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \
 --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \
 --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \
 --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \
 --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED

# Run at normal priority, in parallel
org.gradle.parallel=true
org.gradle.priority=normal

# This setting enables local task output caches. This will speed up
# your local builds in most cases but will also consume disk space in your
# gradle home. See SOLR-15603 for details.
# org.gradle.caching=true

# Silence gradle warnings. We'll deal with them when we upgrade the wrapper.
org.gradle.warning.mode=none

# You may disable the background daemon if it consumes too much memory.
org.gradle.daemon=true
# timeout after 15 mins of inactivity.
org.gradle.daemon.idletimeout=900000

# Maximum number of parallel gradle workers.
org.gradle.workers.max=@MAX_WORKERS@

# Maximum number of test JVMs forked per test task.
tests.jvms=@TEST_JVMS@

# Disable auto JVM provisioning (we don't use toolchains yet but want no surprises).
org.gradle.java.installations.auto-download=false
