[Oracle Linux 8] alternative를 이용한 JDK 버전 변경

2022. 2. 18. 00:43Linux/Basic

반응형
  1. JDK 17 설치 및 JAVA_HOME 설정
    1. JDK 17 조회
    2. JDK 17 설치
    3. java 설치 경로 조회
    4. JAVA_HOME 설정하기
  2. 다른 버전의 JDK 설치 (JDK 1.8)
  3. 기본 JDK 변경하기
    1. java 심볼릭 링크 변경
    2. 참고

1. JDK 17 설치 및 JAVA_HOME 설정

1.1. JDK 17 조회

sudo dnf list "*java-17-openjdk*"
Repository ol8_developer_EPEL is listed more than once in the configuration
Last metadata expiration check: 3:35:39 ago on Thu 17 Feb 2022 10:16:07 AM GMT.
Available Packages
java-17-openjdk.src                      1:17.0.2.0.8-4.el8_5       ol8_appstream
java-17-openjdk.x86_64                   1:17.0.2.0.8-4.el8_5       ol8_appstream
java-17-openjdk-demo.x86_64              1:17.0.2.0.8-4.el8_5       ol8_appstream
java-17-openjdk-devel.x86_64             1:17.0.2.0.8-4.el8_5       ol8_appstream
java-17-openjdk-headless.x86_64          1:17.0.2.0.8-4.el8_5       ol8_appstream
java-17-openjdk-javadoc.x86_64           1:17.0.2.0.8-4.el8_5       ol8_appstream
java-17-openjdk-javadoc-zip.x86_64       1:17.0.2.0.8-4.el8_5       ol8_appstream
java-17-openjdk-jmods.x86_64             1:17.0.2.0.8-4.el8_5       ol8_appstream
java-17-openjdk-src.x86_64               1:17.0.2.0.8-4.el8_5       ol8_appstream
java-17-openjdk-static-libs.x86_64       1:17.0.2.0.8-4.el8_5       ol8_appstream

1.2. JDK 17 설치

sudo dnf install java-17-openjdk-devel.x86_64
Repository ol8_developer_EPEL is listed more than once in the configuration
Last metadata expiration check: 3:37:45 ago on Thu 17 Feb 2022 10:16:07 AM GMT.
Dependencies resolved.
=================================================================================
 Package                  Arch   Version                     Repository     Size
=================================================================================
Installing:
 java-17-openjdk-devel    x86_64 1:17.0.2.0.8-4.el8_5        ol8_appstream 5.1 M
Installing dependencies:
 alsa-lib                 x86_64 1.2.5-4.el8                 ol8_appstream 489 k
 copy-jdk-configs         noarch 4.0-2.el8                   ol8_appstream  30 k
 giflib                   x86_64 5.1.4-3.el8                 ol8_appstream  51 k
 graphite2                x86_64 1.3.10-10.el8               ol8_appstream 122 k
 harfbuzz                 x86_64 1.7.5-3.el8                 ol8_appstream 295 k
 java-17-openjdk          x86_64 1:17.0.2.0.8-4.el8_5        ol8_appstream 245 k
 java-17-openjdk-headless x86_64 1:17.0.2.0.8-4.el8_5        ol8_appstream  41 M
 javapackages-filesystem  noarch 5.3.0-1.module+el8+5136+7ff78f74
                                                             ol8_appstream  30 k
 lcms2                    x86_64 2.9-2.el8                   ol8_appstream 164 k
 libXcomposite            x86_64 0.4.4-14.el8                ol8_appstream  28 k
 libXi                    x86_64 1.7.10-1.el8                ol8_appstream  49 k
 libXtst                  x86_64 1.2.3-7.el8                 ol8_appstream  22 k
 libfontenc               x86_64 1.1.3-8.el8                 ol8_appstream  37 k
 libjpeg-turbo            x86_64 1.5.3-12.el8                ol8_appstream 157 k
 lua                      x86_64 5.3.4-12.el8                ol8_appstream 192 k
 ttmkfdir                 x86_64 3.0.9-54.el8                ol8_appstream  62 k
 tzdata-java              noarch 2021e-1.el8                 ol8_appstream 191 k
 xorg-x11-font-utils      x86_64 1:7.5-41.el8                ol8_appstream 104 k
 xorg-x11-fonts-Type1     noarch 7.5-19.el8                  ol8_appstream 522 k

Transaction Summary
=================================================================================
Install  20 Packages

Total download size: 49 M
Installed size: 205 M
Is this ok [y/N]:

1.3. java 설치 경로 조회

which를 이용하여 java 명령어의 위치를 조회하고

which java
/usr/bin/java

readlink 명령어로 링크가 가리키는 주소를 조회합니다.

readlink /usr/bin/java
/etc/alternatives/java

dirname 명령어를 이용하여 java 명령어가 위치한 디렉토리를 조회합니다.

dirname $(readlink /etc/alternatives/java)
/usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64/bin

위의 결과값 중, /usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64$JAVA_HOME에 해당됩니다.

이 부분을 직접 /etc/profile에 설정해도 되지만, 위의 명령어를 활용하여 환경변수에 설정해두면, 나중에 기본 JDK를 변경하더라도 동적으로 JAVA_HOME도 자동으로 반영될 수 있습니다.


1.4. JAVA_HOME 설정하기

dirname은 현재 가리키고 있는 파일 또는, 디렉토리가 위치한 디렉토리를 리턴하는 명령어입니다.
따라서 1.3 에서 이용한 명령어에서 dirname을 한번더 감싸면 JAVA_HOME이 됩니다.

dirname $(dirname $(readlink -f $(readlink -f $(which java))))
/usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64

이점을 활용하여 환경변수를 설정해주고,

sudo vim /etc/profile
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(readlink -f $(which java)))))
export PATH=$PATH:$JAVA_HOME/bin

수정사항을 반영해줍니다.

source /etc/profile

그리고 JAVA_HOME을 조회해봅니다.
원하는 결과가 잘 출력되는 것을 확인해 볼 수 있습니다.

echo $JAVA_HOME
/usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64

2. 다른 버전의 JDK 설치 (JDK 1.8)

지금의 상태에서 java 버전을 조회하면 위에서 설치했던 openjdk 17버전이 출력됩니다.

java -version
openjdk 17.0.2 2022-01-18 LTS
OpenJDK Runtime Environment 21.9 (build 17.0.2+8-LTS)
OpenJDK 64-Bit Server VM 21.9 (build 17.0.2+8-LTS, mixed mode, sharing)

이 상황에서, java 1.8 버전을 설치하면 어떻게 될까?
java 1.8 패키지 목록을 조회해봅니다.

sudo dnf list "*java-1.8.0-openjdk*"
Repository ol8_developer_EPEL is listed more than once in the configuration
Last metadata expiration check: 3:54:06 ago on Thu 17 Feb 2022 10:16:07 AM GMT.
Available Packages
java-1.8.0-openjdk.src                    1:1.8.0.322.b06-2.el8_5   ol8_appstream
java-1.8.0-openjdk.x86_64                 1:1.8.0.322.b06-2.el8_5   ol8_appstream
java-1.8.0-openjdk-accessibility.x86_64   1:1.8.0.322.b06-2.el8_5   ol8_appstream
java-1.8.0-openjdk-demo.x86_64            1:1.8.0.322.b06-2.el8_5   ol8_appstream
java-1.8.0-openjdk-devel.x86_64           1:1.8.0.322.b06-2.el8_5   ol8_appstream
java-1.8.0-openjdk-headless.x86_64        1:1.8.0.322.b06-2.el8_5   ol8_appstream
java-1.8.0-openjdk-javadoc.noarch         1:1.8.0.322.b06-2.el8_5   ol8_appstream
java-1.8.0-openjdk-javadoc-zip.noarch     1:1.8.0.322.b06-2.el8_5   ol8_appstream
java-1.8.0-openjdk-src.x86_64             1:1.8.0.322.b06-2.el8_5   ol8_appstream

java-1.8.0-openjdk-devel.x86_64를 설치합니다.

sudo dnf install java-1.8.0-openjdk-devel.x86_64
Repository ol8_developer_EPEL is listed more than once in the configuration
Last metadata expiration check: 3:55:24 ago on Thu 17 Feb 2022 10:16:07 AM GMT.
Dependencies resolved.
=================================================================================
 Package                     Arch   Version                  Repository     Size
=================================================================================
Installing:
 java-1.8.0-openjdk-devel    x86_64 1:1.8.0.322.b06-2.el8_5  ol8_appstream 9.8 M
Installing dependencies:
 java-1.8.0-openjdk          x86_64 1:1.8.0.322.b06-2.el8_5  ol8_appstream 342 k
 java-1.8.0-openjdk-headless x86_64 1:1.8.0.322.b06-2.el8_5  ol8_appstream  34 M

Transaction Summary
=================================================================================
Install  3 Packages

Total download size: 44 M
Installed size: 159 M
Is this ok [y/N]:

java 1.8을 설치한 후 다시 java 버전을 조회해보면 가장 최근에 설치한 1.8 버전으로 출력되는 것을 확인해 볼 수 있습니다.

java -version
openjdk version "1.8.0_322"
OpenJDK Runtime Environment (build 1.8.0_322-b06)
OpenJDK 64-Bit Server VM (build 25.322-b06, mixed mode)

3. 기본 JDK 변경하기

3.1. java 심볼릭 링크 변경

JDK 17을 기본 JDK로 변경하고 싶다면 어떻게 해야할까.

alternatives --config 명령어를 이용하면 여러 버전으로 설치된 명령어 패키지 중 기본으로 설정할 패키지를 변경할 수 있습니다.

sudo alternatives --config java
There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64/bin/java)
*+ 2           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/jre/bin/java)

Enter to keep the current selection[+], or type selection number:

현재 적용중인 패키지에는 + 표시가 되어있습니다.
변경하고 싶다면 변경하고 패키지의 Selection 숫자를 입력하고, 변경하고 싶지않다면 Enter를 입력하면 됩니다.

1번 패키지로 변경하고 다시 java 버전을 조회해봅니다.

java -version
openjdk version "17.0.2" 2022-01-18 LTS
OpenJDK Runtime Environment 21.9 (build 17.0.2+8-LTS)
OpenJDK 64-Bit Server VM 21.9 (build 17.0.2+8-LTS, mixed mode, sharing)

JAVA_HOME 역시 변경된 것을 확인할 수 있습니다.

echo $JAVA_HOME
/usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64

3.2. 참고

alternatives --config 명령어로 java 패키지 상태를 다시 확인해보면, jdk 17에 + 기호가 있고, jdk 1.8에 * 기호가 설정되어 있습니다.

sudo alternatives --config java
There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
 + 1           /usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64/bin/java
*  2           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/jre/bin/java)

Enter to keep the current selection[+], or type selection number:

--config 는 java 명령어의 대한 심볼릭 링크는 변경해주지만 (/etc/alternatives/java) 우선순위는 변경되지 않기 때문입니다.

* 은 우선순위(priority)가 높은 명령어
+ 는 java명령어가 가리키는(simbolic link 설정된) 명령어


만약, 패키지의 우선순위를 바꾸고 싶다면 어떻게 해야할까?

패키지 우선순위 변경은 굳이 하지 않아도 되는 기능입니다.
priority를 수정하고 싶은 경우에만 아래를 참고해주세요.


3.2.1. 우선순위 체크

먼저 두 패키지의 우선순위를 확인해봅니다.

alternatives --display java
java - status is manual.
 link currently points to /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/jre/bin/java
/usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64/bin/java - family java-17-openjdk.x86_64 priority 1
...
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/jre/bin/java - family java-1.8.0-openjdk.x86_64 priority 1800322
...
Current 'best' version is /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/jre/bin/java

jdk 17은 priority 1, jdk 1.8은 priority 1800322로 best 버전은 jdk 1.8로 되어있습니다.

3.2.2. 우선순위 변경

jdk 17의 우선순위를 jdk 1.8보다 높게 설정해봅니다.

sudo alternatives --install /usr/bin/java java /usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64/bin/java 1900322

3.2.3. 결과

이제는 alternatives --config 명령어 결과가 둘다 jdk 17로 변경되었습니다.

alternatives --config java
There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64/bin/java
   2           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/jre/bin/java)

alternatives --display 결과 역시 best package로 jdk 17이 나옵니다.

alternatives --display java
java - status is manual.
 link currently points to /usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64/bin/java
/usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64/bin/java - priority 1900322
...
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/jre/bin/java - family java-1.8.0-openjdk.x86_64 priority 1800322
...
Current 'best' version is /usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64/bin/java.

++

  • alternatives를 이용한 java 버전 관리
  • How to install JDK 17 in CentOS 8
  • How to install JDK 17 in Oracle Linux 8
  • how to change default jdk in centos8
728x90
반응형

'Linux > Basic' 카테고리의 다른 글

[Linux] TCP Wrapper를 이용한 ip별 접근제어 설정  (0) 2022.08.05