Finding the JRE on Windows - java

I know this question is going to sound very stupid but here goes nonetheless. I need to bundle the new version of the JRE with my applicaiton and I cannot find either a version of the JRE that is not in .exe nor can I find where the jre is installed to on Windows 7 (windows 7 search cannot find anything so it is not helpful). Can anyone tell me where I can download a version of the JRE the would be good to bundle or where I can find the path that windows installed the JRE too?

Not sure about Windows 7 but on Windows XP the installation defaults to C:\Program Files\Java\jre6

corsiKa is correct about Windows 7
I found that the file path for jre is
C:\Program Files (x86)\Java\jre7
For my purposes I needed to install the Connector/J JDBC driver in the ext directory.
jre7\lib\ext\

Alternatively, install a JDK, if you haven't done it yet, and take the jre folder in its installation directory.
The JDK can also install it in Program Files (64-bit on 64-bit Windows, always on 32-bit Windows) or Program Files (x86) (32-bit on 64-bit Windows) as explained above.
It also installs java.exe, javaw.exe and javaws.exe in C:\Windows\system32
It will be the last installed version...

I have found another, more generic solution that I'm using in Powershell. The problem is that Java is now using symlinks to java, javaw and javac, so you can't always rely on using "where.exe java" because it returns the symlink.
I now rely on Java to report where it's actually running from by using verbose mode and parsing the output.
$javapath=((java -verbose -version | ? {$_ -match "Opened" }).replace("[Opened ","")).replace("\lib\rt.jar]","")
It will find the path that java reports it's actually using and return the installation directory. The only problem I haven't quite resolved is that it outputs extra information because of the "-version" option, but the only other option is the help, which is worse. However, when run from a script, the console output can simply be ignored. If someone else has a way of keeping it quiet, I'd like to hear it.

Related

Vscode extension error, java runtime could not be located on window subsystem for linux

I have installed the java runtime in the window subsystem for Linux (Ubuntu), and the Vscode is installed on the windows 10 system.
I did not install java runtime in windows 10 system. When I use vscode to edit java, it usually pop up a notice says the "java runtime could not be located".
I have point the vscode "java.home" to the java jdk directory of window subsystem linux file folder, which is C:\\Users\\Myusername\\AppData\\Local\\Packages\\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\\LocalState\\rootfs\\usr\\lib\\jvm\\. In the folder, it has:
java-8-openjdk-amd64 directory, and three files
.java-1.8.0-openjdk-amd64.jinfo,
default-java
java-1.8.0-openjdk-amd64.
But however, the vscode still pop out the notice that the java.home variable defined in VS Code settings does not point to a JDK.
Can anyone let me know how to set up the vs code properly so that it can locate the JDK file in the window subsystem for Linux (WSL)?
Thanks in advance.
It won´t work like this because you are trying to use a jdk builded for linux on windows.
It is the same as if you download the jdk for linux and try to execute on windows.
As for the solution, unfortunately there is no solution right now.
However you can call your java and javac directly on terminal using WSL
wsl javac
You can´t point the java_home using wsl.
Maybe in the future the guys from Microsoft can make the trick. I hope so.

pyCharm debugging: JRE without jstack?

I need to debug pyCharm community version on Windows 7 and try to follow what their manual says:
JStack
This command line utility is provided with the JDK installation and
can be found in JAVA_HOME\bin directory. Make sure to use the same or
close JDK version to the one the IDE runs under (see Help | About). It
will not work if IDE runs under 32-bit JDK and you run jstack from the
64-bit JDK distribution and vice versa.
To use jstack you need the IDE process identifier (PID). PID can be
obtained using jps utility that is located in the same directory as
jstack.
jps -mv
My pyCharm: help/about reads: JRE 1.7.0_40 b43 x86
How ever, in C:\Program Files (x86)\Java\jre7\bin there is no jps and no jstack. I'm not used to the command line in Windows - perhaps I'm doing something wrong here? Am I supposed to look in a different directory? I could not find any system wide environmental variable JAVA_HOME what could give any clues here.
Well, you need a Java Development Kit (JDK) instead of a Java Runtime Environment (JRE).
It is a bit larger but has many other dev tools (like jstack, jps, jvisualvm, etc., even the source code of Java). Download and install one to see the differences.

Failed to load jvm.dll (Eclipse) [duplicate]

When I try opening Eclipse, a pop-up dialog states:
Failed to load the JNI shared library "C:/JDK/bin/client/jvm.dll"`.
Following this, Eclipse force closes.
Here's a few points I'd like to make:
I checked to see if anything exists at that path. It does exist.
My Eclipse and Java SE Development Kit are both 64-bit. I checked my system, and it can handle 64-bit.
I've searched for this problem on Google and on Stack Overflow, and the only answer I found was to download the 32-bit versions of JDK and Eclipse.
Downloading the 32-bit versions is something I only want to do as a very last resort.
What would be suggested to solve this issue?
You need a 64-bit trio:
64-bit OS
64-bit Java
64-bit Eclipse
Working pairings of OS, JDK and Eclipse:
32-bit OS | 32-bit JDK | 32-bit Eclipse (32-bit only)
64-bit OS | 32-bit JDK | 32-bit Eclipse
64-bit OS | 64-bit JDK | 64bit Eclipse (64-bit only)
I had several JDKs and JREs installed.
Each of them had their own entry in the PATH variable, all was working more or less.
Judging from the PATH variables, some installations were completely useless, since they were never used. Of course, the "inactive" Javas could be referenced manually from within Eclipse if I needed, but I never did that, so I really did not need them. (At least I thought so at that time...)
I cleaned up the mess, deinstalled all current Java's, installed only JDK + JRE 1.7 64-bit.
One of the Eclipse 'installations' failed afterwards with the Failed to Load the JNI shared Library and a given path relative to the fresh installed JDK where it thought the jvm.dll to be.
The failing Eclipse was the only one of all my IDEs that was still a 32-bit version on my otherwise all-64-bit setup.
Adding VM arguments, like so often mentioned, in the eclipse.ini was no use in my case (because I had only the wrong JDK/JRE to relate to.)
I was also unable to find out how to check if this Eclipse was a 32-bit or 64-bit version (I could not look it up in the Task Manager, since this Eclipse 'installation' would not start up. And since it had been a while since I had set it up, I could not remember its version either.)
In case you use a newer JDK and a older JRE you might be in for trouble, too, but then it is more likely a java.lang.UnsupportedClassVersionError appears, IIRC.
Make sure your eclipse.ini file includes the following lines.
-vm
C:\path\to\64bit\java\bin\javaw.exe
My eclipse.ini for example:
-startup
plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.2.R36x_v20101222
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
-vm
C:\Program Files\Java\jdk1.6.0_32\bin\javaw.exe
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
Use OS and Eclipse both 64 bit or both 32 bit keep same and config eclipse.ini.
Your eclipse.ini file can be found in your eclipse folder.
I had same problem
I resolved it by installing 64 bit JVM from
http://www.java.com/en/download/manual.jsp
This error means that the architecture of Eclipse does not match the architecture of the Java runtime, i.e. if one is 32-bit the other must be the same, and not 64-bit.
The most reliable fix is to specify the JVM location in eclipse.ini:
-vm
C:\Program Files (x86)\Java\jdk1.7.0_55\bin\javaw.exe
Important: These two lines must come before -vmargs. Do not use quotes; spaces are allowed.
Another option is:
Create a shortcut to the Eclipse.exe. Open the shortcut and change the target to:
"C:\Program Files\eclipse\eclipse.exe" -vm "c:\Program Files\Java\jdk1.7.0_04\bin\javaw.exe"
For your installation, make sure the locations point to the correct Eclipse installation directory and the correct javaw.exe installation directory.
(The 64/32 bit versions of Eclipse and Java need to be the same, of course.)
I have multiple versions of Java installed, both Sun JDK & JRockit, both 32 bit and 64-bit, etc. and ran into this problem with a fresh install of 64-bit Eclipse for Java EE (JUNO).
What did NOT work:
64-bit trio as suggested by Peter Rader:
I'm using 64-bit Eclipse on 64-bit OS (Windows 7).
I ensured Sun JDK 7 64-bit was the default java version. When I typed "java -version" from command line (cmd.exe), Sun JDK 7 64-bit was returned...
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)
This did not resolve the problem for me.
What DID work:
Adding -vm option to eclipse.ini as suggested by Jayesh Kavathiya:
I added the following to eclipse.ini:
-vm
C:/apps/java/jdk7-64bit/bin/javaw.exe
Note:
I did not have to uninstall any of the various versions of JDK or JRE I have on my machine.
For a missing jvm.dll file, we can provide the path of the dll file in eclipse.ini file as
-vm
C:\Progra~1\Java\jdk1.6.0_38\jre\bin\server\jvm.dll
Here it is important to remove any space in the path and the double quotes.
It worked for me when i removed the quotes and space.
I hope it helps someone.
I had a similar problem. It was solved doing the following.
Move Eclipse to Program Files (not to Program Files (x86)).
Remove the path to the 32-bit version of Java from the 'path' environment variable.
I have both versions of Java installed, but Eclipse kept trying to use the 32-bit one.
Sure, you need to have a compatible version of JDK and Eclipse, but you also need to add in the eclipse.ini file the below lines:
-vm
yourdrive\java\bin
Make them the first two lines of your eclipse.ini file.
As many folks already alluded to, this is a 32 vs. 64 bit problem for both Eclipse and Java. You cannot mix up 32 and 64 bit. Since Eclipse doesn't use JAVA_HOME, you'll likely have to alter your PATH prior to launching Eclipse to ensure you are using not only the appropriate version of Java, but also if 32 or 64 bit (or modify the INI file as Jayath noted).
If you are installing Eclipse from a company-share, you should ensure you can tell which Eclipse version you are unzipping, and unzip to the appropriate Program Files directory to help keep track of which is which, then change the PATH (either permanently via (Windows) Control Panel -> System or set PATH=/path/to/32 or 64bit/java/bin;%PATH% (maybe create a batch file if you don't want to set it in your system and/or user environment variables). Remember, 32-bit is in Program files (x86).
If unsure, just launch Eclipse, if you get the error, change your PATH to the other 'bit' version of Java, and then try again. Then move the Eclipse directory to the appropriate Program Files directory.
The answers above me got me tempted so much, that I decided to dry run all the possible combinations with OS, Eclipse and JVM trio. Anyway, whoever is digging down and reading my post, check the following as a hot spot (I am Windows 7 user).
You understand Program Files and Program File (x86) are two different folders... x86 stands for the 32-bit version of programs and the former is the 64-bit version.
If you have multiple versions of Java installed with different bitness and release versions, which is bound to happen with so many open source IDEs, managers, administrative consoles, the best option is to set the VM argument directly in the eclipse.ini file. If you don't, Eclipse will go crazy and try searching itself which is not good.
Alternatively, get the same "bit" version of JRE and Eclipse and then create a new shortcut with the below target (replace the installed JRE and Eclipse location/path):
"C:\studio\eclipse.exe" -vm "C:\Program Files\Java\jre7\bin\server\jvm.dll" eclipse.vm="C:\Program Files\Java\jre7\bin\server\jvm.dll" java.home="C:\Program Files\Java\jre7" java.runtime.version=1.7.0
That should do the trick.
You can solve that problem as many other replicated. You need that Eclipse and the JDK be 32-bits or both on 64-bits. The architecture of the OS doesn't matter while the others remains on the same type of arquitecture.
One of the easy ways to resolve it is to copy the jre folder from installed the JDK into the Eclipse installation folder. Make sure that JDK you copy from is the same architecture as your Eclipse installation.
I had to configure my machine that way, because I run both Eclipse and Appcelerator Titanium Studio on my machine. The Studio needs 32-bit Java, while Eclipse needs 64-bit.
Yes, just make sure your versions of Eclipse and JDK are both 64-bit. Just to make sure everything is correct uninstalled JDK and install it in Program Files and not in Program Files (x86). At least that resolved my problem.
Just check the PATH environment variable. In My Computer - > Properties -> Advanced System settings -> Environment Variables -> (left upper window "User Variables for "some name of PC"" ) just check the PATH variable. If it doesn't exist create it with the following -- > C:\Program Files (x86)\Java\jre7\bin <--
I was faced with the same problem after had updated my Eclipse. I've found that the path asked 64-bit version, but I had the 32-bit in dif path. It was helpful for me. P.S.: I have a 64-bit OS, 32-bit JRE and 32-bit Eclipse. All works fine :)
You should uninstall all old [JREs][1] and then install the newest one... I had the same problem and now I solve it. I've:
Better install Jre 6 32 bit. It really works.
Downloaded 64 bit JVM from site and installed it manually and updated the system path variable. That solved the issue.
Default JVM is installed in my system was in "C:\Program Files
(x86)\Java\jre7"
Manually installed JVM got installed in
"C:\Program Files\Java\jre7" and after updating this pate to system
path variable it worked.
Thank you misterfrb, I realised that Eclipse was giving this error, because I had just installed Oracle 10g Developer suite, and it was looking for the jvm.dll file in the C:\DevSuiteHome_1 folder (I must have opted to install JDK again along with developer suite).
After removing the DevSuiteHome lines from the paths variable and adding the correction location for 64-bit jvm.dll (not sure if this was necessary, didn't try without), Eclipse worked again, and Developer suite still does too.
Simple, I have a 64-bit OS, 32-bit Eclipse and both JDK 32 & 64 installed... I just uninstalled the 64-bit JDK and Eclipse is working fine..
I had the same issue after upgrading from Java 6 to Java 7. After I removed Java 6 (64 bit) and reinstalled Java 7 (64 bit), Eclipse worked. :)
It is crucial to add the -vm parameter and its value on 2 lines AT THE BEGINNING of the eclipse.ini
-vm
C:\Program Files\Java\jdk1.7.0_45\bin\javaw.exe
You have change proper version of the JAVA_HOME and PATH in environmental variables.
I want to previde another solution for this error, especially for who want to use 32-bit and 64-bit Eclipse in one system.
Eclipse will startup using the JRE/JDK in jre sub-directory if it exists. (STS or other eclipse based IDE also support this feature...)
The solution is create directory junction using mklink.exe command which exist in windows vista or newer version (junction.exe offer similar function for Windows 2000/XP)
Open the command line windows and exeute following command:
mklink /j "$ECLIPSE-HOME/jre" "$JDK_or_JRE_home"
Of course, if the Eclipse is for 64-bit Windows, the architecture of JDK/JRE must be the same.
Assume:
Eclipse for windows x86_64 is installed in d:\devTool\eclipse
JDK for windows x64 is installed in C:\Program Files\Java\jdk1.8.0
The command for creating the jre folder will be:
mklink /j "d:\devTool\eclipse\jre" "C:\Program Files\Java\jdk1.8.0"
BTW, delete directory junction will NOT delete any file. If you create a wrong link, you can delete it using file explorer or rmdir command.
rmdir "d:\devTool\eclipse\jre"
Make sure you are starting Eclipse with Administrator rights.
If you use whole 64-bit trio and it still doesn't work (I've come to this problem while launching Android Monitor in Intellij Idea), probably wrong jvm.dll is being used opposed to what your java expects. Just follow these steps:
Find the jvm.dll in your JRE directory:
C:\Program Files\Java\jre7\server\bin\jvm.dll
Find the jvm.dll in your JDK directory:
c:\Program Files\Java\jdk1.7.0_xx\jre\bin\server\
Copy the jvm.dll from JRE drectory into your JDK directory and overwrite the jvm.dll in JDK.
Don't forget to make a backup, just in case. No need to install or uninstall anything related to Java.
The same occurred to me. I had 64-bit Eclipse, but my JDK was 32-bit. So I installed the 64-bit version and it's OK right now.
I'm not sure why but I had the jre installed into my c:\windows directory and java.exe and javaw.exe inside my windows\system32 directory.
Obviously these directories were getting priority even AFTER adding the -vm flag to my eclipse.ini file.
Delete them from here fixed the issue for me.
On the download page of Eclipse, it should be written "JRE 32 bits" or "JRE 64 bits" and not "Windows 32 bits" or "Windows 64 bits".
Be sure to use the correct version compatible with your JDE, as answered previously.

Java not finding the proper path

I am having a problem with running java from cmd.exe.
When i type in 'java' this errors shows:
Error: could not open `D:\Program Files (x86)\Java\jre6\lib\i386\jvm.cfg'
The problem is, my java is not in jre6, but in jre7. The jre6 folder doesn't even exist anymore.
I've checked the path and all other environmental variables and java was not mentioned anywhere. So I updated path to point to D:\Program Files (x86)\Java\jre7\bin but that didn't help.
I am running Windows 7 64-bit so I also tried running java from 64-bit cmd.exe but it didn't help.
Is there anywhere else except path to look and change the way Windows looks for java?
The problem is that older JDKs copy java.exe among some other Java executables into C:\Windows\System32 which happens to be on the PATH before the new JDK/JRE location.
The solution is to delete java.exe and other Java related executables from System32 as they aren't required any more. This could however potentially break applications that depend on the older JDK/JRE and hence they may need to be re-configured.

How to silently install Java JDK into a specific directory on windows

On my development machine I always have to install Java 6 and Java 7 and I have to install each JDK in both, the 32 and 64 bit version, for testing purposes. Since the frequency of Java updates seems to be getting more and more ridiculous (twice per week by now?) each update requires me to un- and then re-install 4 JDKs. So this is getting really quite annoying and I would thus like to script this entire process.
My problem is, that by default each JDK versions installs into a directory-path that contains the update-number (default: "C:\Program Files\Java\jdk1.6.0_<update-nr>\"). To spare me from having to adapt tons of build-scripts I always manually strip the trailing "_<update-nr>" from the installation path and always install into the same "C:\Program Files\Java\jdk1.6.0" or "C:\Program Files\Java\jdk1.7.0", resp., for the 64-bit versions and into C:\Program Files (x86)\Java\jdk1.6.0" or "C:\Program Files (x86)\Java\jdk1.7.0", resp., for the 32-bit versions.
While I found out, how to specify the installation directory for a JRE installer (i.e. the Java runtime):
<jre-installfile>.exe [/s] [INSTALLDIR=<drive>:\<JRE_install_path>]
[STATIC=1] [WEB_JAVA=0/1] [WEB_JAVA_SECURITY_LEVEL=VH/H/M/L]
I did not yet find a similar description how to specify the installation directory for the JDK installer.
Does anyone know if and how one can specify the install path for the JDK installer, so that one can direct a silent JDK installation into a specific installation directory?
I could successfully install both x64 and x86 versions of JDK 8 update 60 including a public JRE with these commands:
Here JDK 1.8.60 (x86) with source code is going to C:\Java\x86\jdk1.8.0_60 and JRE to C:\Java\x86\jre1.8.0_60:
jdk-8u60-windows-i586.exe /s ADDLOCAL="ToolsFeature,SourceFeature,PublicjreFeature" INSTALLDIR=C:\Java\x86\jdk1.8.0_60 /INSTALLDIRPUBJRE=C:\Java\x86\jre1.8.0_60
In a similar way, JDK 1.8.60 (x64) with source code is going to C:\Java\x64\jdk1.8.0_60 and JRE to C:\Java\x64\jre1.8.0_60:
jdk-8u60-windows-x64.exe /s ADDLOCAL="ToolsFeature,SourceFeature,PublicjreFeature" INSTALLDIR=C:\Java\x64\jdk1.8.0_60 /INSTALLDIRPUBJRE=C:\Java\x64\jre1.8.0_60
See Oracle JRE installer options
I just found this article while searching... it specifies a parameter for INSTALLDIR.
http://makeitfaster.wordpress.com/2011/03/25/java-jdk-silent-install-on-windows/
jdk-7u2-windows-i586.exe /s ADDLOCAL="ToolsFeature,SourceFeature" INSTALLDIR="%CD%\jdk7u2"
I unfortunately had already installed on my dev machine, so i couldn't test...
One approach to avoid rewriting directories in scripts is to use symlinks (junctions on NTFS).
First, download the junction utility from SysInternals here:
http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx
then unzip, copy to some directory on the PATH, and run once to accept the licence.
Then you can create symlinks easily:
junction "C:\Program Files\Java\jdk1.6.0" "C:\Program Files\Java\jdk1.6.0_37"
junction "C:\Program Files (x86)\Java\jdk1.6.0" "C:\Program Files (x86)\Java\jdk1.6.0_37"
To delete some symlink:
junction -d "C:\Program Files\Java\jdk1.6.0"
You can also use mklink ( http://technet.microsoft.com/en-us/library/cc753194.aspx ) instead (and del for removal), but I prefer the simplicity and clarity of junction.
Try:
jdk-7u2-windows-i586.exe /s INSTALLDIR=\"C:\Program Files\JAVA\JDK\"
I just discovered a regression in the JDK7 installer that causes it to ignore INSTALLDIR. The last correct version is update 21.
I have filed a bug report and will let you know once Oracle replies.
UPDATE: It turns out that this was caused by an corrupt (incomplete) JDK installation. Once I uninstalled this version (Add/Remove Programs) the new installation ran just fine.
This is the way that works for me for JDK_7u55. I opted to have the JRE installed too:
PowerShell Commands
$strJavaInstallExe=<Your JDK executable>
$strJavaInstallDir=<The directory you want the JDK and JRE to install to>
$cmdInstallJava=$strJavaInstallExe+' /passive /log "'+$strJavaInstallDir+'\install.log" ADDLOCAL="ToolsFeature,SourceFeature,PublicjreFeature" INSTALLDIR="'+$strJavaInstallDir+'" INSTALLDIRPUBJRE="'+$strJavaInstallDir+'"'
Invoke-Expression $cmdInstallJava
Hope this helps!
EDIT - easier way
Execute jdk-7u60-windows-x64.exe /passive /log install.log INSTALLDIR:c:\pippo
Works with 7u45 and 7u60
OLD answer
The exe contains the msi installer. To extract is (for sure there are more elegant methods, but I know only this one)
Run the exe manually - you need to do it only the first time, to convert it to an msi
Grab the msi (and all other.cab file) from C:\Users\AppData\LocalLow\Sun\Java\jdx.x.y\jdk.x.y.z.msi
run msiexec /i jdkx.y.z.msi /passive INSTALLDIR:c:\pippo
file jreinstall.bat (example: storage in desktop) (replace jre for jdk)
#echo off
start /w %UserProfile%\Desktop\jre-8u65-windows-x64.exe /s
setx JAVA_HOME "C:\Program Files\Java\jre1.8.0_65"
exit

Categories