How to set JAVA_HOME in Linux for all users
JavaLinuxJava HomePath VariablesJava Problem Overview
I am new to Linux system and there seem to be too many Java folders.
java -version gives me:
- java version "1.7.0_55"
- OpenJDK Runtime Environment (rhel-2.4.7.1.el6_5-x86_64 u55-b13)
- OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)
When I am trying to build a Maven project , I am getting error:
Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java
Could you please tell me which files I need to modify for root as well as not-root user and where exactly is java located?
Java Solutions
Solution 1 - Java
-
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
Solution 2 - Java
For all users, I would recommend creating a file in /etc/profile.d/java_home.sh
the following lines
# Set JDK installation directory according to selected Java compiler
export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
This will update dynamically and works well with the alternatives system. Do note though that the update will only take place in a new login shell.
Solution 3 - Java
You could use /etc/profile or better a file like /etc/profile.d/jdk_home.sh
export JAVA_HOME=/usr/java/jdk1.7.0_05/
You have to remember that this file is only loaded with new login shells.. So after bash -l or a new gnome-session and that it doesn't change with new Java versions.
Solution 4 - Java
None of the other answers were "sticking" for me in RHEL 7, even setting JAVA_HOME
and PATH
directly in /etc/profile
or ~/.bash_profile
would not work. Each time I tried to check if JAVA_HOME
was set, it would come up blank:
$ echo $JAVA_HOME
(<-- no output)
What I had to do was set up a script in /etc/profile.d/jdk_home.sh
:
#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH
I initially neglected the first line (the #!/bin/sh
), and it won't work without it.
Now it's working:
$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/
Solution 5 - Java
-
Open terminal and type
sudo gedit .bashrc
-
It will ask you your password. After typing the password, it will open the bash file. Then go to end and type:
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/" export PATH=$PATH:$JAVA_HOME/bin
-
Then save the file and exit from file
Above is for a single user. For all users, you have to follow below steps
-
gedit /etc/profile
-
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
-
export PATH=$PATH:$JAVA_HOME/bin
Solution 6 - Java
Copy the bin file path you installed
YOUR PATH
open terminal and edit environment file by typing following command,
sudo nano /etc/environment
In this file, add the following line (replacing YOUR_PATH
by the just copied path):
JAVA_HOME="YOUR_PATH"
That should be enough to set the environment variable. Now reload this file:
source /etc/environment
now test it by executing:
echo $JAVA_HOME
Solution 7 - Java
Doing what Oracle does (as a former Sun Employee I can't get used to that one)
ln -s latestJavaRelease /usr/java/default
Where latestJavaRelease is the version that you want to use
then export JAVA_HOME=/usr/java/default
Solution 8 - Java
The answer is given previous posts is valid. But not one answer is complete with respect to:
- Changing the /etc/profile is not recommended simply because of the reason (as stated in /etc/profile):
> * It's NOT a good idea to change this file unless you know what you are doing. It's much better to create a custom.sh shell script in > /etc/profile.d/ to make custom changes to your environment, as this > will prevent the need for merging in future updates.*
-
So as stated above create /etc/profile.d/custom.sh file for custom changes.
-
Now, to always keep updated with newer versions of Java being installed, never put the absolute path, instead use:
> #if making jdk as java home
>
> export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
>
> OR
>
> #if making jre as java home
>
> export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")
- And remember to have #! /bin/bash on the custom.sh file
Solution 9 - Java
First you need to find out which Java is installed in your PC and which one to use. For that open terminal with root permission.
sudo su
ls /usr/lib/jvm/
Now it will list the available java versions. Select the listed version.
Copy the path till there.
Now open bashrc
nano ~/.bashrc
add the following commands to the end
export JAVA_HOME="path that you copied"
export PATH=$JAVA_HOME/bin:$PATH
after that save the file and exit by pressing Ctrl+S followed by Ctrl+X
Now run the below command:
source ~/.bashrc
Solution 10 - Java
1...Using the short cut Ctlr
+ Alt
+ T
to open terminal
2...Execute the below command:
echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null
3...(Recommended) Restart your VM / computer. You can use source /etc/source
if don't want to restart computer
4...Using the short cut Ctlr
+ Alt
+ T
to open terminal
5...Verified JAVA_HOME installment with
echo $JAVA_HOME
One-liner copy from flob, credit to them
Solution 11 - Java
This is a very simple script to solve the problem
export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`
And for testing:
echo $JAVA_HOME
Solution 12 - Java
Posting as answer, as I don't have the privilege to comment.
Point to note: follow the accepted answer posted by "That Dave Guy".
After setting the variables, make sure you set the appropriate permissions to the java directory where it's installed.
chmod -R 755 /usr/java
Solution 13 - Java
All operational steps(finding java, parent dir, editing file,...) one solution
zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath
echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile
Result:
# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin
Explanation:
-
Let's break the full command into pieces
$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
-
Find java path from java command
$(which java)
"/usr/bin/java"
-
Get relative path from symbolic path
readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"
-
Get parent path of
/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java
readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"
-
Get parent path of
/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/
readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
Solution 14 - Java
Step 1 - check the current java version by "echo $JAVA_HOME"
Step 2 - vim /etc/profile
Step 3 - At the end of file you will find export JAVA_HOME, we need to provide the new path here, make sure that it is not relative.
Step 4 - Save and exit :wq
Step 5 - "source /etc/profile/", this would execute the change
Step 6 - Again do a echo $JAVA_HOME - change would have been reflected.
Solution 15 - Java
Probably a good idea to source whatever profile you edit to save having to use a fresh login.
either:
source /etc/
Where
Solution 16 - Java
On Linux I add this line to my ~/.profile:
export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)
Solution 17 - Java
While we are up to setting JAVA_HOME, let me share some benefits of setting JAVA_HOME or any other environment variable:
-
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.
-
JAVA_HOME variable is short and concise instead of full path to JDK installation directory.
-
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.
Read more: http://javarevisited.blogspot.com/2012/02/how-to-set-javahome-environment-in.html#ixzz4BWmaYIjH
Solution 18 - Java
open kafka-run-class.sh with sudo to write
you can find kafka-run-class.sh in your kafka folder : kafka/bin/kafka-run-class.sh
check for these lines
Modify the JAVA variable in the else part to point to the java executable in your java/bin. like JAVA="$JAVA_HOME/java"
Solution 19 - Java
In /etc/profile , if you open that will you’ll get to know that IT IS no recommended to write on that file. Instead of that make a script of your commands(suppose test.sh)go to /etc/profile.d folder and Put test.sh there. Every time you instance reboot it’ll be automatically called by /etc/profile.
Solution 20 - Java
Use SDKMAN sdkman.io to switch btw. your sdk's.
It sets the JAVA_HOME for you.
Solution 21 - Java
Using vim might be a bit difficult for new user. We can use gedit text editor instead.
-
Find /usr/lib/jvm/java-1.x.x-openjdk
-
Enter "gedit /etc/profile" or use "sudo gedit /etc/profile" if logged in as not-privileged
-
Add the following at the end of line:
export JAVA_HOME="path that you found"
export PATH=$JAVA_HOME/bin:$PATH
-
Enter "source /etc/profile" in your current shell to apply the changes
Solution 22 - Java
I use the line:
export JAVA_HOME=$(readlink -f $(dirname $(readlink -f $(which java) ))/../)
to my ~/.profile so it uses the base of the default java directory at login time. This is for bash.