Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java -version and javac -version showing different versions

Tags:

java

I have java 7 and java 8 both installed on my windows system under C:\Program Files\Java

In the environment's path I specified the path of java 7 like this.

%JAVA_HOME%/bin where JAVA_HOME = C:\Program Files\Java\jdk1.7.0_17

But when I type javac -version it shows javac 1.7.0_17 which makes sense

but when I do java -version it shows

java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

enter image description here

Any idea what may be the problem here?

Edit The installed folder : enter image description here

And one more thing echo %PATH% has only one occurence of JDK that is for java 7 and no occurence for JRE found in it.

like image 568
SparkOn Avatar asked Aug 01 '14 06:08

SparkOn


4 Answers

The issue is occuring most probably because you have a JRE in your PATH, before your JDK. This usually happens when we add JDK in the PATH and do not remove previously added JREs. Thus when you do java it points to the JRE and when you do javac it points to the other version/JDK (since the JRE does not have a javac in it)

If you don't have any JREs in your path, then you can copy your %JAVA_HOME% and paste it first in your path variable (make sure its before the system32 path).

A possible reason for why this works is explained in this answer:

JRE also puts a java.exe to c:\Windows\System32, that's how first command is resolved. Second command is resolved by the C:\Program Files\Java\jdk1.7.0_02\bin entry in your PATH variable. If (and when) you are developing from the command prompt, you have to adjust the PATH variable so that C:\Program Files\Java\jdk1.7.0_02\bin is before c:\Windows\System32.

like image 76
Mustafa sabir Avatar answered Nov 02 '22 11:11

Mustafa sabir


Go to Environment Variables in your windows machine. In User Variables : Make sure to set - Your user variable "JAVA_HOME" value to "C:\Program Files\Java\jdk-xxxx\bin" where "jdk-xxx" is the version of your jdk.

In System Variable : - Add same "C:\Program Files\Java\jdk-xxxx\bin" value to "Path" variable. make sure to move the added value on top of all values.

Now try running java -version and javac -version. worked for me. :) Here i've linked my screenshot

like image 10
Dhananjay Yelwande Avatar answered Nov 02 '22 09:11

Dhananjay Yelwande


Ok, as you said that you have no JRE on your path, I assume that where java (if you have Windows 7) will give you C:\Windows\System32\java.exe.

Changing the java running

Try using the Java-Settings Dialog from the control panel to change the Java System Version, which is currently active. This should change the version java -version is returning. If this does not work, you will probably need to reinstall the Java version of which you want to run the java command, specify the path explicitly, write you own wrapper (which works if you are in the same directory as the wrapper) or place the JRE path before C:\Windows\System32\ onto your path (don't know if last option really is a good one).

A wrapper could look just like this:

@"C:\Program Files\Java\jre7\bin\java.exe" %*

and you can either name it java.bat (where it will work if you are in the same directory or put it in PATH before C:\Windows\System32\java.exe or you could name it java7.bat and put it anywhere on you path to be able to run the Java 7 JRE if you desire to do so.

A wrapper is also a good option if you want to change the JAVA_HOME when running.

Changing the javac running

If you want to run a different javac hit Windows + Pause and open the system dialog to change the PATH so it contains the path to your JDK 8 instead of your JDK 7. You will need to restart your command line for changes to show.

like image 6
TheConstructor Avatar answered Nov 02 '22 10:11

TheConstructor


It's all about $JAVA_HOME system variable

In my case

for Windows
(moving jdk8 -> jdk9 -> jdk11) I had a garbage left by jdk8 in PATH (before JAVA_HOME:"C:\path\java11")

so I just remove C:\ProgramData\Oracle\Java\javapath_jdk8 from system variables

// or place it below javapath_jdk11

for MAC
edit .zshrc to have

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-???.jdk/Contents/Home"
like image 6
bortunac Avatar answered Nov 02 '22 10:11

bortunac