Tuesday, February 21, 2017

How to set JAVA_HOME environment in Linux, Unix and Windows

JAVA_HOME is a system environment variable which represent the JDK installation directory. When you install JDK in your machine (Windows, Linux, or UNIX) it creates a home directory and puts all it's binary (bin), library(lib), and other tools. In order to compile the java program "javac" tool should be in your PATH and in order to get that in PATH we use the JAVA_HOME environment variable. Many tools like ANT and web servers like tomcat use JAVA_HOME to find java binaries. In this article, we will see how to set JAVA_HOME environment variable in the different operating systems including Windows (Windows 7, Vista, XP) and Linux (Unix).

Setting JAVA_HOME on Windows environment:

How to set JAVA_HOME environment in Linux, Unix and WindowsWindows environment (Windows 7, Vista, XP) are GUI based operating system and you can edit the PATH system variable from GUI. you need to define another variable called JAVA_HOME and set Java installation directory as value for JAVA_HOME variable.

Here is a step by step guide:

1) Windows + Pause -- open System property Window
2) Click Advanced --> Environment variables
3) Click New on System Variable section
4) Add Variable Name: JAVA_HOME and Variable value: C:\Program Files\Java\JDK1.6\
5) Add Java into PATH as : %JAVA_HOME%/bin

An important thing to note here is that on the Windows environment (Windows 7, Vista, XP), you have two sections user-defined variables and System Variables. a variable declared in one section is not visible in other sections.

So if you set JAVA_HOME on the user variable section and update PATH on System variable section, you will not be able to get the value of JAVA_HOME and it will be blank. So be careful with this.

And, If you are new to Java world then I also recommend you go through The Complete Java MasterClass on Udemy to learn Java in a better and more structured way. This is one of the best and up-to-date courses to learn Java online.

Setting JAVA_HOME on Unix or Linux

Setting JAVA_HOME on Unix or Linux environment is more easy and straight forward. you just need to export JAVA_HOME variable and its value and then you can refer its value in any shell script. here is an example of how to set JAVA_HOME on Unix and Linux:

1) export JAVA_HOME=/opt/java/jdk_1.6
2) export PATH= ${PATH}:{JAVA_HOME}/bin

Now Java is added on your system PATH by using the JAVA_HOME System variable. you can also check How to set PATH for Java in Linux or Unix for more details on step and explanation.

JAVA_HOME vs java.home

I have seen Java programmer confusing over JAVA_HOME and java.home, where former represent JDK installation
directory later represent JRE installation directory and you know Difference between JDK and JRE. JRE just contain java binaries and doesn't contain other tools which comes with JDK and required for Java development. java.home
is also a Java system property and you can access it on java code using System.getProperty("java.home"). 
Also all java system properties are exposed as ANT builtin property you can access java.home inside ANT as ${java.home}

That’s all on how to set JAVA_HOME in Windows and Linux. We have also seen difference between JAVA_HOME and java.home system property. Let us know if you come across any other difference between them.

Further Learning
Complete Java Masterclass
Java Fundamentals: The Java Language
Java In-Depth: Become a Complete Java Engineer!

Other Java Tutorials you may like


Aryasindhu Sahu said...

A small modification :

To set/export PATH for java-
export PATH= ${PATH}:${JAVA_HOME}/bin

check the '$' before {JAVA_HOME}, i.e. ${JAVA_HOME}.

Hillfenous said...

One of the main advantage of using JAVA_HOME variable to point Java installation directory is that :

1) It's easy to upgrade JDK without affecting your application startup and config file which points to JAVA_HOME. you just need to download new version and make sure your JAVA_HOME points to new version of Java. This is best benefit of using environment variable or links.

2) JAVA_HOME variable is short and concise instead of full path to JDK installation directory.

3) JAVA_HOME variable is platform independence i.e. if your startup script uses JAVA_HOME then it can run on Windows and UNIX without any modification, you just need to set JAVA_HOME on respective operating system.

4) JAVA_HOME is standard, which means other tools which needs Java e.g. Maven, Eclipse can refer this variable without having any knowledge of where Java is physically installed in your machine, which is obviously be different in different user's machine. JAVA_HOME allows everybody to access Java in a common and standard way.

Let me know if this make sense.

Prem said...

Does Apache Maven also uses $JAVA_HOME to find out Java version to build a project? I am also confused with PATH and JAVA_HOME environment variable, if both contains location of JDK binary, which will take preference?

Anonymous said...

does setting JAVA_HOME variable is mandatory to run Java programs?

Unknown said...

work in windows 8.1???

Post a Comment