Skip to content
This repository was archived by the owner on Feb 4, 2023. It is now read-only.

Commit cc539ac

Browse files
committed
Also search for JRE's when a specific JVMversion is required in Info.plist // fixes #15
1 parent c5df401 commit cc539ac

2 files changed

Lines changed: 170 additions & 7 deletions

File tree

src/universalJavaApplicationStub

Lines changed: 76 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# #
1414
# @author Tobias Fischer #
1515
# @url https://github.com/tofi86/universalJavaApplicationStub #
16-
# @date 2015-05-15 #
16+
# @date 2015-09-29 #
1717
# @version 0.9.0 #
1818
# #
1919
# #
@@ -216,19 +216,88 @@ fi
216216

217217

218218

219+
#
220+
# function: Java version tester
221+
############################################
222+
223+
function JavaVersionSatisfiesRequirement() {
224+
java_ver=$1
225+
java_req=$2
226+
227+
# e.g. 1.8*
228+
if [[ ${java_req} =~ ^[0-9]\.[0-9]\*$ ]] ; then
229+
java_req_num=${java_req:0:3}
230+
java_ver_num=${java_ver:0:3}
231+
if [ ${java_ver_num} == ${java_req_num} ] ; then
232+
return 0
233+
else
234+
return 1
235+
fi
236+
237+
# e.g. 1.8+
238+
elif [[ ${java_req} =~ ^[0-9]\.[0-9]\+$ ]] ; then
239+
java_req_num=`echo ${java_req} | sed -E 's/[[:punct:]]//g'`
240+
java_ver_num=`echo ${java_ver} | sed -E 's/[[:punct:]]//g'`
241+
if [ ${java_ver_num} -ge ${java_req_num} ] ; then
242+
return 0
243+
else
244+
return 1
245+
fi
246+
247+
# e.g. 1.8
248+
elif [[ ${java_req} =~ ^[0-9]\.[0-9]$ ]] ; then
249+
if [ ${java_ver} == ${java_req} ] ; then
250+
return 0
251+
else
252+
return 1
253+
fi
254+
255+
# not matching any of the above patterns
256+
else
257+
return 2
258+
fi
259+
}
260+
261+
262+
#
263+
# function: extract Java major version
264+
# from java -version command
265+
############################################
266+
267+
function extractJavaMajorVersion() {
268+
echo `"$1" -version 2>&1 | awk '/version/{print $NF}' | sed -E 's/"([0-9.]{3})[0-9_.]{5}"/\1/g'`
269+
}
270+
271+
272+
219273
#
220274
# find installed Java versions
221275
############################################
222276

277+
apple_jre_plugin="/Library/Java/Home/bin/java"
278+
apple_jre_version=`extractJavaMajorVersion "${apple_jre_plugin}"`
279+
oracle_jre_plugin="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java"
280+
oracle_jre_version=`extractJavaMajorVersion "${oracle_jre_plugin}"`
281+
223282
# first check system variable "$JAVA_HOME"
224283
if [ -n "$JAVA_HOME" ] ; then
225284
JAVACMD="$JAVA_HOME/bin/java"
226285

227-
# check for specified JVMversion in "/usr/libexec/java_home" symlinks
228-
elif [ ! -z ${JVMVersion} ] && [ -x /usr/libexec/java_home ] && /usr/libexec/java_home -F; then
286+
# check for JVMversion requirements
287+
elif [ ! -z ${JVMVersion} ] ; then
229288

230-
if /usr/libexec/java_home -F -v ${JVMVersion}; then
289+
# first in "/usr/libexec/java_home" symlinks
290+
if [ -x /usr/libexec/java_home ] && /usr/libexec/java_home -F -v ${JVMVersion}; then
231291
JAVACMD="`/usr/libexec/java_home -F -v ${JVMVersion} 2> /dev/null`/bin/java"
292+
293+
# then in Apple JRE plugin
294+
elif [ -x "${apple_jre_plugin}" ] && JavaVersionSatisfiesRequirement ${apple_jre_version} ${JVMVersion} ; then
295+
JAVACMD="${apple_jre_plugin}"
296+
297+
# then in Oracle JRE plugin
298+
elif [ -x "${oracle_jre_plugin}" ] && JavaVersionSatisfiesRequirement ${oracle_jre_version} ${JVMVersion} ; then
299+
JAVACMD="${oracle_jre_plugin}"
300+
232301
else
233302
# display error message with applescript
234303
osascript -e "tell application \"System Events\" to display dialog \"ERROR launching '${CFBundleName}'\n\nNo suitable Java version found on your system!\nThis program requires Java ${JVMVersion}\nMake sure you install the required Java version.\" with title \"${CFBundleName}\" buttons {\" OK \"} default button 1 with icon path to resource \"${CFBundleIconFile}\" in bundle (path to me)"
@@ -240,13 +309,13 @@ elif [ ! -z ${JVMVersion} ] && [ -x /usr/libexec/java_home ] && /usr/libexec/jav
240309
elif [ -x /usr/libexec/java_home ] && /usr/libexec/java_home -F; then
241310
JAVACMD="`/usr/libexec/java_home 2> /dev/null`/bin/java"
242311

243-
# otherwise check Java standard symlink (old Apple Java)
312+
# otherwise check Java standard symlink (old Apple JRE)
244313
elif [ -h /Library/Java/Home ]; then
245-
JAVACMD="/Library/Java/Home/bin/java"
314+
JAVACMD="${apple_jre_plugin}"
246315

247316
# fallback: public JRE plugin (Oracle Java)
248317
else
249-
JAVACMD="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java"
318+
JAVACMD="${oracle_jre_plugin}"
250319
fi
251320

252321
# fallback fallback: /usr/bin/java

test/java-version-tester.sh

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#!/bin/sh
2+
3+
# Java JRE version tester
4+
# tofi86 @ 2015-09-29
5+
6+
function JavaVersionSatisfiesRequirement() {
7+
java_ver=$1
8+
java_req=$2
9+
10+
# e.g. 1.8*
11+
if [[ ${java_req} =~ ^[0-9]\.[0-9]\*$ ]] ; then
12+
java_req_num=${java_req:0:3}
13+
java_ver_num=${java_ver:0:3}
14+
if [ ${java_ver_num} == ${java_req_num} ] ; then
15+
return 0
16+
else
17+
return 1
18+
fi
19+
20+
# e.g. 1.8+
21+
elif [[ ${java_req} =~ ^[0-9]\.[0-9]\+$ ]] ; then
22+
java_req_num=`echo ${java_req} | sed -E 's/[[:punct:]]//g'`
23+
java_ver_num=`echo ${java_ver} | sed -E 's/[[:punct:]]//g'`
24+
if [ ${java_ver_num} -ge ${java_req_num} ] ; then
25+
return 0
26+
else
27+
return 1
28+
fi
29+
30+
# e.g. 1.8
31+
elif [[ ${java_req} =~ ^[0-9]\.[0-9]$ ]] ; then
32+
if [ ${java_ver} == ${java_req} ] ; then
33+
return 0
34+
else
35+
return 1
36+
fi
37+
38+
# not matching any of the above patterns
39+
else
40+
return 2
41+
fi
42+
}
43+
44+
45+
function extractJavaMajorVersion() {
46+
echo `"$1" -version 2>&1 | awk '/version/{print $NF}' | sed -E 's/"([0-9.]{3})[0-9_.]{5}"/\1/g'`
47+
}
48+
49+
50+
51+
apple_jre_plugin="/Library/Java/Home/bin/java"
52+
apple_jre_version=`extractJavaMajorVersion "${apple_jre_plugin}"`
53+
oracle_jre_plugin="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java"
54+
oracle_jre_version=`extractJavaMajorVersion "${oracle_jre_plugin}"`
55+
56+
57+
echo "assertions / tests with Apple JRE 1.6 ($apple_jre_version):"
58+
echo [0] `JavaVersionSatisfiesRequirement $apple_jre_version 1.6 ; echo $?`
59+
echo [0] `JavaVersionSatisfiesRequirement $apple_jre_version 1.6+ ; echo $?`
60+
echo [0] `JavaVersionSatisfiesRequirement $apple_jre_version 1.6* ; echo $?`
61+
echo [1] `JavaVersionSatisfiesRequirement $apple_jre_version 1.7 ; echo $?`
62+
echo [1] `JavaVersionSatisfiesRequirement $apple_jre_version 1.7+ ; echo $?`
63+
echo [1] `JavaVersionSatisfiesRequirement $apple_jre_version 1.7* ; echo $?`
64+
echo [1] `JavaVersionSatisfiesRequirement $apple_jre_version 1.8 ; echo $?`
65+
echo [1] `JavaVersionSatisfiesRequirement $apple_jre_version 1.8+ ; echo $?`
66+
echo [1] `JavaVersionSatisfiesRequirement $apple_jre_version 1.8* ; echo $?`
67+
echo [2] `JavaVersionSatisfiesRequirement $apple_jre_version 1.8.0_60 ; echo $?`
68+
69+
# false
70+
if JavaVersionSatisfiesRequirement $apple_jre_version "1.7+" ; then
71+
echo true
72+
else
73+
echo false
74+
fi
75+
76+
77+
echo "assertions / tests with Oracle JRE 1.8 ($oracle_jre_version):"
78+
echo [1] `JavaVersionSatisfiesRequirement $oracle_jre_version 1.9 ; echo $?`
79+
echo [1] `JavaVersionSatisfiesRequirement $oracle_jre_version 1.9+ ; echo $?`
80+
echo [1] `JavaVersionSatisfiesRequirement $oracle_jre_version 1.9* ; echo $?`
81+
echo [0] `JavaVersionSatisfiesRequirement $oracle_jre_version 1.8 ; echo $?`
82+
echo [0] `JavaVersionSatisfiesRequirement $oracle_jre_version 1.8+ ; echo $?`
83+
echo [0] `JavaVersionSatisfiesRequirement $oracle_jre_version 1.8* ; echo $?`
84+
echo [1] `JavaVersionSatisfiesRequirement $oracle_jre_version 1.7 ; echo $?`
85+
echo [0] `JavaVersionSatisfiesRequirement $oracle_jre_version 1.7+ ; echo $?`
86+
echo [1] `JavaVersionSatisfiesRequirement $oracle_jre_version 1.7* ; echo $?`
87+
echo [2] `JavaVersionSatisfiesRequirement $oracle_jre_version 1.7.0_60 ; echo $?`
88+
89+
# true
90+
if JavaVersionSatisfiesRequirement $oracle_jre_version "1.8+" ; then
91+
echo true
92+
else
93+
echo false
94+
fi

0 commit comments

Comments
 (0)