Skip to content

Commit 8f39f84

Browse files
committed
Update universalJavaApplicationStub
1 parent 704d8ce commit 8f39f84

File tree

1 file changed

+85
-34
lines changed

1 file changed

+85
-34
lines changed

src/main/resources/mac/universalJavaApplicationStub

Lines changed: 85 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
# #
1212
# @author Tobias Fischer #
1313
# @url https://github.com/tofi86/universalJavaApplicationStub #
14-
# @date 2021-01-07 #
15-
# @version 3.1.0 #
14+
# @date 2021-02-21 #
15+
# @version 3.2.0 #
1616
# #
1717
##################################################################################
1818
# #
@@ -166,6 +166,8 @@ if [ $exitcode -eq 0 ]; then
166166
JavaFolder="${AppleJavaFolder}"
167167
ResourcesFolder="${AppleResourcesFolder}"
168168

169+
# set expandable variables
170+
APP_ROOT="${AppPackageFolder}"
169171
APP_PACKAGE="${AppPackageFolder}"
170172
JAVAROOT="${AppleJavaFolder}"
171173
USER_HOME="$HOME"
@@ -180,9 +182,10 @@ if [ $exitcode -eq 0 ]; then
180182
# AppPackageRoot is the standard WorkingDirectory when the script is started
181183
WorkingDirectory="${AppPackageRoot}"
182184
fi
183-
# expand variables $APP_PACKAGE, $JAVAROOT, $USER_HOME
185+
# expand variables $APP_PACKAGE, $APP_ROOT, $JAVAROOT, $USER_HOME
184186
WorkingDirectory=$(eval echo "${WorkingDirectory}")
185187

188+
186189
# read the MainClass name
187190
JVMMainClass="$(plist_get_java ':MainClass')"
188191

@@ -202,7 +205,7 @@ if [ $exitcode -eq 0 ]; then
202205
else
203206
JVMClassPath=${JVMClassPath_RAW}
204207
fi
205-
# expand variables $APP_PACKAGE, $JAVAROOT, $USER_HOME
208+
# expand variables $APP_PACKAGE, $APP_ROOT, $JAVAROOT, $USER_HOME
206209
JVMClassPath=$(eval echo "${JVMClassPath}")
207210

208211
# read the JVM Options in either Array or String style
@@ -212,7 +215,7 @@ if [ $exitcode -eq 0 ]; then
212215
else
213216
JVMDefaultOptions=${JVMDefaultOptions_RAW}
214217
fi
215-
# expand variables $APP_PACKAGE, $JAVAROOT, $USER_HOME (#84)
218+
# expand variables $APP_PACKAGE, $APP_ROOT, $JAVAROOT, $USER_HOME (#84)
216219
JVMDefaultOptions=$(eval echo "${JVMDefaultOptions}")
217220

218221
# read StartOnMainThread and add as -XstartOnFirstThread
@@ -248,7 +251,11 @@ else
248251
ResourcesFolder="${OracleResourcesFolder}"
249252
WorkingDirectory="${OracleJavaFolder}"
250253

254+
# set expandable variables
251255
APP_ROOT="${AppPackageFolder}"
256+
APP_PACKAGE="${AppPackageFolder}"
257+
JAVAROOT="${OracleJavaFolder}"
258+
USER_HOME="$HOME"
252259

253260
# read the MainClass name
254261
JVMMainClass="$(plist_get ':JVMMainClassName')"
@@ -266,12 +273,12 @@ else
266273
JVMClassPath_RAW=$(plist_get ':JVMClassPath')
267274
if [[ $JVMClassPath_RAW == *Array* ]] ; then
268275
JVMClassPath=.$(plist_get ':JVMClassPath' | grep " " | sed 's/^ */:/g' | tr -d '\n' | xargs)
269-
# expand variables $APP_PACKAGE, $JAVAROOT, $USER_HOME
276+
# expand variables $APP_PACKAGE, $APP_ROOT, $JAVAROOT, $USER_HOME
270277
JVMClassPath=$(eval echo "${JVMClassPath}")
271278

272279
elif [[ ! -z ${JVMClassPath_RAW} ]] ; then
273280
JVMClassPath=${JVMClassPath_RAW}
274-
# expand variables $APP_PACKAGE, $JAVAROOT, $USER_HOME
281+
# expand variables $APP_PACKAGE, $APP_ROOT, $JAVAROOT, $USER_HOME
275282
JVMClassPath=$(eval echo "${JVMClassPath}")
276283

277284
else
@@ -280,8 +287,11 @@ else
280287
# Do NOT expand the default 'AppName.app/Contents/Java/*' classpath (#42)
281288
fi
282289

283-
# read the JVM Default Options
290+
# read the JVM Default Options by parsing the :JVMDefaultOptions <dict>
291+
# and pulling all <string> values starting with a dash (-)
284292
JVMDefaultOptions=$(plist_get ':JVMDefaultOptions' | grep -o " \-.*" | tr -d '\n' | xargs)
293+
# expand variables $APP_PACKAGE, $APP_ROOT, $JAVAROOT, $USER_HOME (#99)
294+
JVMDefaultOptions=$(eval echo "${JVMDefaultOptions}")
285295

286296
# read the Main Arguments from JVMArguments key as an array and retain spaces (see #46 for naming details)
287297
IFS=$'\t\n'
@@ -299,7 +309,6 @@ else
299309
fi
300310

301311
# read JVM options from file
302-
JVMOptionsFile=$(eval echo "${JVMOptionsFile}")
303312
[ -f $JVMOptionsFile ] && while read -r option; do JVMDefaultOptions+=" $option"; done <<< $(sed "/^#.*$/d" $JVMOptionsFile)
304313

305314
# (#75) check for undefined icons or icon names without .icns extension and prepare
@@ -324,14 +333,14 @@ fi
324333
stub_logger "[JavaRequirement] JVM minimum version: ${JVMVersion}"
325334
stub_logger "[JavaRequirement] JVM maximum version: ${JVMMaxVersion}"
326335

327-
# MainArgs: replace occurences of $APP_ROOT with its content
336+
# MainArgs: expand variables $APP_PACKAGE, $APP_ROOT, $JAVAROOT, $USER_HOME
328337
MainArgsArr=()
329338
for i in "${MainArgs[@]}"
330339
do
331340
MainArgsArr+=("$(eval echo "$i")")
332341
done
333342

334-
# JVMOptions: replace occurences of $APP_ROOT with its content
343+
# JVMOptions: expand variables $APP_PACKAGE, $APP_ROOT, $JAVAROOT, $USER_HOME
335344
JVMOptionsArr=()
336345
for i in "${JVMOptions[@]}"
337346
do
@@ -342,11 +351,34 @@ done
342351
# internationalized messages
343352
############################################
344353

345-
LANG=$(defaults read -g AppleLocale)
346-
stub_logger "[Language] $LANG"
354+
# supported languages / available translations
355+
stubLanguages="^(fr|de|zh|es|en)-"
356+
357+
# read user preferred languages as defined in macOS System Preferences (#101)
358+
stub_logger '[LanguageSearch] Checking preferred languages in macOS System Preferences...'
359+
appleLanguages=($(defaults read -g AppleLanguages | grep '\s"' | tr -d ',' | xargs))
360+
stub_logger "[LanguageSearch] ... found [${appleLanguages[*]}]"
347361

348-
# French localization
349-
if [[ $LANG == fr* ]] ; then
362+
language=""
363+
for i in "${appleLanguages[@]}"
364+
do
365+
langValue="${i%-*}"
366+
if [[ "$i" =~ $stubLanguages ]]; then
367+
stub_logger "[LanguageSearch] ... selected '$i' ('$langValue') as the default language for the launcher stub"
368+
language=${langValue}
369+
break
370+
fi
371+
done
372+
if [ -z "${language}" ]; then
373+
language="en"
374+
stub_logger "[LanguageSearch] ... selected fallback 'en' as the default language for the launcher stub"
375+
fi
376+
stub_logger "[Language] $language"
377+
378+
379+
case "${language}" in
380+
# French
381+
fr)
350382
MSG_ERROR_LAUNCHING="ERREUR au lancement de '${CFBundleName}'."
351383
MSG_MISSING_MAINCLASS="'MainClass' n'est pas spécifié.\nL'application Java ne peut pas être lancée."
352384
MSG_JVMVERSION_REQ_INVALID="La syntaxe de la version de Java demandée est invalide: %s\nVeuillez contacter le développeur de l'application."
@@ -359,9 +391,10 @@ if [[ $LANG == fr* ]] ; then
359391
MSG_LATER="Plus tard"
360392
MSG_VISIT_JAVA_DOT_COM="Java by Oracle"
361393
MSG_VISIT_ADOPTOPENJDK="Java by AdoptOpenJDK"
394+
;;
362395

363-
# German localization
364-
elif [[ $LANG == de* ]] ; then
396+
# German
397+
de)
365398
MSG_ERROR_LAUNCHING="FEHLER beim Starten von '${CFBundleName}'."
366399
MSG_MISSING_MAINCLASS="Die 'MainClass' ist nicht spezifiziert!\nDie Java-Anwendung kann nicht gestartet werden!"
367400
MSG_JVMVERSION_REQ_INVALID="Die Syntax der angeforderten Java-Version ist ungültig: %s\nBitte kontaktieren Sie den Entwickler der App."
@@ -374,9 +407,10 @@ elif [[ $LANG == de* ]] ; then
374407
MSG_LATER="Später"
375408
MSG_VISIT_JAVA_DOT_COM="Java von Oracle"
376409
MSG_VISIT_ADOPTOPENJDK="Java von AdoptOpenJDK"
410+
;;
377411

378-
# Simplifyed Chinese localization
379-
elif [[ $LANG == zh* ]] ; then
412+
# Simplified Chinese
413+
zh)
380414
MSG_ERROR_LAUNCHING="无法启动 '${CFBundleName}'."
381415
MSG_MISSING_MAINCLASS="没有指定 'MainClass'!\nJava程序无法启动!"
382416
MSG_JVMVERSION_REQ_INVALID="Java版本参数语法错误: %s\n请联系该应用的开发者。"
@@ -389,9 +423,10 @@ elif [[ $LANG == zh* ]] ; then
389423
MSG_LATER="稍后"
390424
MSG_VISIT_JAVA_DOT_COM="Java by Oracle"
391425
MSG_VISIT_ADOPTOPENJDK="Java by AdoptOpenJDK"
426+
;;
392427

393-
# Spanish localization
394-
elif [[ $LANG == es* ]] ; then
428+
# Spanish
429+
es)
395430
MSG_ERROR_LAUNCHING="ERROR iniciando '${CFBundleName}'."
396431
MSG_MISSING_MAINCLASS="¡'MainClass' no especificada!\n¡La aplicación Java no puede iniciarse!"
397432
MSG_JVMVERSION_REQ_INVALID="La sintaxis de la versión Java requerida no es válida: %s\nPor favor, contacte con el desarrollador de la aplicación."
@@ -404,9 +439,10 @@ elif [[ $LANG == es* ]] ; then
404439
MSG_LATER="Más tarde"
405440
MSG_VISIT_JAVA_DOT_COM="Java de Oracle"
406441
MSG_VISIT_ADOPTOPENJDK="Java de AdoptOpenJDK"
442+
;;
407443

408-
# English default localization
409-
else
444+
# English default
445+
en|*)
410446
MSG_ERROR_LAUNCHING="ERROR launching '${CFBundleName}'."
411447
MSG_MISSING_MAINCLASS="'MainClass' isn't specified!\nJava application cannot be started!"
412448
MSG_JVMVERSION_REQ_INVALID="The syntax of the required Java version is invalid: %s\nPlease contact the App developer."
@@ -419,7 +455,8 @@ else
419455
MSG_LATER="Later"
420456
MSG_VISIT_JAVA_DOT_COM="Java by Oracle"
421457
MSG_VISIT_ADOPTOPENJDK="Java by AdoptOpenJDK"
422-
fi
458+
;;
459+
esac
423460

424461

425462

@@ -535,19 +572,27 @@ if [ -n "$JAVA_HOME" ] ; then
535572
if [[ $JAVA_HOME == /* ]] ; then
536573
# if "$JAVA_HOME" starts with a Slash it's an absolute path
537574
JAVACMD="$JAVA_HOME/bin/java"
575+
stub_logger "[JavaSearch] ... parsing JAVA_HOME as absolute path to the executable '$JAVACMD'"
538576
else
539577
# otherwise it's a relative path to "$AppPackageFolder"
540578
JAVACMD="$AppPackageFolder/$JAVA_HOME/bin/java"
579+
stub_logger "[JavaSearch] ... parsing JAVA_HOME as relative path inside the App bundle to the executable '$JAVACMD'"
541580
fi
542581
JAVACMD_version=$(get_comparable_java_version $(get_java_version_from_cmd "${JAVACMD}"))
543582
else
544-
stub_logger "[JavaSearch] ... didn't found JAVA_HOME"
583+
stub_logger "[JavaSearch] ... haven't found JAVA_HOME"
545584
fi
546585

547586

548587
# check for any other or a specific Java version
549588
# also if $JAVA_HOME exists but isn't executable
550589
if [ -z "${JAVACMD}" ] || [ ! -x "${JAVACMD}" ] ; then
590+
591+
# add a warning in the syslog if JAVA_HOME is not executable or not found (#100)
592+
if [ -n "$JAVA_HOME" ] ; then
593+
stub_logger "[JavaSearch] ... but no 'java' executable was found at the JAVA_HOME location!"
594+
fi
595+
551596
stub_logger "[JavaSearch] Searching for JavaVirtualMachines on the system ..."
552597
# reset variables
553598
JAVACMD=""
@@ -584,15 +629,18 @@ if [ -z "${JAVACMD}" ] || [ ! -x "${JAVACMD}" ] ; then
584629
javaCounter=$(/usr/libexec/PlistBuddy -c "Print" /dev/stdin <<< $javaXml | grep "Dict" | wc -l | tr -d ' ')
585630

586631
# iterate over all Dict entries
587-
for idx in $(seq 0 $((javaCounter - 1)))
588-
do
589-
version=$(/usr/libexec/PlistBuddy -c "print :$idx:JVMVersion" /dev/stdin <<< $javaXml)
590-
path=$(/usr/libexec/PlistBuddy -c "print :$idx:JVMHomePath" /dev/stdin <<< $javaXml)
591-
path+="/bin/java"
592-
allJVMs+=("$version:$path")
593-
done
594-
# unset for loop variables
595-
unset version path
632+
# but only if there are any JVMs at all (#93)
633+
if [ "$javaCounter" -gt "0" ] ; then
634+
for idx in $(seq 0 $((javaCounter - 1)))
635+
do
636+
version=$(/usr/libexec/PlistBuddy -c "print :$idx:JVMVersion" /dev/stdin <<< $javaXml)
637+
path=$(/usr/libexec/PlistBuddy -c "print :$idx:JVMHomePath" /dev/stdin <<< $javaXml)
638+
path+="/bin/java"
639+
allJVMs+=("$version:$path")
640+
done
641+
# unset for loop variables
642+
unset version path
643+
fi
596644

597645
# add SDKMAN! java versions (#95)
598646
if [ -d ~/.sdkman/candidates/java/ ] ; then
@@ -825,6 +873,9 @@ fi
825873
cd "${WorkingDirectory}" || exit 13
826874
stub_logger "[WorkingDirectory] ${WorkingDirectory}"
827875

876+
# invoke bootstrap script
877+
$Bootstrap=$ResourcesFolder/scripts/bootstrap && [ -x "$Bootstrap" ] && $Bootstrap
878+
828879
# execute Java and set
829880
# - classpath
830881
# - splash image

0 commit comments

Comments
 (0)