Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

On Ubuntu it is possible to have multiple JVMs at the same time. The default one is selected with update-alternatives. But this does not set the JAVA_HOME environment variable, due to a debian policy.

I am writing a launcher script (bash), which starts a java application. This java application needs the JAVA_HOME environment variable. So how to get the path of the JVM which is currently selected by update-alternatives?

share|improve this question
add comment

7 Answers

up vote 71 down vote accepted

Something like this should do the trick:

JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

share|improve this answer
10  
I needed the home of the JDK instead of the JRE, but I got this using: JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:bin/javac::") Thank You! –  Witek May 22 '10 at 10:35
    
when I tried the command echo $(readlink -f /usr/bin/java | sed "s:bin/java::"), the output was /usr/lib/jvm/java-7-oracle/jre/ and not /usr/lib/jvm/java-7-oracle/ –  sumitramteke Jan 31 at 5:20
    
Code given in rsaddey works correctly –  sumitramteke Jan 31 at 5:28
add comment

danadam's solution can easily be adopted to retrieve the JDK (i.e. not JRE) path as required:

JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
  • Looks for javac Java compiler (instead of java) included in JDK (but not JRE).
  • Has no trailing / (stripped off by sed s:/bin... instead of s:bin...)
share|improve this answer
add comment

So, you're saying that this command does nothing for you?

sudo update-alternatives --config java 
share|improve this answer
1  
Is that suppose to set your JAVA_HOME? I've found that update-java-alternatives is a better way to update Java as update-alternatives doesn't update all Java related alternatives. See askubuntu.com/questions/141791 –  James McMahon Jul 30 '12 at 13:56
add comment

export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/java)))

In .bashrc was handy for me.

share|improve this answer
add comment

As an extension of danadams answer:

First of all, install the 2nd Java JRE as the 3rd java option, with priority of "3":

sudo alternatives --install /usr/lib/jvm/jre jre /opt/IBM/java/jre/bin/java 3

Then, you can list them:

update-alternatives --list java

You can set the alternative by hand , using this:

sudo alternatives --config java /opt/IBM/java/jre/bin/java

Then, your script can set it on the fly, like so:

sudo alternatives --set java /opt/IBM/java/jre/bin/java
JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

This better illustrates what the 'sed' command is doing.

share|improve this answer
add comment

I installed java with

sudo apt-get install openjdk-7-jre-headless

and then to find the location

ls -al /etc/alternatives/java
share|improve this answer
add comment

A while ago I created a tutorial on the Ubuntu forum on how to install the latest JRE/JDK from the Java website. It also covers on how to enable it system-wide, by adding the JRE/JDK location to the PATH variable. If you like, you can also add JAVA_HOME to the script, mentioned at the end of the topic.

Check it out: http://ubuntuforums.org/showthread.php?t=1437100

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.