11
11
# #
12
12
# @author Tobias Fischer #
13
13
# @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 #
16
16
# #
17
17
# #################################################################################
18
18
# #
@@ -166,6 +166,8 @@ if [ $exitcode -eq 0 ]; then
166
166
JavaFolder=" ${AppleJavaFolder} "
167
167
ResourcesFolder=" ${AppleResourcesFolder} "
168
168
169
+ # set expandable variables
170
+ APP_ROOT=" ${AppPackageFolder} "
169
171
APP_PACKAGE=" ${AppPackageFolder} "
170
172
JAVAROOT=" ${AppleJavaFolder} "
171
173
USER_HOME=" $HOME "
@@ -180,7 +182,7 @@ if [ $exitcode -eq 0 ]; then
180
182
# AppPackageRoot is the standard WorkingDirectory when the script is started
181
183
WorkingDirectory=" ${AppPackageRoot} "
182
184
fi
183
- # expand variables $APP_PACKAGE, $JAVAROOT, $USER_HOME
185
+ # expand variables $APP_PACKAGE, $APP_ROOT, $ JAVAROOT, $USER_HOME
184
186
WorkingDirectory=$( eval echo " ${WorkingDirectory} " )
185
187
186
188
@@ -203,7 +205,7 @@ if [ $exitcode -eq 0 ]; then
203
205
else
204
206
JVMClassPath=${JVMClassPath_RAW}
205
207
fi
206
- # expand variables $APP_PACKAGE, $JAVAROOT, $USER_HOME
208
+ # expand variables $APP_PACKAGE, $APP_ROOT, $ JAVAROOT, $USER_HOME
207
209
JVMClassPath=$( eval echo " ${JVMClassPath} " )
208
210
209
211
# read the JVM Options in either Array or String style
@@ -213,7 +215,7 @@ if [ $exitcode -eq 0 ]; then
213
215
else
214
216
JVMDefaultOptions=${JVMDefaultOptions_RAW}
215
217
fi
216
- # expand variables $APP_PACKAGE, $JAVAROOT, $USER_HOME (#84)
218
+ # expand variables $APP_PACKAGE, $APP_ROOT, $ JAVAROOT, $USER_HOME (#84)
217
219
JVMDefaultOptions=$( eval echo " ${JVMDefaultOptions} " )
218
220
219
221
# read StartOnMainThread and add as -XstartOnFirstThread
@@ -247,7 +249,11 @@ else
247
249
ResourcesFolder=" ${OracleResourcesFolder} "
248
250
WorkingDirectory=" ${OracleJavaFolder} "
249
251
252
+ # set expandable variables
250
253
APP_ROOT=" ${AppPackageFolder} "
254
+ APP_PACKAGE=" ${AppPackageFolder} "
255
+ JAVAROOT=" ${OracleJavaFolder} "
256
+ USER_HOME=" $HOME "
251
257
252
258
# read the MainClass name
253
259
JVMMainClass=" $( plist_get ' :JVMMainClassName' ) "
@@ -265,12 +271,12 @@ else
265
271
JVMClassPath_RAW=$( plist_get ' :JVMClassPath' )
266
272
if [[ $JVMClassPath_RAW == * Array* ]] ; then
267
273
JVMClassPath=.$( plist_get ' :JVMClassPath' | grep " " | sed ' s/^ */:/g' | tr -d ' \n' | xargs)
268
- # expand variables $APP_PACKAGE, $JAVAROOT, $USER_HOME
274
+ # expand variables $APP_PACKAGE, $APP_ROOT, $ JAVAROOT, $USER_HOME
269
275
JVMClassPath=$( eval echo " ${JVMClassPath} " )
270
276
271
277
elif [[ ! -z ${JVMClassPath_RAW} ]] ; then
272
278
JVMClassPath=${JVMClassPath_RAW}
273
- # expand variables $APP_PACKAGE, $JAVAROOT, $USER_HOME
279
+ # expand variables $APP_PACKAGE, $APP_ROOT, $ JAVAROOT, $USER_HOME
274
280
JVMClassPath=$( eval echo " ${JVMClassPath} " )
275
281
276
282
else
@@ -279,8 +285,11 @@ else
279
285
# Do NOT expand the default 'AppName.app/Contents/Java/*' classpath (#42)
280
286
fi
281
287
282
- # read the JVM Default Options
288
+ # read the JVM Default Options by parsing the :JVMDefaultOptions <dict>
289
+ # and pulling all <string> values starting with a dash (-)
283
290
JVMDefaultOptions=$( plist_get ' :JVMDefaultOptions' | grep -o " \-.*" | tr -d ' \n' | xargs)
291
+ # expand variables $APP_PACKAGE, $APP_ROOT, $JAVAROOT, $USER_HOME (#99)
292
+ JVMDefaultOptions=$( eval echo " ${JVMDefaultOptions} " )
284
293
285
294
# read the Main Arguments from JVMArguments key as an array and retain spaces (see #46 for naming details)
286
295
IFS=$' \t\n '
316
325
stub_logger " [JavaRequirement] JVM minimum version: ${JVMVersion} "
317
326
stub_logger " [JavaRequirement] JVM maximum version: ${JVMMaxVersion} "
318
327
319
- # MainArgs: replace occurences of $APP_ROOT with its content
328
+ # MainArgs: expand variables $APP_PACKAGE, $APP_ROOT, $JAVAROOT, $USER_HOME
320
329
MainArgsArr=()
321
330
for i in " ${MainArgs[@]} "
322
331
do
323
332
MainArgsArr+=(" $( eval echo " $i " ) " )
324
333
done
325
334
326
- # JVMOptions: replace occurences of $APP_ROOT with its content
335
+ # JVMOptions: expand variables $APP_PACKAGE, $APP_ROOT, $JAVAROOT, $USER_HOME
327
336
JVMOptionsArr=()
328
337
for i in " ${JVMOptions[@]} "
329
338
do
@@ -334,11 +343,34 @@ done
334
343
# internationalized messages
335
344
# ###########################################
336
345
337
- LANG=$( defaults read -g AppleLocale)
338
- stub_logger " [Language] $LANG "
346
+ # supported languages / available translations
347
+ stubLanguages=" ^(fr|de|zh|es|en)-"
348
+
349
+ # read user preferred languages as defined in macOS System Preferences (#101)
350
+ stub_logger ' [LanguageSearch] Checking preferred languages in macOS System Preferences...'
351
+ appleLanguages=($( defaults read -g AppleLanguages | grep ' \s"' | tr -d ' ,' | xargs) )
352
+ stub_logger " [LanguageSearch] ... found [${appleLanguages[*]} ]"
353
+
354
+ language=" "
355
+ for i in " ${appleLanguages[@]} "
356
+ do
357
+ langValue=" ${i% -* } "
358
+ if [[ " $i " =~ $stubLanguages ]]; then
359
+ stub_logger " [LanguageSearch] ... selected '$i ' ('$langValue ') as the default language for the launcher stub"
360
+ language=${langValue}
361
+ break
362
+ fi
363
+ done
364
+ if [ -z " ${language} " ]; then
365
+ language=" en"
366
+ stub_logger " [LanguageSearch] ... selected fallback 'en' as the default language for the launcher stub"
367
+ fi
368
+ stub_logger " [Language] $language "
369
+
339
370
340
- # French localization
341
- if [[ $LANG == fr* ]] ; then
371
+ case " ${language} " in
372
+ # French
373
+ fr)
342
374
MSG_ERROR_LAUNCHING=" ERREUR au lancement de '${CFBundleName} '."
343
375
MSG_MISSING_MAINCLASS=" 'MainClass' n'est pas spécifié.\nL'application Java ne peut pas être lancée."
344
376
MSG_JVMVERSION_REQ_INVALID=" La syntaxe de la version de Java demandée est invalide: %s\nVeuillez contacter le développeur de l'application."
@@ -351,9 +383,10 @@ if [[ $LANG == fr* ]] ; then
351
383
MSG_LATER=" Plus tard"
352
384
MSG_VISIT_JAVA_DOT_COM=" Java by Oracle"
353
385
MSG_VISIT_ADOPTOPENJDK=" Java by AdoptOpenJDK"
386
+ ;;
354
387
355
- # German localization
356
- elif [[ $LANG == de * ]] ; then
388
+ # German
389
+ de)
357
390
MSG_ERROR_LAUNCHING=" FEHLER beim Starten von '${CFBundleName} '."
358
391
MSG_MISSING_MAINCLASS=" Die 'MainClass' ist nicht spezifiziert!\nDie Java-Anwendung kann nicht gestartet werden!"
359
392
MSG_JVMVERSION_REQ_INVALID=" Die Syntax der angeforderten Java-Version ist ungültig: %s\nBitte kontaktieren Sie den Entwickler der App."
@@ -366,9 +399,10 @@ elif [[ $LANG == de* ]] ; then
366
399
MSG_LATER=" Später"
367
400
MSG_VISIT_JAVA_DOT_COM=" Java von Oracle"
368
401
MSG_VISIT_ADOPTOPENJDK=" Java von AdoptOpenJDK"
402
+ ;;
369
403
370
- # Simplifyed Chinese localization
371
- elif [[ $LANG == zh * ]] ; then
404
+ # Simplified Chinese
405
+ zh)
372
406
MSG_ERROR_LAUNCHING=" 无法启动 '${CFBundleName} '."
373
407
MSG_MISSING_MAINCLASS=" 没有指定 'MainClass'!\nJava程序无法启动!"
374
408
MSG_JVMVERSION_REQ_INVALID=" Java版本参数语法错误: %s\n请联系该应用的开发者。"
@@ -381,9 +415,10 @@ elif [[ $LANG == zh* ]] ; then
381
415
MSG_LATER=" 稍后"
382
416
MSG_VISIT_JAVA_DOT_COM=" Java by Oracle"
383
417
MSG_VISIT_ADOPTOPENJDK=" Java by AdoptOpenJDK"
418
+ ;;
384
419
385
- # Spanish localization
386
- elif [[ $LANG == es * ]] ; then
420
+ # Spanish
421
+ es)
387
422
MSG_ERROR_LAUNCHING=" ERROR iniciando '${CFBundleName} '."
388
423
MSG_MISSING_MAINCLASS=" ¡'MainClass' no especificada!\n¡La aplicación Java no puede iniciarse!"
389
424
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."
@@ -396,9 +431,10 @@ elif [[ $LANG == es* ]] ; then
396
431
MSG_LATER=" Más tarde"
397
432
MSG_VISIT_JAVA_DOT_COM=" Java de Oracle"
398
433
MSG_VISIT_ADOPTOPENJDK=" Java de AdoptOpenJDK"
434
+ ;;
399
435
400
- # English default localization
401
- else
436
+ # English | default
437
+ en| * )
402
438
MSG_ERROR_LAUNCHING=" ERROR launching '${CFBundleName} '."
403
439
MSG_MISSING_MAINCLASS=" 'MainClass' isn't specified!\nJava application cannot be started!"
404
440
MSG_JVMVERSION_REQ_INVALID=" The syntax of the required Java version is invalid: %s\nPlease contact the App developer."
411
447
MSG_LATER=" Later"
412
448
MSG_VISIT_JAVA_DOT_COM=" Java by Oracle"
413
449
MSG_VISIT_ADOPTOPENJDK=" Java by AdoptOpenJDK"
414
- fi
450
+ ;;
451
+ esac
415
452
416
453
417
454
@@ -527,19 +564,27 @@ if [ -n "$JAVA_HOME" ] ; then
527
564
if [[ $JAVA_HOME == /* ]] ; then
528
565
# if "$JAVA_HOME" starts with a Slash it's an absolute path
529
566
JAVACMD=" $JAVA_HOME /bin/java"
567
+ stub_logger " [JavaSearch] ... parsing JAVA_HOME as absolute path to the executable '$JAVACMD '"
530
568
else
531
569
# otherwise it's a relative path to "$AppPackageFolder"
532
570
JAVACMD=" $AppPackageFolder /$JAVA_HOME /bin/java"
571
+ stub_logger " [JavaSearch] ... parsing JAVA_HOME as relative path inside the App bundle to the executable '$JAVACMD '"
533
572
fi
534
573
JAVACMD_version=$( get_comparable_java_version $( get_java_version_from_cmd " ${JAVACMD} " ) )
535
574
else
536
- stub_logger " [JavaSearch] ... didn 't found JAVA_HOME"
575
+ stub_logger " [JavaSearch] ... haven 't found JAVA_HOME"
537
576
fi
538
577
539
578
540
579
# check for any other or a specific Java version
541
580
# also if $JAVA_HOME exists but isn't executable
542
581
if [ -z " ${JAVACMD} " ] || [ ! -x " ${JAVACMD} " ] ; then
582
+
583
+ # add a warning in the syslog if JAVA_HOME is not executable or not found (#100)
584
+ if [ -n " $JAVA_HOME " ] ; then
585
+ stub_logger " [JavaSearch] ... but no 'java' executable was found at the JAVA_HOME location!"
586
+ fi
587
+
543
588
stub_logger " [JavaSearch] Searching for JavaVirtualMachines on the system ..."
544
589
# reset variables
545
590
JAVACMD=" "
@@ -576,15 +621,18 @@ if [ -z "${JAVACMD}" ] || [ ! -x "${JAVACMD}" ] ; then
576
621
javaCounter=$( /usr/libexec/PlistBuddy -c " Print" /dev/stdin <<< $javaXml | grep " Dict" | wc -l | tr -d ' ' )
577
622
578
623
# iterate over all Dict entries
579
- for idx in $( seq 0 $(( javaCounter - 1 )) )
580
- do
581
- version=$( /usr/libexec/PlistBuddy -c " print :$idx :JVMVersion" /dev/stdin <<< $javaXml )
582
- path=$( /usr/libexec/PlistBuddy -c " print :$idx :JVMHomePath" /dev/stdin <<< $javaXml )
583
- path+=" /bin/java"
584
- allJVMs+=(" $version :$path " )
585
- done
586
- # unset for loop variables
587
- unset version path
624
+ # but only if there are any JVMs at all (#93)
625
+ if [ " $javaCounter " -gt " 0" ] ; then
626
+ for idx in $( seq 0 $(( javaCounter - 1 )) )
627
+ do
628
+ version=$( /usr/libexec/PlistBuddy -c " print :$idx :JVMVersion" /dev/stdin <<< $javaXml )
629
+ path=$( /usr/libexec/PlistBuddy -c " print :$idx :JVMHomePath" /dev/stdin <<< $javaXml )
630
+ path+=" /bin/java"
631
+ allJVMs+=(" $version :$path " )
632
+ done
633
+ # unset for loop variables
634
+ unset version path
635
+ fi
588
636
589
637
# add SDKMAN! java versions (#95)
590
638
if [ -d ~ /.sdkman/candidates/java/ ] ; then
0 commit comments