I've installed a version of Java. How can we set the $JAVA_HOME
environment variable correctly?

- 28,246
- 16
- 81
- 118

- 11,623
4 Answers
You can set your JAVA_HOME
in /etc/profile
as Petronilla Escarabajo suggests. But the preferred location for JAVA_HOME
or any system variable is /etc/environment
.
Open /etc/environment
in any text editor like nano
or gedit
and add the following line:
JAVA_HOME="/usr/lib/jvm/open-jdk"
(java path could be different)
Use source
to load the variables, by running this command:
source /etc/environment
Then check the variable, by running this command:
echo $JAVA_HOME
Update
Usually most linux systems source /etc/environment by default. If your system doesn't do that add the following line to ~/.bashrc
(Thanks @pje)
source /etc/environment

- 70,465

- 8,555
To set JAVA_HOME
environment variable, do the following:
- Launch Terminal by pressing Ctrl+Alt+T on your keyboard.
- Enter the following command:
$gksudo gedit /etc/environment
- Depending on where you installed your Java, you will need to provide the full path. For this example, I installed Oracle JDK 7 in the
/usr/lib/jvm/java-7-oracle
directory.
Scroll to the end of the file and enter the following:
JAVA_HOME=/usr/lib/jvm/java-7-oracle
export JAVA_HOME
- Save your file and exit gedit.
- Lastly, reload the system PATH with the following command:
$. /etc/environment
The above method will save you the hassle in having to run the commands every time you log in to your computer.

- 1,624
-
7
-
1Is the addition of the
export
command necessary in the/etc/environment
? – pkaramol Nov 23 '16 at 10:01 -
@pkaramol I've had to add export JAVA_HOME on 16.04LTS to make it load at startup. – adeen-s Jan 20 '17 at 06:20
-
4@adeen-s You added
export
to a line in/etc/environment
and it helped? That file contains variable definitions parsed as=
-delimited name-value pairs; its contents are not executed as commands. (Seeman pam_env
.) So unless you're separately treating the file as though it were a script (such as by passing/etc/environment
to bash's.
/source
builtin), I wouldn't expect that to work. – Eliah Kagan Aug 17 '17 at 16:02 -
1
How does . /etc/environment work?
-- . (dot) loads commands from a file https://askubuntu.com/a/232938/189965
– Roman Bekkiev Sep 22 '18 at 07:32 -
I am doubtful if this will persist the JAVA_HOME path for all future sessions? I followed the above steps. But after I logged out and logged in again echo $JAVA_HOME does not give the Java installation path.Any reason why? – raikumardipak Jan 24 '19 at 10:46
If you do not know the path and you only have openJDK installed, you can type
update-alternatives --config java
and you should find the path. To set the variable you can write JAVA_HOME=<PATH>
followed by export JAVA_HOME
. Notice there's no space when declaring the variable. To check if the variable is stored you simply type echo $JAVA_HOME
to verify.

- 879
-
1This seems like it would be static. If I remove openjdk-7 and install openjdk-9, won't the JAVA_HOME then point to the wrong place? How can it be made dynamic? – DavidJ Jul 20 '16 at 18:49
-
3By you manually changing it. Once again, YOU are the way it becomes dynamic.... – Dave Sep 20 '16 at 19:04
-
What @HDave means is that In certain cases, you may want JAVA_HOME to point to a specific java version, so making the update of JAVA_HOME dynamic may not be what you want. – Maciej Oct 09 '16 at 15:31
-
i like this answer. I tested with echo and see my path. However, I am confused why I am still getting JAVA_HOME environment variable is not set when I run mvn -version – Winnemucca Apr 11 '17 at 22:19
-
3I wrote this answer back when I was more ignorant. Setting the variable as described will only affect your current terminal session, and will not be persisted. The correct way is to run
update-alternatives --install <link> <name> <target> <priority>
for example:
– Erro May 14 '17 at 12:26update-alternatives --install /usr/bin/java java /usr/lib/jvm/default-runtime/bin/java 1
This is the best option if you always want to use the latest one installed.
Nowadays (Ubuntu 23.10) you should probably have it installed through apt like:
sudo apt install default-jdk # or default-jre
In this case, you should find it at /usr/lib/jvm/default-java
.
It's a symlink that points to whichever the current JVM is on the same folder.
So, just run this to add the environment as a separate file:
sudo nano /etc/environment.d/90java.conf
Add this line and save:
JAVA_HOME="/usr/lib/jvm/default-java"
Then reboot or login again, or source /etc/environment.d/90java.conf
to load it on the current shell.

- 549
source /etc/environment
to the top of my bash config file~/.bashrc
so that it loads all my environment settings on startup. Working for me so far. – pje Mar 11 '17 at 22:31source
command to reload the configurations. – Manula Waidyanatha Aug 04 '17 at 07:00ls: cannot access '/usr/lib/jvm/open-jdk': No such file or directory
– Damien Feb 11 '23 at 05:00default-jdk
ordefault-jre
, you should find it atJAVA_HOME="/usr/lib/jvm/default-java"
. It's a symlink that points to whichever the current one is on the same folder. Best option if you always want to use the latest one installed. – geekley Nov 23 '23 at 01:36