\#!/bin/sh \# \# Copyright © 2015-2021 the original authors. \# \# Licensed 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 \# \# https://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. \# \#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\# \# \# Gradle start up script for POSIX generated by Gradle. \# \# Important for running: \# \# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is \# noncompliant, but you have some other compliant shell such as ksh or \# bash, then to run this script, type that shell name before the whole \# command line, like: \# \# ksh Gradle \# \# Busybox and similar reduced shells will NOT work, because this script \# requires all of these POSIX shell features: \# * functions; \# * expansions «#[[\$]]#var», «#[[\$]]#{var}», «#[[\$]]#{var:-default}», «#[[\$]]#{var+SET}», \# «#[[\$]]#{var\#prefix}», «#[[\$]]#{var%suffix}», and «#[[\$]]#( cmd )»; \# * compound commands having a testable exit status, especially «case»; \# * various built-in commands including «command», «set», and «ulimit». \# \# Important for patching: \# \# (2) This script targets any POSIX shell, so it avoids extensions provided \# by Bash, Ksh, etc; in particular arrays are avoided. \# \# The "traditional" practice of packing multiple parameters into a \# space-separated string is a well documented source of bugs and security \# problems, so this is (mostly) avoided, by progressively accumulating \# options in "#[[\$]]#@", and eventually passing that to Java. \# \# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, \# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; \# see the in-line comments for details. \# \# There are tweaks for specific operating systems such as AIX, CygWin, \# Darwin, MinGW, and NonStop. \# \# (3) This script is generated from the Groovy template \# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt \# within the Gradle project. \# \# You can find Gradle at https://github.com/gradle/gradle/. \# \#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\# \# Attempt to set APP_HOME \# Resolve links: #[[\$]]#0 may be a link app_path=#[[\$]]#0 \# Need this for daisy-chained symlinks. while APP_HOME=#[[\$]]#{app_path%"#[[\$]]#{app_path\#\#*/}"} \# leaves a trailing /; empty if no leading path [ -h "#[[\$]]#app_path" ] do ls=#[[\$]]#( ls -ld "#[[\$]]#app_path" ) link=#[[\$]]#{ls\#*' -> '} case #[[\$]]#link in \#( /*) app_path=#[[\$]]#link ;; \#( *) app_path=#[[\$]]#APP_HOME#[[\$]]#link ;; esac done APP_HOME=#[[\$]]#( cd "#[[\$]]#{APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" APP_BASE_NAME=#[[\$]]#{0\#\#*/} \# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' \# Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum warn () { echo "#[[\$]]#*" } >&2 die () { echo echo "#[[\$]]#*" echo exit 1 } >&2 \# OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false case "#[[\$]]#( uname )" in \#( CYGWIN* ) cygwin=true ;; \#( Darwin* ) darwin=true ;; \#( MSYS* | MINGW* ) msys=true ;; \#( NONSTOP* ) nonstop=true ;; esac CLASSPATH=#[[\$]]#APP_HOME/gradle/wrapper/gradle-wrapper.jar \# Determine the Java command to use to start the JVM. if [ -n "#[[\$]]#JAVA_HOME" ] ; then if [ -x "#[[\$]]#JAVA_HOME/jre/sh/java" ] ; then \# IBM's JDK on AIX uses strange locations for the executables JAVACMD=#[[\$]]#JAVA_HOME/jre/sh/java else JAVACMD=#[[\$]]#JAVA_HOME/bin/java fi if [ ! -x "#[[\$]]#JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: #[[\$]]#JAVA_HOME Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi \# Increase the maximum file descriptors if we can. if ! "#[[\$]]#cygwin" && ! "#[[\$]]#darwin" && ! "#[[\$]]#nonstop" ; then case #[[\$]]#MAX_FD in \#( max*) MAX_FD=#[[\$]]#( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case #[[\$]]#MAX_FD in \#( '' | soft) :;; \#( *) ulimit -n "#[[\$]]#MAX_FD" || warn "Could not set maximum file descriptor limit to #[[\$]]#MAX_FD" esac fi \# Collect all arguments for the java command, stacking in reverse order: \# * args from the command line \# * the main class name \# * -classpath \# * -D...appname settings \# * --module-path (only if needed) \# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. \# For Cygwin or MSYS, switch paths to Windows format before running java if "#[[\$]]#cygwin" || "#[[\$]]#msys" ; then APP_HOME=#[[\$]]#( cygpath --path --mixed "#[[\$]]#APP_HOME" ) CLASSPATH=#[[\$]]#( cygpath --path --mixed "#[[\$]]#CLASSPATH" ) JAVACMD=#[[\$]]#( cygpath --unix "#[[\$]]#JAVACMD" ) \# Now convert the arguments - kludge to limit ourselves to /bin/sh for arg do if case #[[\$]]#arg in \#( -*) false ;; \# don't mess with options \#( /?*) t=#[[\$]]#{arg\#/} t=/#[[\$]]#{t%%/*} \# looks like a POSIX filepath [ -e "#[[\$]]#t" ] ;; \#( *) false ;; esac then arg=#[[\$]]#( cygpath --path --ignore --mixed "#[[\$]]#arg" ) fi \# Roll the args list around exactly as many times as the number of \# args, so each arg winds up back in the position where it started, but \# possibly modified. \# \# NB: a `for` loop captures its iteration list before it begins, so \# changing the positional parameters here affects neither the number of \# iterations, nor the values presented in `arg`. shift \# remove old arg set -- "#[[\$]]#@" "#[[\$]]#arg" \# push replacement arg done fi \# Collect all arguments for the java command; \# * #[[\$]]#DEFAULT_JVM_OPTS, #[[\$]]#JAVA_OPTS, and #[[\$]]#GRADLE_OPTS can contain fragments of \# shell script including quotes and variable substitutions, so put them in \# double quotes to make sure that they get re-expanded; and \# * put everything else in single quotes, so that it's not re-expanded. set -- \ "-Dorg.gradle.appname=#[[\$]]#APP_BASE_NAME" \ -classpath "#[[\$]]#CLASSPATH" \ org.gradle.wrapper.GradleWrapperMain \ "#[[\$]]#@" \# Use "xargs" to parse quoted args. \# \# With -n1 it outputs one arg per line, with the quotes and backslashes removed. \# \# In Bash we could simply go: \# \# readarray ARGS < <( xargs -n1 <<<"#[[\$]]#var" ) && \# set -- "#[[\$]]#{ARGS[@]}" "#[[\$]]#@" \# \# but POSIX shell has neither arrays nor command substitution, so instead we \# post-process each arg (as a line of input to sed) to backslash-escape any \# character that might be a shell metacharacter, then use eval to reverse \# that process (while maintaining the separation between arguments), and wrap \# the whole thing up as a single "set" statement. \# \# This will of course break if any of these variables contains a newline or \# an unmatched quote. \# eval "set -- #[[\$]]#( printf '%s\n' "#[[\$]]#DEFAULT_JVM_OPTS #[[\$]]#JAVA_OPTS #[[\$]]#GRADLE_OPTS" | xargs -n1 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | tr '\n' ' ' )" '"#[[\$]]#@"' exec "#[[\$]]#JAVACMD" "#[[\$]]#@"