1
1
/*
2
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
2
+ * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved.
3
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
4
*
5
5
* This code is free software; you can redistribute it and/or modify it
@@ -41,6 +41,8 @@ const char *JvmFinder::JAVAW_EXE_FILE = "\\bin\\javaw.exe";
41
41
const char *JvmFinder::JAVA_CLIENT_DLL_FILE = " \\ bin\\ client\\ jvm.dll" ;
42
42
const char *JvmFinder::JAVA_SERVER_DLL_FILE = " \\ bin\\ server\\ jvm.dll" ;
43
43
const char *JvmFinder::JAVA_JRE_PREFIX = " \\ jre" ;
44
+ const char *JvmFinder::ENV_JDK_HOME = " JDK_HOME" ;
45
+ const char *JvmFinder::ENV_JAVA_HOME = " JAVA_HOME" ;
44
46
45
47
JvmFinder::JvmFinder () {
46
48
}
@@ -67,6 +69,12 @@ bool JvmFinder::findJava(const char *minJavaVersion) {
67
69
if (find32bitJava (OLD_JDK_KEY, JAVA_JRE_PREFIX, minJavaVersion)) {
68
70
return true ;
69
71
}
72
+ if (findEnvJava (ENV_JDK_HOME)) {
73
+ return true ;
74
+ }
75
+ if (findEnvJava (ENV_JAVA_HOME)) {
76
+ return true ;
77
+ }
70
78
if (find64bitJava (OLD_JRE_KEY, " " , minJavaVersion)) {
71
79
return true ;
72
80
}
@@ -88,9 +96,6 @@ bool JvmFinder::find32bitJava(const char *javaKey, const char *prefix, const cha
88
96
if (value >= minJavaVersion) {
89
97
string path;
90
98
if (getStringFromRegistry (HKEY_LOCAL_MACHINE, (string (javaKey) + " \\ " + value).c_str (), JAVA_HOME_NAME, path)) {
91
- if (*path.rbegin () == ' \\ ' ) {
92
- path.erase (path.length () - 1 , 1 );
93
- }
94
99
result = checkJava (path.c_str (), prefix);
95
100
}
96
101
}
@@ -107,9 +112,6 @@ bool JvmFinder::find64bitJava(const char *javaKey, const char *prefix, const cha
107
112
if (value >= minJavaVersion) {
108
113
string path;
109
114
if (getStringFromRegistry64bit (HKEY_LOCAL_MACHINE, (string (javaKey) + " \\ " + value).c_str (), JAVA_HOME_NAME, path)) {
110
- if (*path.rbegin () == ' \\ ' ) {
111
- path.erase (path.length () - 1 , 1 );
112
- }
113
115
result = checkJava (path.c_str (), prefix);
114
116
}
115
117
}
@@ -118,6 +120,19 @@ bool JvmFinder::find64bitJava(const char *javaKey, const char *prefix, const cha
118
120
return result;
119
121
}
120
122
123
+ bool JvmFinder::findEnvJava (const char *envVar) {
124
+ logMsg (" JvmFinder::findEnvJava()\n\t envVar: %s" , envVar);
125
+ bool result = false ;
126
+ char *envJavaPath = getenv (envVar);
127
+ if (envJavaPath) {
128
+ if (checkJava (envJavaPath, " " )) {
129
+ return true ;
130
+ }
131
+ result = checkJava (envJavaPath, JAVA_JRE_PREFIX);
132
+ }
133
+ return result;
134
+ }
135
+
121
136
bool JvmFinder::checkJava (const char *path, const char *prefix) {
122
137
assert (path);
123
138
assert (prefix);
@@ -139,7 +154,7 @@ bool JvmFinder::checkJava(const char *path, const char *prefix) {
139
154
string javaBinPath = javaPath + prefix + JAVA_BIN_DIR;
140
155
if (fileExists (javaExePath.c_str ()) || !javaClientDllPath.empty () || !javaServerDllPath.empty ()) {
141
156
if (!fileExists (javawExePath.c_str ())) {
142
- logMsg (" javaw.exe not exists, forcing java.exe" );
157
+ logMsg (" javaw.exe does not exists, forcing java.exe" );
143
158
javawExePath = javaExePath;
144
159
}
145
160
return true ;
0 commit comments