-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcheck_java.sh
More file actions
executable file
·142 lines (119 loc) · 4.58 KB
/
Copy pathcheck_java.sh
File metadata and controls
executable file
·142 lines (119 loc) · 4.58 KB
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
#!/usr/bin/env bash
source "$(dirname "${BASH_SOURCE[0]}")/utils.sh"
require_bash
check_java_installation() {
echo "Checking Java installation..." >&2
if [ -z "$JAVA_HOME" ]; then
echo "Error: JAVA_HOME environment variable is not set" >&2
return 1
fi
if ! get_real_path "$JAVA_HOME"; then
echo "Error: Failed to resolve JAVA_HOME path: $JAVA_HOME" >&2
return 1
fi
local resolved_java_home="$GET_REAL_PATH_RESULT"
if [ ! -d "$resolved_java_home" ]; then
echo "Error: JAVA_HOME directory does not exist: $resolved_java_home" >&2
return 1
fi
local java_cmd="$resolved_java_home/bin/java"
if get_real_path "$java_cmd"; then
local resolved_java_cmd="$GET_REAL_PATH_RESULT"
if [ ! -x "$resolved_java_cmd" ]; then
echo "Error: Java executable not found or not executable: $resolved_java_cmd" >&2
return 1
fi
java_cmd="$resolved_java_cmd"
else
if [ ! -x "$java_cmd" ]; then
echo "Error: Java executable not found or not executable: $java_cmd" >&2
return 1
fi
fi
local javac_cmd="$resolved_java_home/bin/javac"
if get_real_path "$javac_cmd"; then
local resolved_javac_cmd="$GET_REAL_PATH_RESULT"
if [ ! -x "$resolved_javac_cmd" ]; then
echo "Warning: javac not found - this might be a JRE instead of JDK" >&2
fi
else
if [ ! -x "$javac_cmd" ]; then
echo "Warning: javac not found - this might be a JRE instead of JDK" >&2
fi
fi
local java_version=$("$java_cmd" -version 2>&1 | awk -F '"' '/version/ {print $2}')
if [ -z "$java_version" ]; then
echo "Error: Failed to get Java version" >&2
return 1
fi
echo "Java validation successful: version $java_version, JAVA_HOME=$resolved_java_home" >&2
return 0
}
find_java_installation() {
local java_cmd=""
local java_home=""
if type -p java > /dev/null 2>&1; then
echo "Found java executable in PATH" >&2
java_cmd=$(which java)
if get_real_path "$java_cmd" && [ -n "$GET_REAL_PATH_RESULT" ]; then
local java_cmd_real="$GET_REAL_PATH_RESULT"
local java_bin_dir=$(dirname "$java_cmd_real")
if [ "$(basename "$java_bin_dir")" = "bin" ]; then
java_home=$(dirname "$java_bin_dir")
echo "Derived JAVA_HOME from java executable: $java_home" >&2
fi
fi
elif [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then
echo "Found java executable in JAVA_HOME" >&2
if get_real_path "$JAVA_HOME" && [ -n "$GET_REAL_PATH_RESULT" ]; then
java_home="$GET_REAL_PATH_RESULT"
echo "Resolved JAVA_HOME to: $java_home" >&2
else
java_home="$JAVA_HOME"
fi
java_cmd="$java_home/bin/java"
else
echo "The JAVA_HOME environment variable is not defined correctly" >&2
echo "JAVA_HOME should point to a JDK not a JRE" >&2
echo "Also, no java executable found in PATH" >&2
return 1
fi
if [[ "$java_cmd" ]]; then
local java_version=$("$java_cmd" -version 2>&1 | awk -F '"' '/version/ {print $2}')
local java_cmd_real_display="$java_cmd"
if get_real_path "$java_cmd" && [ -n "$GET_REAL_PATH_RESULT" ]; then
java_cmd_real_display="$GET_REAL_PATH_RESULT"
fi
echo "Java executable: $java_cmd_real_display" >&2
echo "Java version: $java_version" >&2
if [ -n "$java_home" ]; then
echo "JAVA_HOME: $java_home" >&2
fi
JAVA_CMD="$java_cmd"
JAVA_HOME="$java_home"
JAVA_VERSION="$java_version"
else
return 1
fi
}
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
require_interactive_shell
if check_java_installation "$JAVA_HOME"; then
echo "Java is properly configured" >&2
else
echo "JAVA_HOME is not properly configured. Trying to find java installation..." >&2
if find_java_installation; then
echo "Java successfully found and configured" >&2
echo "Do you want to save JAVA_HOME to ~/.profile? (y/n)"
read -r response
if [[ "$response" =~ ^[Yy]$ ]]; then
remove_env_variable "JAVA_HOME" ~/.profile
echo "export JAVA_HOME=${JAVA_HOME}" >> ~/.profile
echo "JAVA_HOME has been saved to ~/.profile"
echo "Please run 'source ~/.profile' or restart your terminal to apply changes"
fi
else
exit 1
fi
fi
fi