개발/linux

[linux] java 여러 버전 사용하기.(CentOS 7)

mabb 2023. 3. 22. 11:27
반응형

개인 공부 겸 정리하였습니다. 잘못된 내용은 댓글로 피드백 부탁드려요
============================================================

 

1) 리눅스(CentOS 7)은 "java"라는 키워드를 입력하면 어디에서 찾을까?
   /etc/profile파일 내의 PATH경로에 등록된 경로들 중에서 찾는다.
   which java 명령어를 실행했을 때 보이는 경로가 "java"라는 키워드를 입력했을 때 가장 먼저 찾은 경로이다.


2) 보통 바이너리 파일이 모여있는 디렉토리들의 경로가 PATH 경로에 지정되어 있다.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
콜론(:)으로 구분하여 경로가 여러개 지정되어 있는데 앞의 경로에서부터 차례대로 그 안에 "java"가 있는지 찾아보는 것으로 보인다.

3) 실제 사용할 파일의 경로를 가리키는 파일이 '심볼릭링크 파일(심링크, 바로가기)이다. 원본 파일과 완전히 동기화된 분신을 만드는 것이 하드링크라면, 원본 파일을 "가리키는" 파일을 만드는 것이 심볼릭 링크이다. 심볼릭 링크가 가리 키는 경로는 변경이 가능하다.

4) 심볼릭 링크의 경로를 바꿔가며 사용하기 편리하도록 기능을 제공하는데 이는 alternatives 명령어를 통해 사용할 수 있다. "java"라는 이름이 버전별 java의 경로를 가리키게 여러 개 세팅하고 그중 "java"가 어떤 경로를 가리킬지 선택한다.

 

"java"라는 키워드를 입력했을 때 최종적으로 찾아가는 java파일

 

 위의 이미지에서 PATH의 4번째 경로인 /usr/bin 디렉토리 내부에서 java를 발견한다. java -> /usr/bin/java
/usr/bin/java -> /usr/lib/jvm/<해당jdk경로>/bin/java 를 가리킬 것이다.

alternative 심링크를 등록하는 명령어이다.

 alternatives --install 명령어를 사용하면 
같은 <group name> 으로 <link>가 가리키는 <path>를 여러 개 등록해 두고
실제로 <group name>에 해당하는 키워드가 가리킬 <path>를 선택할 수 있다.

해당 명령어는 /etc/alternatives 디렉토리 하위에 심링크를 생성하며, 이 경로에 생성된 심볼릭 링크는 '그룹'으로 관리하여 최종으로 가리키는 경로 변경이 용이하다.  ("java"라는 이름으로 여러 개의 심볼릭링크를 만들 경우 이를 구현하기 위해 메타데이터를 다루는 다른 디렉토리가 있다고 한다.(?))\

/usr/bin/java -> /usr/bin/java -> /usr/lib/jvm/<해당jdk경로>/bin/java  인 것을
/usr/bin/java -> /etc/alternatives/java -> /usr/lib/jvm/<해당jdk경로>/bin/java 가 되도록 해준다.

여기서 /etc/alternatives/java 경로의 심링크는 그룹 내의 경로들 중에서 선택한 것으로 손쉽게 변경이 가능하다.
가리키는 중간에 경로 변경이 손쉬운 심링크를 넣어주는 것이다.

 

아래의 이미지는 다른 블로그에서 본 alternatives 심링크를 사용하는 다른 방식인 듯하여 정리해 보았다.
alternatives 심링크에서 자바버전을 분기하여 선택하지 않고 경로 중간에 버전별로 명칭이 다른 디렉토리 대신 심볼릭링크인 java를 해당 디렉토리에 두는 방식으로 보인다. 이런 방식으로 할 경우에는 
/usr/lib/jvm/java/bin/java jvm에서 /usr/lib/jvm 디렉토리 하위에 java 심링크가 어느 버전을 가리킬지 설정해주어야 한다.
 /usr/lib/jvm/ 디렉토리에서 ln-s 명령어로 java 심링크를 만들어 원하는 버전의 디렉토리로 지정해 준다.
ln -s /jdk.1.7 ./java
ln -s 명령어는 명령을 수행하는 디렉토리에 심링크가 생성된다.

버전에 따라 경로의 중간 디렉토리 명이 다른 경우 이를 심링크로 대체하여 여러 버전을 사용하는 방식인 것 같다.

다른 블로그를 보면 이렇게 하는 경우도 있다.

 

 

 

======================================

1. 리눅스에 자바 설치하기.

YUM 도구에 대한 설명, Yellowdog Updater, Modified ,출처: 위키백과

▷yum 명령어를 이용하여 java를 설치할 수 있다.
1) 설치할 jdk 확인하기
 yum list | grep jdk


2) jdk 설치하기
yum install <jdk패키지 명>
(조회한 패키지명을 더블클릭하고 우클릭하면 명령어에 붙여 넣어진다)

=> 1.7과 1.8, 11을 모두 설치한다.

yum install <jdk패키지명>, 신나게 설치중

2.심볼릭 링크

하드링크: 링크파일 == 원본파일 (inode가 같다)
심볼릭링크: 링크파일 -> 원본파일 (inode가 다르다, 원본파일을 가리킬 뿐)

심볼릭 링크를 만드는 두 가지 방법.
방법 1)
ln -s <원본> <링크파일 이름>
해당 명령어를 사용하면 해당 디렉토리에 명명한 <링크파일 이름>으로 바로가기가 생긴다.
방법 2)
alternatives --install <link> <name> <path> <priority>
해당 명령어를 사용하면 /etc/alternatives 디렉토리에 심볼릭 링크가 생성된다.
<link>경로를 <name>이라는 그룹이름으로 지정하고 <path>를 가리키게 한다.
<priority>는 해당 그룹 내에서의 우선순위이다. 숫자가 높을수록 조회 시 위에 노출되는 듯하다.

alternatives 디렉토리 하위에 그룹이름으로 관리되는 심볼릭 링크가 java버전 바꿔가면서 사용하기의 핵심이다.

alternatives --install <심볼릭을 걸 링크> <그룹이름,java> <가리킬 경로> <우선순위>

최종적으로
java -> usr/bin/java -> /etc/alternatives/java -> 그룹이름 java에 설정된 경로들 중 선택
하는 식의 흐름으로 java를 인식하게 된다.
처음의 java라는 키워드는 /etc/profile 파일의 PATH 경로에 지정한 경로에서 찾는다.

alternatives --config java 로 링크 그룹이름 'java'가 가리킬 경로를 선택한다.

 

java라는 키워드가 jdk11을 잘 가리키는 모습이다.
javac , javaws 도 마찬가지로 심볼릭링크를 만들어 주고
alternatives --config javac, alternatives --config javaws로 버전에 맞게 바꿔치기해서 사용하면 된다.

java -version으로 java가 jdk11을 잘 가리키는지 확인한다.

 

3. alternatives 심볼릭 링크 다시 세팅해 보기
1) 삭제

--remove 옵션으로 기존에 java그룹에 등록된 심링크(심볼릭링크)들 삭제.

2) alternative 심링크 설정 다시 하기,
 1순위 jdk1.7
 2순위 jdk1.8
 3순위 jdk11

alternatives --install 명령어로 3개 버전의 java를 등록,

그룹 내에서 우선순위가 가장 높은 경우 디폴트가 된다. (이미지에서 1번에는 *표시가 되어있는데 이것이 디폴트 표시, +표시는 현재 선택 중인 것을 표시하며 이것이 디폴트 설정보다 우선이다. 디폴트가 1 이어도 3을 선택하면 3번으로 링크가 걸림)

단, 해당 alternatives 심링크 설정은 java 뿐 아니라, javac , javaws 도 버전별로 선택가능하도록 세팅해주어야 한다.
다른 버전을 쓰고자 할 때
java, javac,  javaws 모두 alternatives로 가리키는 경로를 버전에 맞게 변경해주어야 하는 것.

 

 

반응형