# 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.

groovyVersion = 2.5.21
# bundle version format: major('.'minor('.'micro('.'qualifier)?)?)? (first 3 only digits)
groovyBundleVersion = 2.5.21

# latest version which runs jdk 7
# we build under 8+ but test against 7
# we could explore further tricks if we are forced to upgrade gradle version (gradle scan at this version is still looking for bintray)
gradle_version=4.10.3

groovyJUnit_ms=512m
groovyJUnit_mx=1g
groovyJUnit_permSize=64m
groovyJUnit_maxPermSize=256m

javacMain_mx=512m
groovycMain_mx=1g
groovycTest_mx=1g

javaDoc_mx=1g
org.gradle.jvmargs=-Xms800m -Xmx1500m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+IgnoreUnrecognizedVMOptions

# enable the Gradle build cache
org.gradle.caching=true

# enable --parallel
org.gradle.parallel=true
