java -version이 JAVA_HOME에 정의된 버전과 다른 버전을 반환하는 이유는 무엇입니까?

java -version이 JAVA_HOME에 정의된 버전과 다른 버전을 반환하는 이유는 무엇입니까?

JAVA_HOMEUbuntu OS에서 설정하려고 합니다 . 파일에 jdk 1.7복사 해서 /usr/lib/jvm설정했습니다 .JAVA_HOME/etc/profile

폴더 의 내용은 /usr/lib/jvm다음과 같습니다.

shekhar@ubuntu:~$ ls /usr/lib/jvm/
default-java        java-1.6.0-openjdk       java-6-openjdk         java-6-openjdk-i386  jdk1.7.0_01
java-1.5.0-gcj-4.6  java-1.6.0-openjdk-i386  java-6-openjdk-common  java-7-openjdk-i386

파일 의 마지막 몇 줄은 /etc/profile다음과 같습니다.

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_01
export PATH=$PATH:$JAVA_HOME/bin

이 모든 작업을 마친 후 명령을 실행하면 java -version다음과 같은 출력이 표시됩니다.

shekhar@ubuntu:~$ java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.4) (6b24-1.11.4-1ubuntu0.12.04.1)
OpenJDK Server VM (build 20.0-b12, mixed mode)

명령을 실행하면 ls -lah다음과 같은 결과가 출력됩니다.

shekhar@ubuntu:~$ ls -lah /usr/bin/java
lrwxrwxrwx 1 root root 22 Sep 29 09:58 /usr/bin/java -> /etc/alternatives/java
shekhar@ubuntu:~$ ls -lah /etc/alternatives/java
lrwxrwxrwx 1 root root 45 Sep 29 09:58 /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java

누구든지 내가 놓친 것이 무엇인지 말해 줄 수 있습니까? Ubuntu가 여전히 jdk 7이 아닌 jdk 열기를 가리키는 이유는 무엇입니까?

추신 : 나는 보았다이 비슷한질문과 답변이지만 해당 질문은 Ubuntu가 아닌 Windows OS와 관련이 있으므로 Ubuntu에 대해 비슷한 질문을 다시 게시하고 있습니다.

답변1

JAVA_HOME 환경 변수를 설정한 다음 이를 사용하여 PATH를 설정했습니다. 그러나 설정한 경로도 기존 경로로 구성됩니다. 기본적으로 기존 경로에 다른 것을 추가했습니다.

JDK1.7에 대한 경로가 경로 끝에 추가됩니다. 명령줄에 'java --version'을 입력하면 시스템은 'java' 명령이 포함된 경로를 찾을 때까지 처음부터 끝까지 경로를 검색합니다. 따라서 표시되는 내용은 다른 Java 버전 중 하나의 버전 출력입니다.

내가 Ubuntu에서 일반적으로 하는 일은 내 경로를 살펴보는 것입니다.

echo $PATH

그런 다음 시작 부분에서 가능한 JVM 경로를 찾으십시오. 이 시점에서 이 문제를 해결할 수 있는 몇 가지 옵션이 있습니다.

  1. 시스템을 새 Java 경로로 가리키는 심볼릭 링크를 만듭니다.

  2. 이전 Java 버전을 제거하고 경로에서 제거하십시오.

저는 옵션 2를 선택하겠습니다. 필요하지 않은 것을 제거하는 것이 덜 혼란스럽습니다.

답변2

나는 같은 문제가 있었고 대답은 PATH에 숨겨져 있습니다.

"$ env | grep java"를 실행하면 다음이 표시됩니다.

PATH=/u01/app/oracle/product/11.2.0/xe/bin:/home/rivaldo/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/java/jdk1.6.0_14/bin:/home/rivaldo/bin/eclipse.JEE.Kepler.64
JAVA_HOME=/usr/local/java/jdk1.6.0_14
JDK_HOME=/usr/local/java/jdk1.6.0_14

하지만 "java -version"을 실행하면 여전히 다음이 표시됩니다.

java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)

내 PATH에 "/java/jdk1.6.0_14/bin" 앞에 "/usr/bin"이 있고 "ll /usr/bin | grep java"를 수행하면 다음과 같은 결과를 얻을 수 있다는 것을 알았습니다.

lrwxrwxrwx 1 root root 39 Jul 31 08:29 /etc/alternatives/java -> /usr/lib/jvm/java-7-oracle/jre/bin/java*

심볼릭 링크를 올바른 링크로 변경하고 문제가 해결되었습니다. 경로의 순서를 변경할 수도 있습니다.

~에서

export PATH=$PATH:$JAVA_HOME/bin

에게

export PATH=$JAVA_HOME/bin:$PATH

답변3

나는 개인적으로 새로운 Ubuntu 12.04 설치에서 똑같은 종류의 문제에 직면했습니다. 내가 해야 할 일은 다음 명령을 사용하여 특정 패키지를 제거하는 것뿐입니다.

sudo apt-get remove openjdk-6-jre-headless

이로 인해 /etc/alternatives의 링크가 제거되고 설치된 Java 1.7로 업데이트되었습니다.

jmort253의 답변에서 포인트 2가 완료되었으므로 공유하고 싶었습니다.

관련 정보