-
Notifications
You must be signed in to change notification settings - Fork 0
/
unixStartScript.txt
179 lines (157 loc) · 5.76 KB
/
unixStartScript.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#!/bin/sh
#
#
##############################################################################
# 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:-./}${appHomeRelativePath}" && pwd -P ) || exit
APP_NAME="${applicationName}"
APP_BASE_NAME=\${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and ${optsEnvironmentVar} to pass JVM options to this script.
DEFAULT_JVM_OPTS=${defaultJvmOpts}
# 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=$classpath
<% if ( mainClassName.startsWith('--module ') ) { %>
MODULE_PATH=$modulePath
<% } %>
# 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 ${optsEnvironmentVar} 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" )
<% if ( mainClassName.startsWith('--module ') ) { %> MODULE_PATH=\$( cygpath --path --mixed "\$MODULE_PATH" )<% } %>
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 \$${optsEnvironmentVar} 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 -- \\
<% if ( appNameSystemProperty ) {
%> "-D${appNameSystemProperty}=\$APP_BASE_NAME" \\
<% } %> -classpath "\$CLASSPATH" \\
<% if ( mainClassName.startsWith('--module ') ) {
%> --module-path "\$MODULE_PATH" \\
<% } %> ${mainClassName} \\
"\$@"
# 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 \$${optsEnvironmentVar}" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\\\&~g; ' |
tr '\\n' ' '
)" '"\$@"'
exec "\$JAVACMD" "\$@"