java -version doesn't display the value of JAVA_HOME - java

I've installed jdk 7 and set up the "JAVA_HOME" to this version. Then, I've installed jdk 6 and I've updated the "JAVA_HOME" to point to jdk 6. After closing and reopening the system, when typing "java -version", I got always :
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) Client VM (build 24.0-b56, mixed mode, sharing)
However, when typing
echo %JAVA_HOME%
I got :
C:\Program Files\Java\jdk1.6.0_45
I didn't understand why java -version don't display the value of "JAVA_HOME"

Java 7 puts a java.exe in c:\windows\system32. You could try to delete these exe's, but I'm not sure Windows will allow it, or restore it after a reboot.
If you want to override it, you must put %JAVA_HOME%\bin as first entry in your PATH, before c:\windows\system32.

Which java starts when you run java -version depends on the PATH env variable, not JAVA_HOME. OS will be looking for java.exe (Windows) like for any other program

if you run java on your command window, it takes java from the PATH variable. JAVA_HOME is used my maven etc...

I believe your PATH variable is pointing to JAVA version 1.7.0_40/bin directory.

According to my understanding, this is nothing to do with your JAVA_HOME environment variable. You are getting java version from C:\windows\system32\java.exe.
If you don’t want that behaviour then in system variables section put %JAVA_HOME%\bin as starting element (Of course you should have JAVA_HOME). (I thought of adding image but I dont have enough reputation to do so :( )

Related

How to know the jdk version on my machine?

I have recently uninstalled JDK 11 and installed JDK 8. For confirmation, I want to check which JDK is installed on my Windows 10 machine. I typed java -version on cmd then get the error message
java is not recognized as an internal or external command
How to know which JDK version installed on my PC?
you might need to add path in environment variables which you can find in Control Panel
open the Jdk where you installed and add until /bin in the path in environment variables.
Add until /bin in path variable in System Variables which is residing in Environment Variables.
Then do
java -version
which might show up.
If still problem persists, try restarting your pc and see.
You need to update your Windows path to include your %JAVA_HOME%\bin directory. %JAVA_HOME% is the directory that you installed Java into and is also an environment variable that you need to configure for command line execution of your applications. You can edit both of these in the Windows control panel and you should restart.
When you run java -version you will see the internal version number. This is explained here: https://en.wikipedia.org/wiki/Java_version_history.
Basically, you can ignore the 1. when reading version number. The _xxx is a reference to the most recent patch or build release.
On Windows 10, this required mapping the environment variable for JAVA_HOME to the JDK installation directory. Use these steps:
Run the installer for the JDK. (available for windows here: https://www.oracle.com/java/technologies/downloads/#jdk17-windows)
windows key -> Environment Variables, select the only result
In the System Properties window that opened, select Environment Variables
Select new button under the User variables section
Variable name: JAVA_HOME, Variable Value: <The JDK filepath from step 0>
ok all open menus
Close any open cmd prompt windows
open a new cmd window and type echo %JAVA_HOME% It should print the installation path for the JDK.
To get your jdk location in Windows, run this at a command prompt:
where java
This lists any and all locations of java.exe, including from your JAVA_HOME. For example, the 3rd line here reflects my JAVA_HOME location, where I'm pointing to JDK 8:
C:\Users\me> where java
C:\Program Files\Common Files\Oracle\Java\javapath\java.exe
C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe
C:\Program Files\Java\jdk1.8.0_202\bin\java.exe
Note for comparison that java -version does not reflect my JAVA_HOME location and in fact shows java version 11 instead of 8:
C:\Users\me> java -version
java version "11.0.15" 2022-04-19 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.15+8-LTS-149)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.15+8-LTS-149, mixed mode)
This is confusing because my Java compiles (e.g., via mvn) use JDK 8 since that's what my JAVA_HOME is pointing to. (I'm not even sure where the version 11 it found came from; possibly from when I installed maven.)
Determining the difference between the JRE and JDK you're running has never been straightforward. Seems like java -version used to be a way to do this, but no longer.
Adding to the complexity, you can also supposedly get your Java version info from Control Panel > Programs > Java > About. For me, that shows Version 8. That's despite java -version showing version 11.0.15. And it doesn't change even if I point my JAVA_HOME to JDK 11.
Note that this answer is also helpful. In my case, that helped me determine that I have java.exe and javac.exe at C:\Program Files (x86)\Common Files\Oracle\Java\javapath and C:\Program Files\Common Files\Oracle\Java\javapath. Depending on which one I have listed first in my Path variable, I get different results when i run java -version or java --version. The former seems to work when Java 8 is listed first; the latter when Java 11 is first.

'jshell' is not recognized as an internal or external command

I am using the 'jshell command in my machine it is not recognised. But java command is working fine. is there any environment setup for jshell in jdk 10
C:\Users\Kannan
λ jshell
'jshell' is not recognized as an internal or external command,
operable program or batch file.
C:\Users\Kannan
λ java -version
java version "10" 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+46)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode)
jshell is a part of JDK 10 and it's located in the %JAVA_HOME%\bin folder on Windows.
Possible problems:
You installed JRE 10 only (instead of JDK 10). jshell is NOT part of the JRE.
%JAVA_HOME%\bin is not part of the PATH system variable.
See also: Environment variables for java installation
check if jshell is installed with your Java environment. ls [JAVA-INSTALLEDPATH]/bin
if jshell does not exist download appropriate JDK
if jshell is present append path in your environment profile or use full path.
You need to add the bin folder of your Java Development Kit (JDK) installation to the PATH environment variable. The java command works, because the JRE installs a copy of the java.exe executable in C:\ProgramData\Oracle\Java\javapath\ and adds it to the PATH.
For editing the PATH, see How do I set system environment variables in Windows 10? on superuser
Had the same problem. I set JAVA_HOME and wrapped it with double quotes ("").
JAVA_HOME="C:\Program Files\Java\jdk1.8.0_144"
What you have is a JRE. You should install JDK and set JAVA_HOME. Then jshell will start working properly.
The same problem has happened to me.
Uninstall and Install the right JDK from Oracle website.
steps:
1. Control Panel > System & Security > System > Change Setting > Advance > Change Environment Variable > System Variable > New > Variable Name:"Path" & Variable Value: "C:\Program Files\Java\jdk-10.0.1\bin" (address of the bin)> ok
You are good to go.
Here's the link to the video that helped me.
https://www.youtube.com/watch?v=UokTaTwckDw
Run you command prompt as Administrator. window -> cmd -> Run as Administrator then type jshell.
Remove any default path variable that is set in envirnoment variables when you install JDK apart from JAVA_HOME.Then update your JAVA_HOME to /path of JDK 9 OR Above/

How to change the current java version through environment variables?

I have a POS that has to be run on java7 and I checked the current version by typing java -version on the command prompt and got the following output:
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)
Since I want java7, I thought of editing the environment variables to point to jdk1.7 and when I checked the variables, it was as follows:
I see that it is already pointing to java7 jdk. How is this possible and how to run java7?
UPDATE:
The system variables PATH
I think I figured out the problem but not the solution. The first system variable - C:\ProgramData\Oracle\Java\javapath is causing the trouble here, which has a java.exe in the given path. It might be a product of me directly upgrading java from java7 to java8. But if I remove it, it causes an error in cmd. What could be done?
First thing is, We are not able to see full value of "PATH" variable under user variables section.
I see that it is already pinting to java7 jdk. How is this possible
Usually "JAVA_HOME" is set by apache tomcat service installer since tomcat can only find Java through "JAVA_HOME" variable.
and how to run java7?
In the PATH variable after ruby and python find whether there is jdk 1.8 mentioned anywhere. And replace that with the jdk 1.7 path or you can refer JAVA_HOME in PATH as %JAVA_HOME%
eg: PATH = C:\Ruby....;%JAVA_HOME%\bin;
You are mixing two things.
1. Java home : if you try to echo JAVA_HOME it will point to jdk1.7 ... as you are mentioning. Many of the programs/applications use this env variable to locate java.
2. Path variable : This is where the executables are located. So if you try to run some program/executable, system will try to locate the executable using list of path items. So this should point to jdk 7 if you want to use java directly.
After hours of research I found the problem and the solution, which was quite simple.
Since I used the java notification to upgrade to java8, that had entered the C:\ProgramData\Oracle\Java\javapath to the system variables which had been sort of a pointer to the new jdk.
In order to use java7, I simply needed to bring the jdk1.7 pointer to the top.

Getting different version for java and javac

Before marking it duplicate FYI I have already read How can I change the Java Runtime Version on Windows (7)? and How to set path for Jre 6 when jre 7 installed?.
I have both Java7 and Java8 in my machine. I have
JAVA_HOME = C:\Program Files\Java\jdk1.7.0_60
PATH = ...;%JAVA_HOME%\bin;....
but I am getting
C:\>java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
C:\>javac -version
javac 1.7.0_60
I want to set JRE to 1.7 too. How to do that?
You will probably have to edit your path environment variable.
If you want to check what's in your PATH environment variable in an organized fashion, run:
echo %path:;=&echo.%
Make sure the 1.8 is not on the path or if you want it there make sure it appears after 1.7.
To edit it, go to My Computer > Properties > System Properties > Advanced tab > Advanced section > Environment Variables.
Also check what is actually launched when you run java from the command line, run the following command:
where java
It will show you what windows runs when you request java.
To solve the problem, remove or change the name of java.exe and javaw.exe into System32 folder:
Prepend the System Variable's Path with JRE bin's path.
where java did work for me. I found there is another version of java associated with the SPSS (1.8.0). Uninstall SPSS and the problem solved.
The solution that worked for me was:
In "Path" variable replace "C:\ProgramData\Oracle\Java\javapath;" with %JAVA_HOME%\bin where JAVA_HOME variable was set to "C:\Program Files\Java\jdk1.7.0_60"

Two installed javas on same pc. The one with lower version can not be called

I have two javas installed on my pc. jdk1.7.0_45 (x64) and jdk1.6.0_45(x86). I want that default java on my machine would be jdk1.6.0_45(x86). I added JAVA_HOME with value C:\Program Files (x86)\Java\jdk1.6.0_45 and added C:\Program Files (x86)\Java\jdk1.6.0_45\bin to system path, but still when i type in command prompt "java -version" it says:
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
I have no idea why the things are like that, because my OS should see jdk1.7.0_45 (x64) version. Why is that so?
I use windows 8
edit:
after setting java home to jdk1.7.0_45 (x64) folder and updating path accordingly javac works, but then I set java home and path to jdk1.6.0_45(x86) javac does not work.
You need to add the %JAVA_HOME%\bin to the very beginning of your path. This is because Java is installed in your %SystemRoot%\system32, too. If you add the %JAVA_HOME%\bin to the beginning of your path the Java installed in your JAVA_HOME will be used.
JAVA_HOME does not help when we run java from command line, you should fix PATH system var
I added JAVA_HOME with value C:\Program Files (x86)\Java\jdk1.6.0_45
In Windows, you should excape spaces in the path: JAVA_HOME="C:\Program Files (x86)\Java\jdk1.6.0_45". But the best way is to set Java to a folder that doesn't have spaces in its path. For example, I use C:\Java\Java6
and added C:\Program Files (x86)\Java\jdk1.6.0_45\bin to system path
Probably you added after path to the Java 7. Make sure that Java 7 doesn't exist in the system path.

Categories