gradlew 7.86 KB
Newer Older
Daniel Wolf's avatar
Daniel Wolf committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/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.
#
Daniel Wolf's avatar
Daniel Wolf committed
18
19

##############################################################################
Daniel Wolf's avatar
Daniel Wolf committed
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#
#   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/.
#
Daniel Wolf's avatar
Daniel Wolf committed
63
64
65
##############################################################################

# Attempt to set APP_HOME
Daniel Wolf's avatar
Daniel Wolf committed
66

Daniel Wolf's avatar
Daniel Wolf committed
67
# Resolve links: $0 may be a link
Daniel Wolf's avatar
Daniel Wolf committed
68
69
70
71
72
73
74
75
76
77
78
79
80
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
Daniel Wolf's avatar
Daniel Wolf committed
81
done
Daniel Wolf's avatar
Daniel Wolf committed
82
83

APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
Daniel Wolf's avatar
Daniel Wolf committed
84
85

APP_NAME="Gradle"
Daniel Wolf's avatar
Daniel Wolf committed
86
APP_BASE_NAME=${0##*/}
Daniel Wolf's avatar
Daniel Wolf committed
87
88

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
Daniel Wolf's avatar
Daniel Wolf committed
89
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
Daniel Wolf's avatar
Daniel Wolf committed
90
91

# Use the maximum available, or set MAX_FD != -1 to use that value.
Daniel Wolf's avatar
Daniel Wolf committed
92
MAX_FD=maximum
Daniel Wolf's avatar
Daniel Wolf committed
93
94
95

warn () {
    echo "$*"
Daniel Wolf's avatar
Daniel Wolf committed
96
} >&2
Daniel Wolf's avatar
Daniel Wolf committed
97
98
99
100
101
102

die () {
    echo
    echo "$*"
    echo
    exit 1
Daniel Wolf's avatar
Daniel Wolf committed
103
} >&2
Daniel Wolf's avatar
Daniel Wolf committed
104
105
106
107
108
109

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
Daniel Wolf's avatar
Daniel Wolf committed
110
111
112
113
114
case "$( uname )" in                #(
  CYGWIN* )         cygwin=true  ;; #(
  Darwin* )         darwin=true  ;; #(
  MSYS* | MINGW* )  msys=true    ;; #(
  NONSTOP* )        nonstop=true ;;
Daniel Wolf's avatar
Daniel Wolf committed
115
116
117
118
esac

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar

Daniel Wolf's avatar
Daniel Wolf committed
119

Daniel Wolf's avatar
Daniel Wolf committed
120
121
122
123
# 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
Daniel Wolf's avatar
Daniel Wolf committed
124
        JAVACMD=$JAVA_HOME/jre/sh/java
Daniel Wolf's avatar
Daniel Wolf committed
125
    else
Daniel Wolf's avatar
Daniel Wolf committed
126
        JAVACMD=$JAVA_HOME/bin/java
Daniel Wolf's avatar
Daniel Wolf committed
127
128
129
130
131
132
133
134
    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
Daniel Wolf's avatar
Daniel Wolf committed
135
    JAVACMD=java
Daniel Wolf's avatar
Daniel Wolf committed
136
137
138
139
140
141
142
    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.
Daniel Wolf's avatar
Daniel Wolf committed
143
144
145
146
147
148
149
150
151
152
153
154
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
Daniel Wolf's avatar
Daniel Wolf committed
155
156
fi

Daniel Wolf's avatar
Daniel Wolf committed
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# 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" )
Daniel Wolf's avatar
Daniel Wolf committed
171
172

    # Now convert the arguments - kludge to limit ourselves to /bin/sh
Daniel Wolf's avatar
Daniel Wolf committed
173
174
175
176
177
178
179
180
181
182
    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" )
Daniel Wolf's avatar
Daniel Wolf committed
183
        fi
Daniel Wolf's avatar
Daniel Wolf committed
184
185
186
187
188
189
190
191
192
        # 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
Daniel Wolf's avatar
Daniel Wolf committed
193
194
195
    done
fi

Daniel Wolf's avatar
Daniel Wolf committed
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
# 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' ' '
    )" '"$@"'
Daniel Wolf's avatar
Daniel Wolf committed
233
234

exec "$JAVACMD" "$@"