- How to Set JAVA_HOME Variable in Ubuntu Linux Correctly
- Step 1: Check if JDK is installed
- Step 2: Get the location of JDK executable (Java Compiler)
- Step 3: Setting JAVA_HOME variable
- How to find my current JAVA_HOME in ubuntu?
- Ubuntu: where is java_home environment variable stored
- 4 Answers 4
- Find JAVA_HOME and set it on RHEL
- 7 Answers 7
How to Set JAVA_HOME Variable in Ubuntu Linux Correctly
If you are running Java programs on Ubuntu using Eclipse, Maven or Netbeans etc, you’ll need to set JAVA_HOME to your path. Otherwise, your system will complain that “java_home environment variable is not set”.
In this beginner’s tutorial, I’ll show the steps to correctly set Java Home variable on Ubuntu. The steps should be valid for most other Linux distributions as well.
The process consists of these steps:
- Making sure Java Development Kit (JDK) is installed.
- Finding the correct location of JDK executable.
- Setting the JAVA_HOME variable and making the change permanent.
Step 1: Check if JDK is installed
The simplest way to check if Java Development Kit (JDK) is installed on your Linux system is by running this command:
The above command checks the version of Java compiler. If it is installed, it will show the Java version.
If the command shows an error like javac command not found, you’ll have to install JDK.
If Java Compiler is not installed on your system, install Java Development Kit using this command:
sudo apt install default-jdk
This will install the default Java version in your current Ubuntu version. If you need some other specific Java version, you’ll have to specify it while installing Java on Ubuntu.
Once you have made sure that Java Compiler is present on your system, it’s time to find its location.
Step 2: Get the location of JDK executable (Java Compiler)
The executable is usually located in the /usr/lib/jvm directory. I won’t left you on your own for a guessing game. Instead, let’s find out the path of the Java executable.
Use the which command to get the location of Java Compiler executable:
The problem here is that the location it gives is actually a symbolic link. You’ll have to follow it a couple of times:
And when you find a path like /usr/lib/jvm/java-11-openjdk-amd64/bin/javac, you remove the /bin/javac from it to get something like /usr/lib/jvm/java-11-openjdk-amd64
An easier method is to follow the symbolic link and get to the actual executable file directly using this command:
readlink -f `which javac` | sed "s:/bin/javac::"
The readlink command follows a symbolic link. I have used ` around which java. This is called command substitution and it replaces the command with its output. Sed is then used to replace /bin/javac by nothing and thus removing it altogether.
In my example, the location of the executable file is /usr/lib/jvm/java-11-openjdk-amd64. It could be different for you. Copy the correct path you got from the above command in your system. You know, you can copy paste in the Ubuntu terminal.
Step 3: Setting JAVA_HOME variable
Now that you have got the location, use it to set the JAVA_HOME environment variable:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/bin/java
Check the value of JAVA_HOME directory:
Try to run your program or project in the SAME TERMINAL and see if it works.
This is not over yet. The JAVA_HOME variable you just declared is temporary. If you close the terminal or start a new session, it will be empty again.
To set JAVA_HOME variable ‘permanently’, you should add it to the bashrc file in your home directory.
You can use the Nano editor for editing files in the Linux terminal. If you do not want that and take a simple copy-paste approach, use the following commands:
Back up your bashrc file (in case you mess it, you can get it back):
Next, use the echo command to append the export command you used at the beginning of this section. Change the command below to use the correct path as displayed by your system in.
echo "export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" >> ~/.bashrc
Verify that it has been correctly added to the end of the file:
The above tail command will show the last 3 lines of the specified file.
Here’s the entire output of the above three commands.
Now, even if you exit the session or restart the system, the JAVA_HOME variable will still be set to the value you specified. That’s what you want, right?
Do note that if you change the default Java version in the future, you’ll have to change the value of JAVA_HOME and point it to the correct executable path.
I hope this tutorial not only helped you to set Java Home, it also taught you how you are doing it.
If you are still facing issues or have any questions or suggestions, please let me know in the comments.
How to find my current JAVA_HOME in ubuntu?
To display JAVA_HOME variable path, type in terminal:
If nothing appears then set it with this:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
This will differ according to your JDK type and version.
For displaying it again, follow the first command.
Follow JREs from different vendors on the same system, for using different JDK’s or switch between JDK’s.
It gives «/usr/lib/jvm/java-6-sun». But I have installed java 7. When I check it using «java -version» it gives java version «1.7.0_45» Java(TM) SE Runtime Environment (build 1.7.0_45-b18) Java HotSpot(TM) Server VM (build 24.45-b08, mixed mode)
then execute second command for setting JAVA_HOME variable. NOTE: JAVA_HOME doesn’t make jdk default, it just makes JAVA_HOME variable set to a path & if you want to use different jdk installed on same machine then check my answer, I have edited it.
@Jax-L But now when I give echo JAVA_HOME it just displays as «JAVA_HOME». The path I gave is not displaying.
export works only until you restart. Or you add export to the .bashrc login script. But the correct way to set such environment variables is in /etc/environment
If you have JDK 1.6 (corresponding to Java 6) or a newer version installed, you should have a program named jrunscript in your PATH . You can use this to find the corresponding JAVA_HOME . Example:
$ jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));' /opt/local/jdk1.7.0_76/jre
You could set the environment variable like this:
$ export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"
Note that the JRE doesn’t include jrunscript , so this will only work if you install the JDK, not just the JRE.
Ubuntu: where is java_home environment variable stored
I am new to Linux. Could someone help me find where is the java environment in my system and please adjust any wrong believes I wrote before?
JAVA_HOME is not part of the JRE (see this answer). It’s just a convention used by some Java-based tools. You should not expect any installation to set it for you.
4 Answers 4
grep JAVA_HOME /etc/environment /etc/bash.bashrc /etc/profile.d/* /etc/profile
In my case after installing java from webupd8team ppa in Ubuntu 18.04 the scripts with setting and exporting JAVA_HOME variable are located in
/etc/profile.d/jdk.csh:setenv JAVA_HOME /usr/lib/jvm/java-8-oracle /etc/profile.d/jdk.sh:export JAVA_HOME=/usr/lib/jvm/java-8-oracle
When installing java with the webupd8team ppa you will need to set the JAVA_HOME environment variable yourself. You can do this in many ways. How I did it is as follows:
- Run the sudo update-alternatives —config java command to get the list of java installations. It will also display the location of the java executable. e.g. /usr/lib/jvm/java-8-oracle/jre/bin/java .
- From the java installation that you use select the path up to jre . e.g. /usr/lib/jvm/java-8-oracle/ . This will become your JAVA_HOME path.
- Then edit your ~/.bashrc file and add the following line: export JAVA_HOME=»/usr/lib/jvm/java-8-oracle/» .
- Either restart your terminal, or type bash .
This should set the JAVA_HOME environment variable.
I don’t have an Ubuntu with Java right now, but I’ve done this in the past. http://www.janosgyerik.com/installing-java-and-setting-java_home-in-ubuntu/
Edit /etc/jvm , add this line to the top of the list: /path/to/your/jvm , which in your case is probably: /usr/lib/jvm/java-7-oracle but you have to check, maybe locate java-7-oracle` might help.
Thanks to the above step, the java executable will find the right version of Java. You can confirm this by running the command:
However, setting JAVA_HOME is a different matter. These commands worked in my older version of Ubuntu to detect + set + confirm JAVA_HOME :
. /usr/share/java-common/java-common.sh eval $(jvm_config) export JAVA_HOME echo $JAVA_HOME
If the output looks good, then add these lines to your ~/.bashrc or ~/.profile .
Janos, I noted that /etc/jvm is empty in my Ubuntu but following your instructions about locate, I think I can make a question more specific: in Windows I must set java environment variable otherwise the Eclipse wouldn’t run. Now, as my first work in linux, I just installed java but I didn’t set any environment variable for java and Eclipse is running perfectly for my surprise. I guess that in linux for some reason setting environment variables is not necessary for Eclipse to work. I noted that there is a link
. I noted that in /usr/bin there is a link to /etc/alternatives/java which in turn is also a link for /usr/lib/jvm/java-7-oracle/jre/bin/java. Then I guess that in linux it is enough to put a link in /usr/bin which points to the binaries file. Am I right?
@user79885 Eclipse needs JAVA_HOME to know where to find Java it can use for compiling your projects. I guess this is easier to do in Linux, for example it’s easy to detect if a java executable exists and track down its path and figure out the correct JAVA_HOME. This is just a guess, I don’t know how it really does it.
@user79885 . as per the links in /usr/bin , don’t mess with them manually. Let the package manager set those things, or use the update-alternatives command.
Find JAVA_HOME and set it on RHEL
I had installed java a while ago on my RHEL machine. Now, I’m trying to run a program that requires the JAVA_HOME variable to be set. What is the best way to figure out the installation directory of my java installation and then set JAVA_HOME ? Here are the results of running java- version :
java version "1.7.0_25" Java(TM) SE Runtime Environment (build 1.7.0_25-b15) Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
7 Answers 7
RHEL uses alternatives subsystem to manage java installations. You can have multiple versions of java installed, but only one is active at a time.
This means that running which java doesn’t provide useful information. The output would be the same no matter which java installation is selected via alternatives. Running readlink -f $(which java) (as already suggested in other comment) or using asking alternatives alternatives —display java would be better.
See example from RHEL 6 machine with OpenJDK installed (which is shipped with RHEL):
[root@example ~]# which java /usr/bin/java [root@example ~]# readlink -f $(which java) /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86_64/jre/bin/java [root@example ~]# alternatives --display java | head -2 java - status is manual. link currently points to /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
Note that enviroment variable JAVA_HOME is not defined anywhere by default, you would need to define it yourself in .bashrc of user which requires it.
In previous example, correct value of JAVA_HOME would be /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86_64 .
See details in Install OpenJDK documentation, search for section «Optional: Set the JAVA_HOME environment variable».