oracle / visualvm

VisualVM is an All-in-One Java Troubleshooting Tool
https://visualvm.github.io/
Other
2.83k stars 299 forks source link

Cannot find Java 1.8 #112

Closed thibaultmeyer closed 3 months ago

thibaultmeyer commented 5 years ago

Describe the bug Application cannot find Java 1.8 or higher. But Java 1.8 and Java 10 are installed on the computer. JAVA_HOME env. variable is set to the right value too.

To Reproduce Steps to reproduce the behavior:

  1. Uninstall any Oracle JRE / JDK
  2. Install OpenJDK 1.8 for windows (https://github.com/ojdkbuild/ojdkbuild)
  3. Install OpenJDK 10 for windows (https://github.com/ojdkbuild/ojdkbuild)
  4. Set JAVA_HOME to Java 1.8 directory
  5. Run VisualVM (double click on visualvm.exe)

Expected behavior Application running.

Desktop (please complete the following information):

jisedlac commented 5 years ago

Thanks for the report! Please verify that using the "--jdkhome" parameter works for you - see the First Steps section at the bottom of http://visualvm.github.io/download.html.

thibaultmeyer commented 5 years ago

Using --jdkhome parameter works ! VisualVM start with success

thurka commented 5 years ago

If you want to select particular JDK permanently, you can add path to JDK to visualvm/etc/visualvm.conf file.

cawoodm commented 5 years ago

Why doesn't VisualVM just use the the JAVA_HOME environment variable to find Java?

thurka commented 4 years ago

Based on the initial report, I downloaded JDK 11 installer for Windows and JDK 8 installer for Windows from https://github.com/ojdkbuild/ojdkbuild . I installed both JDKs on WIndows 10. I downloaded VisualVM 1.4.4, unzipped it and VisualVM started just fine. There was no complain about missing Java 1.8.

Borwe commented 4 years ago

The problem appears to have come back, I am using adoptopenjdk 11. even if I use --jdkhome, it still can't find it, even with Visual VM2 on Windows 10.

EDIT: Nevermind, solved problem, by using '/' for system paths instead of '\' on Windows, then --jdkhome recognized adoptopenjdk 11, thanks.

jisedlac commented 4 years ago

Do you mean you had to use visualvm.exe --jdkhome C:/Path/To/<JDK_HOME> instead of visualvm.exe --jdkhome C:\Path\To\<JDK_HOME> on Windows? Please provide the full command to start VisualVM on your setup to make it clear for us.

Borwe commented 4 years ago

Do you mean you had to use visualvm.exe --jdkhome C:/Path/To/<JDK_HOME> instead of visualvm.exe --jdkhome C:\Path\To\<JDK_HOME> on Windows? Please provide the full command to start VisualVM on your setup to make it clear for us.

Yes that.

jisedlac commented 4 years ago

Tested on a fresh Windows 10 installation, VisualVM 2.0 and AdoptOpenJDK 11.0.6.

Using the Windows installer, default settings, the JDK is installed to C:\Program Files\AdoptOpenJDK\jdk-11.0.6.10-hotspot, and the Windows registry is NOT updated with the JavaSoft keys.

Running visualvm.exe both from Explorer and from Command Prompt shows "Cannot find Java 1.8 or higher." dialog. This is expected because the VisualVM launcher searches for the JavaSoft registry keys on Windows, which is missing. JAVA_HOME is not read by the launcher.

Running visualvm.exe --jdkhome C:\Program Files\AdoptOpenJDK\jdk-11.0.6.10-hotspot shows "Cannot locate java installation in specified jdkhome: C:\Program" dialog. This is expected because there is a space in path (Program Files).

The correct way to run VisualVM on Windows using the AdoptOpenJDK11 installed with the default settings is visualvm.exe --jdkhome "C:\Program Files\AdoptOpenJDK\jdk-11.0.6.10-hotspot" (path to JDK in quotes).

I don't see any bug here, works exactly as designed and expected.

fukasawah commented 4 years ago

fyi.

eg.)JAVA_HOME=C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot

Use --jdkhome option

Its works.

It does not work...

(...Why allow trailing slash, but disallow trailing backslash?)

Use registry

ref: https://docs.oracle.com/javase/9/install/installation-jdk-and-jre-microsoft-windows-platforms.htm#JSJIG-GUID-47C269A3-5220-412F-9E31-4B8C37A82BFB

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft]

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit]
"CurrentVersion"="1.8"

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.8]
"JavaHome"="C:\\Program Files\\AdoptOpenJDK\\jdk-8.0.242.08-hotspot"
Borwe commented 4 years ago

fyi.

eg.)JAVA_HOME=C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot

Use --jdkhome option

Its works.

* `visualvm.exe --jdkhome "C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot"`

* `visualvm.exe --jdkhome "C:/Program Files/AdoptOpenJDK/jdk-8.0.242.08-hotspot"`

* `visualvm.exe --jdkhome "C:/Program Files/AdoptOpenJDK/jdk-8.0.242.08-hotspot/"`

It does not work...

* `visualvm.exe --jdkhome "C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot\"`

(...Why allow trailing slash, but disallow trailing backslash?)

Use registry

ref: https://docs.oracle.com/javase/9/install/installation-jdk-and-jre-microsoft-windows-platforms.htm#JSJIG-GUID-47C269A3-5220-412F-9E31-4B8C37A82BFB

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft]

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit]
"CurrentVersion"="1.8"

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.8]
"JavaHome"="C:\\Program Files\\AdoptOpenJDK\\jdk-8.0.242.08-hotspot"

Yup, that was the problem I had.

PAStheLoD commented 4 years ago

Hello,

Just one more datapoint. Using Win10, installed via Scoop (MCOfficer's bucket), which basically downloads the archive and decompresses it. And having an AdoptJdk14 hotspot installed (again just put somewhere) and using --jdkhome does not work.

But editing the JDKhome config seteting in etc/visualvm.conf works.

jisedlac commented 4 years ago

Using --jdkhome or editing etc/visualvm.conf should have the same effect. Can you please share your command to start VisualVM using the --jdkhome switch and the working visualvm.conf file?

PAStheLoD commented 4 years ago

Thanks for the quick response! Now I cannot reproduce it :o --jdkhome works. (Reverted to original .conf file and copied the path to JDK directly into powershell console and visualVM started.)

Interestingly if I supply a wrong path I get the confirmation dialog asking me whether I'd like to try the default. (And then I get the error popup.)

Hm, looking back at the console log, it seems I mistyped jdkhome before :(

Sorry for the false alarm!

manueljordan commented 4 years ago

I just downloaded and unzipped the 2.0.1

When I execute visualvm.exe through either double click or through a command terminal appears:

88

I can execute in peace the following commands and appears their respective results:

I am working with OpenJDK 11

Well, according with the official documentation

Download indicates:

First Steps

1. Unzip the downloaded archive. The archive already contains the top-level visualvm directory.
2. Start VisualVM by invoking the binary appropriate for your OS:
visualvm\bin\visualvm.exe or visualvm/bin/visualvm
You may provide additional options to define JDK and/or VisualVM user directory:
--jdkhome "<path to JDK>" --userdir "<path to userdir>"
3. Check out the Getting Started document, it's designed to help you start using VisualVM.

And Getting Started (referred just above in its point 3) indicates:

Starting VisualVM

To start VisualVM on Windows, run the visualvm.exe program that is in the \bin folder 
under the VisualVM install folder. On Unix or Linux use the visualvm shell script that is 
in the /bin folder under the VisualVM install folder. You may specify the JDK which runs
VisualVM and/or user directory using command line parameters or by modifying 
etc\visualvm.conf file. Example command for starting VisualVM with custom JDK and 
userdir on Windows is:

  visualvm.exe --jdkhome "C:\Software\Java\jdk1.6.0" --userdir "C:\Temp\visualvm_userdir"

Therefore:

Bug

JAVA_HOME is ignored

Solution

Two ways

One: through the command parameter:

From above, is mandatory use "" and not use =

Therefore - for example:

Two: in the etc\visualvm.conf file - almost in the bottom add:

From above, is mandatory use "" and use =

I hope it helps for all developers arriving to this thread.

breun commented 3 years ago

Another data point:

I have various flavours of JDK 8, 11 and 15 installed on macOS 10.15.6:

% /usr/libexec/java_home -V
Matching Java Virtual Machines (7):
    15, x86_64: "OpenJDK 15"    /Library/Java/JavaVirtualMachines/openjdk15/Contents/Home
    11.0.8, x86_64: "OpenJDK 11.0.8"    /Library/Java/JavaVirtualMachines/openjdk11-openj9/Contents/Home
    11.0.8, x86_64: "GraalVM CE 20.2.0" /Library/Java/JavaVirtualMachines/openjdk11-graalvm/Contents/Home
    11.0.8, x86_64: "OpenJDK 11.0.8"    /Library/Java/JavaVirtualMachines/openjdk11/Contents/Home
    1.8.0_265, x86_64:  "OpenJDK 8" /Library/Java/JavaVirtualMachines/openjdk8/Contents/Home
    1.8.0_265, x86_64:  "OpenJDK 8" /Library/Java/JavaVirtualMachines/openjdk8-openj9/Contents/Home
    1.8.0_262+10, x86_64:   "GraalVM CE 20.2.0" /Library/Java/JavaVirtualMachines/openjdk8-graalvm/Contents/Home

/Library/Java/JavaVirtualMachines/openjdk15/Contents/Home

I have JAVA_HOME set to JDK 8:

% echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/openjdk8/Contents/Home

When I try to run VisualVM.app I get this dialog saying I should use JDK 8 to JDK 14 and that Java 15 is not supported:

Schermafbeelding 2020-09-21 om 16 18 02

When I explicitly pass $JAVA_HOME via --jdkhome VisualVM does start as expected:

% /Applications/VisualVM.app/Contents/MacOS/visualvm --jdkhome $JAVA_HOME

I would expect VisualVM to default to using $JAVA_HOME by default.

jku1995 commented 3 years ago

VisualVM requires the JRE.

thurka commented 3 years ago

VisualVM requires the JRE.

No, VisualVM requires JDK, not JRE.

pavi2410 commented 3 years ago

If you have JAVA_HOME env var set, you can run:

visualvm --jdkhome "%JAVA_HOME%"

and make a shortcut if you want launch VisualVM by double-clicking it.

firehooper commented 3 years ago

`::visualvm.bat under bin

%~d0

cd %~dp0

visualvm.exe --jdkhome "%JAVA_HOME%"

pause

`

HarishA-DotCTech commented 3 years ago

Thanks for the report! Please verify that using the "--jdkhome" parameter works for you - see the First Steps section at the bottom of http://visualvm.github.io/download.html.

This solution worked greatly

artmotion commented 2 years ago

Got the same error and just used the "--jdkhome" parameter in this way: visualvm --jdkhome %JAVA_HOME%

baseely commented 2 years ago

You may or may not need to surround your JAVA_HOME env. variable with double quotes as: visualvm --jdkhome "%JAVA_HOME%" This worked fine for me!

lost22git commented 1 year ago

visualvm --jdkhome $env:JAVA_HOME in powershell

mkarg commented 1 year ago

I confirm that trailing backslash produces the problem. Can someone please fix that? Thanks! :-)

lbalazscs commented 1 year ago

As a workaround for the trailing backslash problem, the following .bat file works for me:

@echo off

REM Remove the trailing backslash from JAVA_HOME (if it exists)
if "%JAVA_HOME:~-1%"=="\" (
  set JAVA_HOME=%JAVA_HOME:~0,-1%
)

visualvm.exe --jdkhome "%JAVA_HOME%"
OndrejSpanel commented 9 months ago

Running visualvm.exe both from Explorer and from Command Prompt shows "Cannot find Java 1.8 or higher." dialog. This is expected because the VisualVM launcher searches for the JavaSoft registry keys on Windows, which is missing. JAVA_HOME is not read by the launcher.

works exactly as designed and expected

Could you consider changing the design? What is the rationale? Why does the launcher read JavaSoft registry and not JAVA_HOME?

ipcm27 commented 8 months ago

--jdkhome worked for me. What I did: 1) on the commando pronpt: cd to the bin folder, then 2 )visualvm --jdkhome

https://visualvm.github.io/docs/command-line-options.html

thurka commented 3 months ago

Launcher was changed to also use JAVA_HOME and JDK_HOME environment variables to find JDK. This hopefuly improves the situation on Windows platform.

thurka commented 1 month ago

Fix is part of VisualVM 2.1.9