Skip to content

Commit 9ddfbfa

Browse files
committed
GH-112 use JAVA_HOME and JDK_HOME env. variable to find JDK
1 parent 1205a47 commit 9ddfbfa

File tree

4 files changed

+29
-11
lines changed

4 files changed

+29
-11
lines changed

visualvm/launcher/visualvm.exe

-7.35 KB
Binary file not shown.

visualvm/launcher/windows-src/jvmfinder.cpp

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
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.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* 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";
4141
const char *JvmFinder::JAVA_CLIENT_DLL_FILE = "\\bin\\client\\jvm.dll";
4242
const char *JvmFinder::JAVA_SERVER_DLL_FILE = "\\bin\\server\\jvm.dll";
4343
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";
4446

4547
JvmFinder::JvmFinder() {
4648
}
@@ -67,6 +69,12 @@ bool JvmFinder::findJava(const char *minJavaVersion) {
6769
if (find32bitJava(OLD_JDK_KEY, JAVA_JRE_PREFIX, minJavaVersion)) {
6870
return true;
6971
}
72+
if (findEnvJava(ENV_JDK_HOME)) {
73+
return true;
74+
}
75+
if (findEnvJava(ENV_JAVA_HOME)) {
76+
return true;
77+
}
7078
if (find64bitJava(OLD_JRE_KEY, "", minJavaVersion)) {
7179
return true;
7280
}
@@ -88,9 +96,6 @@ bool JvmFinder::find32bitJava(const char *javaKey, const char *prefix, const cha
8896
if (value >= minJavaVersion) {
8997
string path;
9098
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-
}
9499
result = checkJava(path.c_str(), prefix);
95100
}
96101
}
@@ -107,9 +112,6 @@ bool JvmFinder::find64bitJava(const char *javaKey, const char *prefix, const cha
107112
if (value >= minJavaVersion) {
108113
string path;
109114
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-
}
113115
result = checkJava(path.c_str(), prefix);
114116
}
115117
}
@@ -118,6 +120,19 @@ bool JvmFinder::find64bitJava(const char *javaKey, const char *prefix, const cha
118120
return result;
119121
}
120122

123+
bool JvmFinder::findEnvJava(const char *envVar) {
124+
logMsg("JvmFinder::findEnvJava()\n\tenvVar: %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+
121136
bool JvmFinder::checkJava(const char *path, const char *prefix) {
122137
assert(path);
123138
assert(prefix);
@@ -139,7 +154,7 @@ bool JvmFinder::checkJava(const char *path, const char *prefix) {
139154
string javaBinPath = javaPath + prefix + JAVA_BIN_DIR;
140155
if (fileExists(javaExePath.c_str()) || !javaClientDllPath.empty() || !javaServerDllPath.empty()) {
141156
if (!fileExists(javawExePath.c_str())) {
142-
logMsg("javaw.exe not exists, forcing java.exe");
157+
logMsg("javaw.exe does not exists, forcing java.exe");
143158
javawExePath = javaExePath;
144159
}
145160
return true;

visualvm/launcher/windows-src/jvmfinder.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
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.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -46,6 +46,8 @@ class JvmFinder {
4646
static const char *JAVA_CLIENT_DLL_FILE;
4747
static const char *JAVA_SERVER_DLL_FILE;
4848
static const char *JAVA_JRE_PREFIX;
49+
static const char *ENV_JDK_HOME;
50+
static const char *ENV_JAVA_HOME;
4951

5052
public:
5153
JvmFinder();
@@ -60,6 +62,7 @@ class JvmFinder {
6062
bool checkJava(const char *javaPath, const char *prefix);
6163
bool find32bitJava(const char *javaKey, const char *prefix, const char *minJavaVersion);
6264
bool find64bitJava(const char *javaKey, const char *prefix, const char *minJavaVersion);
65+
bool JvmFinder::findEnvJava(const char *envVar);
6366

6467
private:
6568
std::string javaPath;

visualvm/launcher/windows-src/version.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2007, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,7 @@
2929
#define FVER 0,0,0,0
3030
#define BUILD_ID "0"
3131
#define INTERNAL_NAME "visualvm"
32-
#define COPYRIGHT "\xA9 2007, 2014, Oracle and/or its affiliates. All rights reserved."
32+
#define COPYRIGHT "\xA9 2007, 2024, Oracle and/or its affiliates. All rights reserved."
3333
#define FNAME "visualvm.exe"
3434
#define NAME "VisualVM Dev. build"
3535

0 commit comments

Comments
 (0)