How to set the environment variables for Java in Windows (the classpath)?
-
2Which environment variables? The classpath and JAVA_HOME? Which platform (Linux/Windows)? Please elaborate – Wernsey Nov 04 '09 at 07:57
-
27I am alone in thinking it's too lame that the java installer doesn't update the path environment variable automatically? – Thomas Eyde Dec 28 '10 at 22:18
-
3@ThomasEyde - only problem with that idea is what if I want multiple JVMs on my machine - auto setting the path would then cause problems. – Richard Le Mesurier Nov 06 '13 at 08:05
-
6@Richard Le Mesurier: Just have a checkbox "set as new default JVM" in the installer... – Algoman Jan 20 '19 at 14:05
-
commenting for reference – Asker123 Feb 19 '20 at 19:19
17 Answers
Java SE Development Kit 8u112 on a 64-bit Windows 7 or Windows 8
Set the following user environment variables (== environment variables of type user variables)
JAVA_HOME :
C:\Program Files\Java\jdk1.8.0_112
JDK_HOME :
%JAVA_HOME%
JRE_HOME :
%JAVA_HOME%\jre
CLASSPATH :
.;%JAVA_HOME%\lib;%JAVA_HOME%\jre\lib
PATH :
your-unique-entries;%JAVA_HOME%\bin
(make sure that the longishyour-unique-entries
does not contain any other references to another Java installation folder.
Note for Windows users on 64-bit systems:
Progra~1 = 'Program Files'
Progra~2 = 'Program Files(x86)'
Notice that these environment variables are derived from the "root" environment variable JAVA_HOME
. This makes it easy to update your environment variables when updating the JDK. Just point JAVA_HOME
to the fresh installation.
There is a blogpost explaining the rationale behind all these environment variables.
Optional recommendations
- Add a user environment variable
JAVA_TOOL_OPTIONS
with value-Dfile.encoding="UTF-8"
. This ensures that Java (and tools such as Maven) will run with aCharset.defaultCharset()
ofUTF-8
(instead of the defaultWindows-1252
). This has saved a lot of headaches when wirking with my own code and that of others, which unfortunately often assume the (sane) default encoding UTF-8. - When JDK is installed, it adds to the system environment variable
Path
an entryC:\ProgramData\Oracle\Java\javapath;
. I anecdotally noticed that the links in that directory didn't get updated during an JDK installation update. So it's best to removeC:\ProgramData\Oracle\Java\javapath;
from thePath
system environment variable in order to have a consistent environment.
-
12
-
1Good answer. I also make a directory junction to my java installation that I can update whenever I install a new version (`mklink /j C:\devel\java8 "C:\Program Files\Java\jdk1.8.0_91"`). That way when I use cygwin or something that can't read windows env variables, I still have a quick way of swapping versions. And it's much easier to remember the shorter path without the minor version. – kghastie Jul 15 '16 at 19:00
-
I tried setting a JAVA_ROOT_PATH variable but JAVA_HOME didn't seem to like me using any environment variable for it's value. Is there a reason for this? – Eric Nov 05 '16 at 20:21
-
@Eric, can you explain what you mean with `JAVA_ROOT_PATH`? I haven't heard of this environment variable yet. – Abdull Nov 06 '16 at 21:18
-
4The `javapath` directory and symbolic links are created by the JRE installation (which is an optional process when installing the JDK) so if you didn't install the JRE you wouldn't have created javapath. Note that the `%JAVA_HOME%\jre` in your answer is the JDK's private JRE intended for the use of the Java compiler. It's not exactly the same as the public JRE. Also note that, as of 1.8u112, the JRE installation seems to have stopped creating symbolic links in `javapath` and instead creates hard links to .exes in `..\javapath_target_nnnnnnn\*.exe`. – Klitos Kyriacou Nov 21 '16 at 11:12
-
@KlitosKyriacou, thank you, I didn't yet know about the distinction *public vs. private JRE*. I compared both folder hierarchies and found only minor differences. So I guess it's save to set `JRE_HOME=%JAVA_HOME%\jre` whether or not the optional *JRE* is installed. In case there are objections, please comment. – Abdull Nov 21 '16 at 14:06
-
@Abdull I made a JAVA_ROOT_PATH env variable myself. I was trying to come up with a way to nest environment variables so if I ever updated java I would only have to update a JAVA_ROOT_PATH env variabe and change it's location. This would only work if you kept a static directory structure that held the jdk and jre. Was just an attempt at over engineering something that should be kept simple. :) – Eric Jan 05 '17 at 15:40
-
-
For me worked "System" environment variables, instead of User environment variables – MauricioTL Nov 15 '17 at 18:21
-
actually there is no need to add the java lib directory to the CLASSPATH (not more since a long time) – user85421 Jan 30 '18 at 06:54
-
-
Please add the removal of the java.exe file in the system32 directory. This step is needed when installing multiple versions of java on a computer. In that case only the most recent version can be used. – sarcode Jul 19 '18 at 13:26
-
-
5The setting works well for me. As there is no jre folder on jdk 11, I remove the JRE_HOME variable as well as the %JAVA_HOME%\jre\lib value in the CLASSPATH variable. For more info on jdk 11 without jre: https://stackoverflow.com/questions/52584888/how-to-use-jdk-without-jre-in-java-11 – Huanfa Chen Feb 12 '19 at 10:54
-
@Abdull There is no `C:\ProgramData\Oracle\Java\javapath;` variable in the Path, but only `C:\Program Files (x86)\Common Files\Oracle\Java\javapath`. So, should we remove `C:\Program Files (x86)\Common Files\Oracle\Java\javapath` as well? – Jul 28 '20 at 18:50
In Windows inorder to set
Step 1 : Right Click on MyComputer and click on properties .
Step 2 : Click on Advanced tab
Step 3: Click on Environment Variables
Step 4: Create a new class path for JAVA_HOME
Step 5: Enter the Variable name as JAVA_HOME and the value to your jdk bin path ie c:\Programfiles\Java\jdk-1.6\bin and
NOTE Make sure u start with .;
in the Value so that it doesn't corrupt the other environment variables which is already set.
Step 6 : Follow the Above step and edit the Path in System Variables add the following ;c:\Programfiles\Java\jdk-1.6\bin
in the value column.
Step 7 :Your are done setting up your environment variables for your Java , In order to test it go to command prompt and type
java
who will get a list of help doc
In order make sure whether compiler is setup Type in cmd
javac
who will get a list related to javac
Hope this Helps !

- 2,815
- 23
- 36

- 6,508
- 5
- 33
- 49
-
1Nice explanation. One small thing in step 6: Don't type `$java` or `$javac`, but just `java` or `javac`. – Jesper Nov 04 '09 at 09:43
-
1And note that you must add the JDK bin directory to the `PATH` environment variable; just setting `JAVA_HOME` is not enough. – Jesper Nov 04 '09 at 09:44
-
1yeah sorry since im a Linux lover . i missed it will change it , Thanks – Srinivas M.V. Nov 04 '09 at 09:44
-
31. use backslashes in WINDOWS 2. dont start any path with ".;" 3. add %JAVA_HOME%\bin to the path, like that you can later change the java_home without having to change the path – raudi Feb 12 '14 at 20:23
-
1
-
`JAVA_HOME` should not include the bin directory, it's home for Java at not just the executable – user85421 Jan 30 '18 at 06:57
--- To set java path ---
There are two ways to set java path
A. Temporary
- Open cmd
- Write in cmd :
javac
If java is not installed, then you will see message:
javac is not recognized as internal or external command, operable program or batch file.
- Write in cmd :
set path=C:\Program Files\Java\jdk1.8.0_121\bin
- Write in cmd :
javac
You can check that path is set if not error has been raised.
It is important to note that these changes are only temporary from programs launched from this cmd.
NOTE: You might have to run the command line as admin
B. Permanent
- Righ-click on "My computer" and click on properties
- Click on "Advanced system settings"
- Click on "Environment variables"
- Click on new tab of user variable
- Write
path
invariable name
- Copy the path of bin folder
- Paste the path of the bin folder in the
variable value
- Click OK
The path is now set permanently.
TIP: The tool "Rapid Environment Editor" (freeware) is great for modifying the environment variables and useful in that case
TIP2: There is also a faster way to access the Environment Variables: press Win+R keys, paste the following %windir%\System32\rundll32.exe sysdm.cpl,EditEnvironmentVariables
and press ENTER

- 11,549
- 7
- 68
- 107

- 2,249
- 22
- 21
In Windows 7, right-click on Computer -> Properties -> Advanced system settings; then in the Advanced tab, click Environment Variables... -> System variables -> New....
Give the new system variable the name JAVA_HOME
and the value C:\Program Files\Java\jdk1.7.0_79
(depending on your JDK installation path it varies).
Then select the Path
system variable and click Edit.... Keep the variable name as Path
, and append C:\Program Files\Java\jdk1.7.0_79\bin;
or %JAVA_HOME%\bin;
(both mean the same) to the variable value.
Once you are done with above changes, try below steps. If you don't see similar results, restart the computer and try again. If it still doesn't work you may need to reinstall JDK.
Open a Windows command prompt (Windows key + R -> enter cmd
-> OK), and check the following:
java -version
You will see something like this:
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
Then check the following:
javac -version
You will see something like this:
javac 1.7.0_79

- 2,312
- 5
- 24
- 33
The JDK installation instructions explain exactly how to set the PATH
, for different versions of Windows.
Normally you should not set the CLASSPATH
environment variable. If you leave it unset, Java will look in the current directory to find classes. You can use the -cp
or -classpath
command line switch with java
or javac
.

- 202,709
- 46
- 318
- 350
-
4+1 for "Normally you should not set the CLASSPATH environment variable.". – BalusC Nov 04 '09 at 11:46
I am going to explain here by pictures for Windows 7.
Please follow the following steps:
Step 1: Go to "Start" and get into the "My Computer" properties
Step 2: Go to "Advance System Setting" and click on it.
Step 3: Go to "Start" and get into the "My Computer" properties
Step 4: The dialog for Environment variable will open like this:
Step 5: Go to path and click on edit.
Step 6: Put the path of your JDK wherever it resides up to bin like you can see in the picture. Also add path from your sdk of Android up to the Platform Tools:

- 963
- 12
- 25
Under Linux: http://lowfatlinux.com/linux-environment-variables.html
And of course, you can retrieve them from Java using:
String variable = System.getProperty("mykey");
In programming context you can execute SET command (SET classpath=c:\java) or Right click on your computer > properties > advanced > environment variables.
In a batch file you can use
SET classpath=c:\java
java c:\myapplication.class

- 14,120
- 4
- 40
- 62
For Windows 7 users:
Right-click on My Computer, select Properties; Advanced; System Settings; Advanced; Environment Variables. Then find PATH in the second box and set the variable like in the picture below.

- 3,100
- 24
- 31

- 33,936
- 20
- 234
- 300
Java path set for java 11
- copy the path for jdk-11
Don’t include the \bin folder, just the JDK path. For example
Correct – C:\Program Files\Java\jdk-11
Wrong – C:\Program Files\Java\jdk-11\bin
In environmental variable, user variable
section click on New button and give path like below.
after that give ok for it and go to the System variables
and select the Path
and double click on it.

- 1,814
- 19
- 19
Keep in mind that the %CLASSPATH%
environment variable is ignored when you use java/javac in combination with one of the -cp
, -classpath
or -jar
arguments. It is also ignored in an IDE like Netbeans/Eclipse/IntelliJ/etc. It is only been used when you use java/javac without any of the above mentioned arguments.
In case of JAR files, the classpath is to be defined as class-path
entry in the manifest.mf file. It can be defined semicolon separated and relative to the JAR file's root.
In case of an IDE, you have the so-called 'build path' which is basically the classpath which is used at both compiletime and runtime. To add external libraries you usually drop the JAR file in a (either precreated by IDE or custom created) lib
folder of the project which is added to the project's build path.

- 3,642
- 3
- 25
- 42

- 1,082,665
- 372
- 3,610
- 3,555
-
@Balus he is a begginer who is trying to set his java Environment on Windows PC . – Srinivas M.V. Nov 04 '09 at 12:00
-
1Exactly. The one who would get greatly confused when he discovers that the classpath he configured doesn't work for JAR files nor IDE's. Just a warning at its place :) – BalusC Nov 04 '09 at 12:23
Set java Environment variable in Centos / Linux
/home/ vi .bashrc
export JAVA_HOME=/opt/oracle/product/java/jdk1.8.0_45
export PATH=$JAVA_HOME/bin:$PATH
java -version

- 553
- 4
- 5
- Download the JDK
- Install it
- Then Setup environment variables like this :
- Click on EDIT

- 2,938
- 1
- 28
- 35
For deployment better to set up classpath exactly and keep environment clear. Or at *.bat (the same for linux, but with correct variables symbols):
CLASSPATH="c:\lib;d:\temp\test.jar;<long classpath>"
CLASSPATH=%CLASSPATH%;"<another_logical_droup_of_classpath"
java -cp %CLASSPATH% com.test.MainCLass
Or at command line or *.bat (for *.sh too) if classpath id not very long:
java -cp "c:\lib;d:\temp\test.jar;<short classpath>"

- 1,840
- 1
- 12
- 16
For Windows:
- Right click on 'My Computers' and open 'Properties'.
- In Windows Vista or Windows 7, go to "Advanced System Settings". Else go to next step.
- Go to 'Advanced Tab' and click on Environment Variables button.
- Select 'Path' under the list of 'System Variables', and press Edit and add
C:\Program Files\java\jdk\bin
after a semicolon. - Now click on 'new' button under system variables and enter 'JAVA_HOME' as variable name and path to jdk home directory (ex. 'C:\Program Files\Java\jdk1.6.0_24' if you are installing java version 6. Directory name may change with diff. java versions) as variable_value.

- 4,607
- 1
- 22
- 24
Your Keytools file sit under "Java/bin" folder so you need to either set Environment variable or go to "Java/bin" folder and run command

- 10,864
- 5
- 72
- 96