Find JAVA_HOME and set it on RHEL
First, try echo $JAVA_HOME
from the command line. Since java
is on your path already, JAVA_HOME
may be set.
What is the best way to figure out the installation directory of my java installation
Running the command which java
will point you to where java
is installed.
and then set JAVA_HOME
You can edit ~/.bashrc
, ~/.bash_profile
, or /etc/profile
to set JAVA_HOME
. Setting it in ~/etc/profile
will set it system wide, and this is probably not what you want. Say for the sake of example the output of which java
is /opt/jdk_1.7.0_25
, then you'd just add export JAVA_HOME=/opt/jdk_1.7.0_25
to ~/.bashrc
or ~/.bash_profile
and then run source ~/.bashrc
(or source ~/.bash_profile
if you set it there).
Note that in this case, java
is on the PATH
but in some cases you'd need to add export PATH=$PATH:$JAVA_HOME/bin
to add the JAVA_HOME
variable to the PATH
.
Cannot find JAVA_HOME in Red Hat Server
Try the file /etc/bash.bashrc
, sometimes it is also used to initialise bash. If not, then try to find the word JAVA_HOME inside the files in /etc
with grep -r BASH_HOME /etc
UPDATE
From man bash:
When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes
commands from the first one that exists and is readable.
and also:
When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files exist.
So the only file that you haven't had a look at is ~/bash_login.
Probably JAVA_HOME is not in any of these files and what happens is that one of these files call another script, in that case, you'll have to read line by line if one of these scripts is "loading" more scripts from other places
How to set JAVA_HOME in Linux for all users
find /usr/lib/jvm/java-1.x.x-openjdk
vim /etc/profile
Prepend sudo if logged in as not-privileged user, ie.
sudo vim
- Press 'i' to get in insert mode
add:
export JAVA_HOME="path that you found"
export PATH=$JAVA_HOME/bin:$PATH- logout and login again, reboot, or use
source /etc/profile
to apply changes immediately in your current shell
JAVA_HOME directory in Linux
echo $JAVA_HOME
will print the value if it's set. However, if you didn't set it manually in your startup scripts, it probably isn't set.
If you try which java
and it doesn't find anything, Java may not be installed on your machine, or at least isn't in your path. Depending on which Linux distribution you have and whether or not you have root access, you can go to http://www.java.com to download the version you need. Then, you can set JAVA_HOME to point to this directory. Remember, that this is just a convention and shouldn't be used to determine if java is installed or not.
JAVA_HOME and PATH are set but java -version still shows the old one
While it looks like your setup is correct, there are a few things to check:
- The output of
env
- specificallyPATH
. command -v java
tells you what?- Is there a
java
executable in$JAVA_HOME\bin
and does it have the execute bit set? If notchmod a+x java
it.
I trust you have source
'd your .profile
after adding/changing the JAVA_HOME
and PATH
?
Also, you can help yourself in future maintenance of your JDK installation by writing this instead:
export JAVA_HOME=/home/aqeel/development/jdk/jdk1.6.0_35
export PATH=$JAVA_HOME/bin:$PATH
Then you only need to update one env variable when you setup the JDK installation.
Finally, you may need to run hash -r
to clear the Bash program cache. Other shells may need a similar command.
Cheers,
Unable to find JAVA_HOME
Type which java
and you will probably see (at least after you have followed all the symlinks) that the Java executable is taken from somewhere else than your newly set JAVA_HOME. You need to create the appropriate symlinks to version 1.8, too, like this:
ln -s /your/path/to/v18/bin/java /usr/bin/java
Be aware that existing applications might use the 1.7 Java version and you might break them when you set /usr/bin/java
(or whatever path the which
command showed you) to the 1.8 version.
Fyi, JAVA_HOME is not meant to be used by your shell to locate the Java command. It is to be used by other software that require Java to know where to find it.
Related Topics
Android N Change Language Programmatically
Android - Span_Exclusive_Exclusive Spans Cannot Have a Zero Length
Android JSONobject - How to Loop Through a Flat JSON Object to Get Each Key and Value
Permission to Write to the Sd Card
Firebase No Properties to Serialize Found on Class
Wait Until Firestore Data Is Retrieved to Launch an Activity
Android Studio 3.1.3 Gradle Sync Error. Could Not Download Gradle-Core.Jar
How to Encode a Wav to a Mp3 on a Android Device
Read_External_Storage Permission for Android
Select Random Document from Firestore
How to Add Multiple Jar Files in Classpath in Linux
Connect as User with No Password Set on Postgresql 8.4 via Jdbc
Need a Client Side API for Determing Geo Location of Ip Addresses
In Laymans Terms, What Does 'Static' Mean in Java
Should I Instantiate Instance Variables on Declaration or in the Constructor