![java -version이 JAVA_HOME에 정의된 버전과 다른 버전을 반환하는 이유는 무엇입니까?](https://rvso.com/image/1331450/java%20-version%EC%9D%B4%20JAVA_HOME%EC%97%90%20%EC%A0%95%EC%9D%98%EB%90%9C%20%EB%B2%84%EC%A0%84%EA%B3%BC%20%EB%8B%A4%EB%A5%B8%20%EB%B2%84%EC%A0%84%EC%9D%84%20%EB%B0%98%ED%99%98%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
JAVA_HOME
Ubuntu 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 경로를 찾으십시오. 이 시점에서 이 문제를 해결할 수 있는 몇 가지 옵션이 있습니다.
시스템을 새 Java 경로로 가리키는 심볼릭 링크를 만듭니다.
이전 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가 완료되었으므로 공유하고 싶었습니다.