When and Why run alternatives --install java jar javac javaws on installing jdk in linux

18,527

Solution 1

When you install JDK on Linux, what gets installed depends on the type of package, version and distribution. You can refer to the following links for information about the installation location on linux:

JDK Installation for Linux Platforms - Version 8

JDK Installation for Linux Platforms - Version 7

Once you install JDK, the bin folder containing tools might not get added to the environment variable PATH. Commands typed on the terminal needs to be from the locations specified in the PATH variable. In cases when JDK\bin does not get added, the user would need to configure it manually as mentioned in Installing the JDK Software

alternatives command is being used to create a symbolic link. Here, it is being directed to use the command to add the tools like javac, javaw to /usr/bin which exists in the PATH variable by default.

If( you could execute java -version outside of JDK/bin && not by specifying the complete path && if the version and bundle prints to be as that of package you installed ){ you need not run the alternatives command.}

Solution 2

java, javaws, javac, and jar are all different executables used by the JDK. When you run alternatives --config java you are only configuring which version of the java executable you wish to run. However, the JDK includes, for example, the javac compiler. You need to configure which version of the compiler you wish to use as well.

The alternatives command is, in a nutshell, used to maintain a lookup for symbolic (or sym) links. Before you can choose which version of java you want to run with the --configure option, you must first register the actual path to the executable with the --install option. alternatives --install is not installing any software. It is merely registering some paths and aliases with the alternatives framework. (Note: alternatives is not using the alias command. I mean "aliases" in the traditional, literal sense.)

You should also understand what the rpm command does. Really, it is only dropping down a set of binaries into a particular directory. This directory may be long and tedious to explicitly specify: /some/path/to/lib/jvm/java-1.x.x-etc-etc-x86/jre/bin/java. You don't want to specify this every time you want to run java. Instead, we set up some sym links.

You might also want to read up on how the PATH works in linux.

It may become clearer if you try tracing through the setup for your machine. Here is what I ran:

> which java
/usr/bin/java
> ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 Aug 14  2014 /usr/bin/java -> /etc/alternatives/java
> ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 73 Aug 14  2014 /etc/alternatives/java -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65-2.5.1.2.fc19.x86_64/jre/bin/java

Solution 3

For Ubuntu use update-alternatives

Share:
18,527
Charu Khurana
Author by

Charu Khurana

Java enthusiast, currently Mule consultant

Updated on September 07, 2022

Comments

  • Charu Khurana
    Charu Khurana over 1 year

    To install java in linux (I used CentOS, RHEL is same too), I used this command

    rpm -Uvh /path/to/binary/jdk-7u55-linux-x64.rpm

    and verified java

    java -version

    Looking at a tutorial, it says to run following 4 commands, not sure why

    ## java ##
    alternatives --install /usr/bin/java java /usr/java/latest/jre/bin/java 200000
    ## javaws ##
    alternatives --install /usr/bin/javaws javaws /usr/java/latest/jre/bin/javaws 200000
    
    ## Install javac only
    alternatives --install /usr/bin/javac javac /usr/java/latest/bin/javac 200000
    ## jar ##
    alternatives --install /usr/bin/jar jar /usr/java/latest/bin/jar 200000
    

    I know if there are multiple versions of java installed, you can select version to use from

    alternatives --config java
    

    then why to run alternative --install separately for each executable.

    I've seen this question but doesn't get my answer

  • Charu Khurana
    Charu Khurana over 8 years
    If its just about setting paths of different executables, then why not just do alternative --config javac and so on, just like for java. Still, its hard to absorb logic of setting individual executables
  • LoganMzz
    LoganMzz over 8 years
    Lol * #32791202:17: error: The method If(boolean) is undefined for the type #32791202 * #32791202:19: error: reached end of file while parsing }
  • Prashant
    Prashant over 8 years
    @djs Excellent Answer!
  • James Jithin
    James Jithin almost 6 years
    @LoganMzz, LOL! Thanks for notifying. Updated!
  • double-beep
    double-beep about 5 years
    @zmag this provides an answer to the question: it says to use something for Ubuntu!