I've installed a version of Java. How can we set the $JAVA_HOME environment variable correctly?
- 27,676
- 16
- 81
- 117
- 11,315
- 18
- 50
- 66
3 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
- 69,223
- 56
- 216
- 327
- 8,465
- 1
- 21
- 20
-
2When i tried to run Android Studio (that has IntelliJ IDEA as a base), i had an error message very similar to @advocate's: "'tools.jar' seems to be not in Android Studio classpath." After fiddling a lot with JAVA_HOME without success, i decided to take a look at studio.sh, the shellscript that starts Android Studio. As a wild guess, i set JDK_HOME to the same value expected for JAVA_HOME, and voila! It installed without great problems. – Hilton Fernandes Mar 07 '15 at 23:20
-
how to set multiple paths for different JDKs http://paste.ubuntu.com/13151297/ will work?? – LOG_TAG Nov 07 '15 at 17:13
-
This setting seems temporary. After restarting the pc, we have to source it again – Samitha Chathuranga Aug 11 '16 at 17:09
-
6For those doing software development, don't put your JAVA_HOME in /etc/environment unless you want to reboot everytime you switch JDK versions. – Dave Sep 20 '16 at 19:03
-
3This is a temporary solution, as others pointed out. No one would want to run source every time they restart their bash. – yuranos Feb 19 '17 at 21:49
-
7As others have pointed out, this doesn't stick between terminal sessions. What I did to address this is just added the line `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:31
-
@ManulaWaidyanatha pje's comment should be included in your answer. It's not practical to do 'source /etc/environment' every time we open a new terminal. – Pedro Gordo Apr 11 '17 at 14:55
-
2@sedulam I updated the answer – Manula Waidyanatha Apr 20 '17 at 06:20
-
@HDave If not /etc/environment, then where should you the JAVA_HOME assignment then? – Robert Oschler Aug 03 '17 at 15:59
-
1@RobertOschler @HDave you don't need to restart your servers everytime. You can use the `source` command to reload the configurations. – Manula Waidyanatha Aug 04 '17 at 07:00
-
in ubuntu 18.04 I can see variable set when doing "echo $JAVA_HOME" but it is not listed in output of "printenv" - why? – Oleg Vazhnev May 14 '18 at 09:20
-
1Sourcing /etc/environment doesn't work for me (19.04). See https://superuser.com/questions/339617/how-to-reload-etc-environment-without-rebooting – Azmisov Oct 21 '19 at 16:54
-
`ls: cannot access '/usr/lib/jvm/open-jdk': No such file or directory` – Damien Feb 11 '23 at 05:00
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-oracledirectory.
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,614
- 9
- 8
-
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. (See [`man pam_env`](http://manpages.ubuntu.com/manpages/xenial/en/man8/pam_env.8.html).) 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
- 8
- 9
-
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
– Erro May 14 '17 at 12:26` for example: `update-alternatives --install /usr/bin/java java /usr/lib/jvm/default-runtime/bin/java 1`