JAVA_HOME and PATH are set but java -version still shows the old one

前端 未结 10 1408
温柔的废话
温柔的废话 2020-11-29 01:12

I am using Linux Mint Cinnamon 14. I have set the $JAVA_HOME and $PATH environment variables in ~/.profile as follows:



        
相关标签:
10条回答
  • 2020-11-29 01:55

    Updating the ~/.profile or ~/.bash_profile does not work sometimes. I just deleted JDK 6 and sourced .bash_profile.

    Try running this:

    sudo rm -rd jdk1.6.0_* #it may not let you delete without sudo
    

    Then, modify/add your JAVA_HOME and PATH variables.

    source ~/.bash_profile #assuming you've updated $JAVA_HOME and $PATH
    
    0 讨论(0)
  • 2020-11-29 01:57

    $JAVA_HOME/bin/java -version says 'Permission Denied'

    If you cannot access or run code, it which be ignored if added to your path. You need to make it accessible and runnable or get a copy of your own.

    Do an

    ls -ld $JAVA_HOME $JAVA_HOME/bin $JAVA_HOME/bin/java
    

    to see why you cannot access or run this program,.

    0 讨论(0)
  • 2020-11-29 01:59

    update-java-alternatives

    The java executable is not found with your JAVA_HOME, it only depends on your PATH.

    update-java-alternatives is a good way to manage it for the entire system is through:

    update-java-alternatives -l
    

    Sample output:

    java-7-oracle 1 /usr/lib/jvm/java-7-oracle
    java-8-oracle 2 /usr/lib/jvm/java-8-oracle
    

    Choose one of the alternatives:

    sudo update-java-alternatives -s java-7-oracle
    

    Like update-alternatives, it works through symlink management. The advantage is that is manages symlinks to all the Java utilities at once: javac, java, javap, etc.

    I am yet to see a JAVA_HOME effect on the JDK. So far, I have only seen it used in third-party tools, e.g. Maven.

    0 讨论(0)
  • 2020-11-29 02:00

    If you want to use JDKs downloaded from Oracle's site, what worked for me (using Mint) is using update-alternatives:

    1. I downloaded the JDK and extracted it just anywhere, for example in /home/aqeel/development/jdk/jdk1.6.0_35
    2. I ran:

      sudo update-alternatives --install /usr/bin/java java /home/aqeel/development/jdk/jdk1.6.0_35/bin/java 1
      

      Now you can execute sudo update-alternatives --config java and choose your java version.

    3. This doesn't set the JAVA_HOME variable, which I wanted configured, so I just added it to my ~/.bashrc, including an export JAVA_HOME="/home/aqeel/development/jdk/jdk1.6.0_35" statement

    Now, I had two JDKs downloaded (let's say the second has been extracted to /home/aqeel/development/jdk/jdk-10.0.1).

    How can we change the JAVA_HOME dynamically based on the current java being used?

    My solution is not very elegant, I'm pretty sure there are better options out there, but anyway:

    1. To change the JAVA_HOME dynamically based on the chosen java alternative, I added this snippet to the ~/.bashrc:

      export JAVA_HOME=$(update-alternatives --query java | grep Value: | awk -F'Value: ' '{print $2}' | awk -F'/bin/java' '{print $1}')
      

    Finally (this is out of the scope) if you have to change the java version constantly, you might want to consider:

    1. Adding an alias to your ~./bash_aliases:

      alias change-java="sudo update-alternatives --config java"
      

    (You might have to create the file and maybe uncomment the section related to this in ~/.bashrc)

    0 讨论(0)
  • 2020-11-29 02:00

    When it searches for java it looks from left to right in path entries which are separated by : so you need to add the path of latest jdk/bin directory before /usr/bin, so when it searches it'll find the latest one and stop searching further.

    i.e. PATH=/usr/java/jdk_1.8/bin:/usr/bin:..... and so on.

    then initialize user profile using command: source ~/.bash_profile

    and check with: [which java]

    you'll get the right one.

    0 讨论(0)
  • 2020-11-29 02:01

    There is an easy way, just remove the symbolic link from "/usr/bin". It will work.

    0 讨论(0)
提交回复
热议问题