Skip to content

Commit 6360b60

Browse files
committed
Try jdk_switcher treak
1 parent c951a14 commit 6360b60

3 files changed

Lines changed: 354 additions & 6 deletions

File tree

.travis.yml

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,12 @@ python:
33
- "3.7"
44
env:
55
- CODECOV_TOKEN=194cff37-3a7a-4186-aaff-8f4d82fc9fb1
6-
before_install:
7-
- sudo apt-get -y install default-jdk maven
8-
addons:
9-
apt:
10-
update: true
116
install:
127
- pip install -r requirements-dev.txt
138
- pip install .
149
script:
10+
- source ./jdk_switcher.sh
11+
- jdk_switcher use oraclejdk10
1512
- mvn --version
1613
- java --version
1714
- coverage erase

integration/resources/goodexample_with_mvnw/pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515

1616
<properties>
1717
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
18-
<maven.compiler.release>11</maven.compiler.release>
18+
<maven.compiler.source>1.8</maven.compiler.source>
19+
<maven.compiler.target>1.8</maven.compiler.target>
1920
</properties>
2021

2122
<dependencies>

jdk_switcher.sh

Lines changed: 350 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,350 @@
1+
#!/usr/bin/env bash
2+
3+
if uname -a | grep x86_64 >/dev/null; then
4+
ARCH_SUFFIX=amd64
5+
else
6+
ARCH_SUFFIX=i386
7+
fi
8+
9+
: "${JDK_SWITCHER_DEFAULT:=openjdk8}"
10+
: "${UJA:=update-java-alternatives}"
11+
12+
OPENJDK6_UJA_ALIAS="java-1.6.0-openjdk"
13+
OPENJDK6_JAVA_HOME="/usr/lib/jvm/java-6-openjdk"
14+
if [[ -d "/usr/lib/jvm/java-6-openjdk-${ARCH_SUFFIX}" ]]; then
15+
OPENJDK6_UJA_ALIAS="java-1.6.0-openjdk-${ARCH_SUFFIX}"
16+
OPENJDK6_JAVA_HOME="/usr/lib/jvm/java-6-openjdk-${ARCH_SUFFIX}"
17+
fi
18+
19+
OPENJDK7_UJA_ALIAS="java-1.7.0-openjdk"
20+
OPENJDK7_JAVA_HOME="/usr/lib/jvm/java-7-openjdk"
21+
if [[ -d "/usr/lib/jvm/java-7-openjdk-${ARCH_SUFFIX}" ]]; then
22+
OPENJDK7_UJA_ALIAS="java-1.7.0-openjdk-${ARCH_SUFFIX}"
23+
OPENJDK7_JAVA_HOME="/usr/lib/jvm/java-7-openjdk-${ARCH_SUFFIX}"
24+
fi
25+
26+
OPENJDK8_UJA_ALIAS="java-1.8.0-openjdk"
27+
OPENJDK8_JAVA_HOME="/usr/lib/jvm/java-8-openjdk"
28+
if [[ -d "/usr/lib/jvm/java-8-openjdk-${ARCH_SUFFIX}" ]]; then
29+
OPENJDK8_UJA_ALIAS="java-1.8.0-openjdk-${ARCH_SUFFIX}"
30+
OPENJDK8_JAVA_HOME="/usr/lib/jvm/java-8-openjdk-${ARCH_SUFFIX}"
31+
fi
32+
33+
ORACLEJDK7_UJA_ALIAS="java-7-oracle"
34+
ORACLEJDK7_JAVA_HOME="/usr/lib/jvm/java-7-oracle"
35+
if [[ -d "/usr/lib/jvm/java-7-oracle-${ARCH_SUFFIX}" ]]; then
36+
ORACLEJDK7_UJA_ALIAS="java-7-oracle-${ARCH_SUFFIX}"
37+
ORACLEJDK7_JAVA_HOME="/usr/lib/jvm/java-7-oracle-${ARCH_SUFFIX}"
38+
fi
39+
40+
ORACLEJDK8_UJA_ALIAS="java-8-oracle"
41+
ORACLEJDK8_JAVA_HOME="/usr/lib/jvm/java-8-oracle"
42+
if [[ -d "/usr/lib/jvm/java-8-oracle-${ARCH_SUFFIX}" ]]; then
43+
ORACLEJDK8_UJA_ALIAS="java-8-oracle-${ARCH_SUFFIX}"
44+
ORACLEJDK8_JAVA_HOME="/usr/lib/jvm/java-8-oracle-${ARCH_SUFFIX}"
45+
fi
46+
47+
ORACLEJDK9_UJA_ALIAS="java-9-oracle"
48+
ORACLEJDK9_JAVA_HOME="/usr/lib/jvm/java-9-oracle"
49+
if [[ -d "/usr/lib/jvm/java-9-oracle-${ARCH_SUFFIX}" ]]; then
50+
ORACLEJDK9_UJA_ALIAS="java-9-oracle-${ARCH_SUFFIX}"
51+
ORACLEJDK9_JAVA_HOME="/usr/lib/jvm/java-9-oracle-${ARCH_SUFFIX}"
52+
fi
53+
54+
ORACLEJDK10_UJA_ALIAS="java-10-oracle"
55+
ORACLEJDK10_JAVA_HOME="/usr/lib/jvm/java-10-oracle"
56+
if [[ -d "/usr/lib/jvm/java-10-oracle-${ARCH_SUFFIX}" ]]; then
57+
ORACLEJDK10_UJA_ALIAS="java-10-oracle-${ARCH_SUFFIX}"
58+
ORACLEJDK10_JAVA_HOME="/usr/lib/jvm/java-10-oracle-${ARCH_SUFFIX}"
59+
fi
60+
61+
IBMJAVA8_UJA_ALIAS="java-8-ibm"
62+
IBMJAVA8_JAVA_HOME="/usr/lib/jvm/java-8-ibm"
63+
if [[ -d "/usr/lib/jvm/java-8-ibm-${ARCH_SUFFIX}" ]]; then
64+
IBMJAVA8_UJA_ALIAS="java-8-ibm-${ARCH_SUFFIX}"
65+
IBMJAVA8_JAVA_HOME="/usr/lib/jvm/java-8-ibm-${ARCH_SUFFIX}"
66+
fi
67+
68+
OPENJDK8_OPENJ9_UJA_ALIAS="openjdk8-openj9"
69+
OPENJDK8_OPENJ9_JAVA_HOME="/usr/lib/jvm/openjdk8-openj9"
70+
if [[ -d "/usr/lib/jvm/openjdk8-openj9-${ARCH_SUFFIX}" ]]; then
71+
OPENJDK8_OPENJ9_UJA_ALIAS="openjdk8-openj9-${ARCH_SUFFIX}"
72+
OPENJDK8_OPENJ9_JAVA_HOME="/usr/lib/jvm/openjdk8-openj9-${ARCH_SUFFIX}"
73+
fi
74+
75+
for config_file in /etc/default/jdk-switcher "${HOME}/.jdk_switcherrc" "${JDK_SWITCHER_CONFIG}"; do
76+
if [[ -f "${config_file}" ]]; then
77+
# shellcheck source=/dev/null
78+
source "${config_file}"
79+
fi
80+
done
81+
82+
switch_to_openjdk6() {
83+
echo "Switching to OpenJDK6 ($OPENJDK6_UJA_ALIAS), JAVA_HOME will be set to $OPENJDK6_JAVA_HOME"
84+
sudo "${UJA}" --set "$OPENJDK6_UJA_ALIAS"
85+
export JAVA_HOME="$OPENJDK6_JAVA_HOME"
86+
}
87+
88+
switch_to_openjdk7() {
89+
echo "Switching to OpenJDK7 ($OPENJDK7_UJA_ALIAS), JAVA_HOME will be set to $OPENJDK7_JAVA_HOME"
90+
sudo "${UJA}" --set "$OPENJDK7_UJA_ALIAS"
91+
export JAVA_HOME="$OPENJDK7_JAVA_HOME"
92+
}
93+
94+
switch_to_openjdk8() {
95+
echo "Switching to OpenJDK8 ($OPENJDK8_UJA_ALIAS), JAVA_HOME will be set to $OPENJDK8_JAVA_HOME"
96+
sudo "${UJA}" --set "$OPENJDK8_UJA_ALIAS"
97+
export JAVA_HOME="$OPENJDK8_JAVA_HOME"
98+
}
99+
100+
switch_to_oraclejdk7() {
101+
echo "Switching to Oracle JDK7 ($ORACLEJDK7_UJA_ALIAS), JAVA_HOME will be set to $ORACLEJDK7_JAVA_HOME"
102+
sudo "${UJA}" --set "$ORACLEJDK7_UJA_ALIAS"
103+
export JAVA_HOME="$ORACLEJDK7_JAVA_HOME"
104+
}
105+
106+
switch_to_oraclejdk8() {
107+
echo "Switching to Oracle JDK8 ($ORACLEJDK8_UJA_ALIAS), JAVA_HOME will be set to $ORACLEJDK8_JAVA_HOME"
108+
sudo "${UJA}" --set "$ORACLEJDK8_UJA_ALIAS"
109+
export JAVA_HOME="$ORACLEJDK8_JAVA_HOME"
110+
}
111+
112+
switch_to_oraclejdk9() {
113+
echo "Switching to Oracle JDK9 ($ORACLEJDK9_UJA_ALIAS), JAVA_HOME will be set to $ORACLEJDK9_JAVA_HOME"
114+
sudo "${UJA}" --set "$ORACLEJDK9_UJA_ALIAS"
115+
export JAVA_HOME="$ORACLEJDK9_JAVA_HOME"
116+
}
117+
118+
switch_to_oraclejdk10() {
119+
echo "Switching to Oracle JDK10 ($ORACLEJDK10_UJA_ALIAS), JAVA_HOME will be set to $ORACLEJDK10_JAVA_HOME"
120+
sudo "${UJA}" --set "$ORACLEJDK10_UJA_ALIAS"
121+
export JAVA_HOME="$ORACLEJDK10_JAVA_HOME"
122+
}
123+
124+
switch_to_ibmjava8() {
125+
echo "Switching to IBM JAVA8 ($IBMJAVA8_UJA_ALIAS), JAVA_HOME will be set to $IBMJAVA8_JAVA_HOME"
126+
update_jdk_entries $IBMJAVA8_JAVA_HOME
127+
}
128+
129+
switch_to_openjdk8_openj9() {
130+
echo "Switching to OPENJDK8 OPENJ9 ($OPENJDK8_OPENJ9_UJA_ALIAS), JAVA_HOME will be set to $OPENJDK8_OPENJ9_JAVA_HOME"
131+
update_jdk_entries $OPENJDK8_OPENJ9_JAVA_HOME
132+
}
133+
134+
update_jdk_entries() {
135+
136+
java_home="$1"
137+
jre=0
138+
dir="$java_home/jre/bin"
139+
if [ -d "$dir" ]; then
140+
jre_entries=("$(ls "$dir")")
141+
jre=1
142+
update_alternatives "$dir" "jre_entries[@]"
143+
fi
144+
145+
dir="$java_home/bin"
146+
if [ -d "$dir" ]; then
147+
jdk_entries=("$(ls "$dir")")
148+
149+
# If jre dir is present then remove duplicate binaries from bin dir
150+
if [ $jre == 1 ]; then
151+
unique_jdk_entries=()
152+
for jdk_entry in "${jdk_entries[@]}"; do
153+
found=0
154+
for jre_entry in "${jre_entries[@]}"; do
155+
if [ "$jdk_entry" == "$jre_entry" ]; then
156+
found=1
157+
break
158+
fi
159+
done
160+
if [ $found == 0 ]; then
161+
# shellcheck disable=SC2034
162+
unique_jdk_entries[i]=$jdk_entry
163+
i=$((i + 1))
164+
fi
165+
done
166+
update_alternatives "$dir" "unique_jdk_entries[@]"
167+
else
168+
update_alternatives "$dir" "jdk_entries[@]"
169+
fi
170+
fi
171+
export JAVA_HOME="$java_home"
172+
}
173+
174+
update_alternatives() {
175+
dir="$1"
176+
priority=1
177+
178+
binaries=("${!2}")
179+
for binary in "${binaries[@]}"; do
180+
path="$dir/$binary"
181+
if [[ "$binary" == "classic" ]] || [[ "$binary" == "j9vm" ]]; then
182+
continue
183+
fi
184+
sudo update-alternatives --quiet --install "/usr/bin/$binary" "$binary" "$path" "$priority"
185+
sudo update-alternatives --quiet --set "$binary" "$path"
186+
done
187+
}
188+
189+
print_home_of_openjdk6() {
190+
echo "$OPENJDK6_JAVA_HOME"
191+
}
192+
193+
print_home_of_openjdk7() {
194+
echo "$OPENJDK7_JAVA_HOME"
195+
}
196+
197+
print_home_of_openjdk8() {
198+
echo "$OPENJDK8_JAVA_HOME"
199+
}
200+
201+
print_home_of_oraclejdk7() {
202+
echo "$ORACLEJDK7_JAVA_HOME"
203+
}
204+
205+
print_home_of_oraclejdk8() {
206+
echo "$ORACLEJDK8_JAVA_HOME"
207+
}
208+
209+
print_home_of_oraclejdk9() {
210+
echo "$ORACLEJDK9_JAVA_HOME"
211+
}
212+
213+
print_home_of_oraclejdk10() {
214+
echo "$ORACLEJDK10_JAVA_HOME"
215+
}
216+
217+
print_home_of_ibmjava8() {
218+
echo "$IBMJAVA8_JAVA_HOME"
219+
}
220+
221+
print_home_of_openjdk8_openj9() {
222+
echo "$OPENJDK8_OPENJ9_JAVA_HOME"
223+
}
224+
225+
warn_sunjdk6_eol() {
226+
echo "Sun/Oracle JDK 6 is EOL since November 2012, and is no longer supported. Please consider upgrading..." >&2
227+
}
228+
229+
warn_jdk_not_known() {
230+
echo "Sorry, but JDK '$1' is not known." >&2
231+
}
232+
233+
warn_gcj_user() {
234+
echo "We do not support GCJ. I mean, come on. Are you Richard Stallman?" >&2
235+
}
236+
237+
switch_jdk() {
238+
case "${1:-default}" in
239+
*gcj*)
240+
warn_gcj_user
241+
false
242+
;;
243+
openjdk6 | openjdk1.6 | openjdk1.6.0 | jdk6 | 1.6.0 | 1.6 | 6.0)
244+
switch_to_openjdk6
245+
;;
246+
openjdk7 | jdk7 | 1.7.0 | 1.7 | 7.0)
247+
switch_to_openjdk7
248+
;;
249+
openjdk8 | jdk8 | 1.8.0 | 1.8 | 8.0)
250+
switch_to_openjdk8
251+
;;
252+
oraclejdk6 | oraclejdk1.6 | oraclejdk1.6.0 | oracle6 | oracle1.6.0 | oracle6.0 | sunjdk6 | sun6)
253+
warn_sunjdk6_eol
254+
false
255+
;;
256+
oraclejdk7 | oraclejdk1.7 | oraclejdk1.7.0 | oracle7 | oracle1.7.0 | oracle7.0 | oracle | sunjdk7 | sun7 | sun)
257+
switch_to_oraclejdk7
258+
;;
259+
oraclejdk8 | oraclejdk1.8 | oraclejdk1.8.0 | oracle8 | oracle1.8.0 | oracle8.0)
260+
switch_to_oraclejdk8
261+
;;
262+
oraclejdk9 | oraclejdk1.9 | oraclejdk1.9.0 | oracle9 | oracle1.9.0 | oracle9.0)
263+
switch_to_oraclejdk9
264+
;;
265+
oraclejdk10 | oraclejdk1.10 | oraclejdk1.10.0 | oracle10 | oracle1.10.0 | oracle10.0)
266+
switch_to_oraclejdk10
267+
;;
268+
ibmjava8 | ibmjava1.8 | ibmjava1.8.0 | ibmjdk8 | ibmjdk1.8 | ibmjdk1.8.0 | ibm8 | ibm1.8.0 | ibm8.0)
269+
switch_to_ibmjava8
270+
;;
271+
openjdk8j9 | openjdk8openj9 | openjdk8withopenj9)
272+
switch_to_openjdk8_openj9
273+
;;
274+
default)
275+
"switch_to_${JDK_SWITCHER_DEFAULT}"
276+
;;
277+
*)
278+
warn_jdk_not_known "$1"
279+
false
280+
;;
281+
esac
282+
}
283+
284+
print_java_home() {
285+
typeset JDK
286+
JDK="$1"
287+
288+
case "$JDK" in
289+
*gcj*)
290+
warn_gcj_user
291+
;;
292+
openjdk6 | openjdk1.6 | openjdk1.6.0 | jdk6 | 1.6.0 | 1.6 | 6.0)
293+
print_home_of_openjdk6
294+
;;
295+
openjdk7 | jdk7 | 1.7.0 | 1.7 | 7.0)
296+
print_home_of_openjdk7
297+
;;
298+
openjdk8 | jdk8 | 1.8.0 | 1.8 | 8.0)
299+
print_home_of_openjdk8
300+
;;
301+
oraclejdk6 | oraclejdk1.6 | oraclejdk1.6.0 | oracle6 | oracle1.6.0 | oracle6.0 | sunjdk6 | sun6)
302+
warn_sunjdk6_eol
303+
;;
304+
oraclejdk7 | oraclejdk1.7 | oraclejdk1.7.0 | oracle7 | oracle1.7.0 | oracle7.0 | oracle | sunjdk7 | sun7 | sun)
305+
print_home_of_oraclejdk7
306+
;;
307+
oraclejdk8 | oraclejdk1.8 | oraclejdk1.8.0 | oracle8 | oracle1.8.0 | oracle8.0)
308+
print_home_of_oraclejdk8
309+
;;
310+
oraclejdk9 | oraclejdk1.9 | oraclejdk1.9.0 | oracle9 | oracle1.9.0 | oracle9.0)
311+
print_home_of_oraclejdk9
312+
;;
313+
oraclejdk10 | oraclejdk1.10 | oraclejdk1.10.0 | oracle10 | oracle1.10.0 | oracle10.0)
314+
print_home_of_oraclejdk10
315+
;;
316+
ibmjava8 | ibmjava1.8 | ibmjava1.8.0 | ibmjdk8 | ibmjdk1.8 | ibmjdk1.8.0 | ibm8 | ibm1.8.0 | ibm8.0)
317+
print_home_of_ibmjava8
318+
;;
319+
openjdk8j9 | openjdk8openj9 | openjdk8withopenj9)
320+
print_home_of_openjdk8_openj9
321+
;;
322+
default)
323+
"print_home_of_${JDK_SWITCHER_DEFAULT}"
324+
;;
325+
*)
326+
warn_jdk_not_known "$JDK"
327+
;;
328+
esac
329+
}
330+
331+
jdk_switcher() {
332+
typeset COMMAND JDK
333+
COMMAND="$1"
334+
JDK="$2"
335+
336+
case "$COMMAND" in
337+
use)
338+
switch_jdk "$JDK"
339+
;;
340+
home)
341+
print_java_home "$JDK"
342+
;;
343+
*)
344+
echo "Usage: jdk_switcher {use|home} [ JDK version ]" >&2
345+
false
346+
;;
347+
esac
348+
349+
return $?
350+
}

0 commit comments

Comments
 (0)