리눅스에서 톰캣과 같은 WAS를 사용하거나 스프링(Spring) 등 자바로 설치한 프로그램을 배포할 때, 서버에 설치되어 있는 자바와 개발에 사용한 자바의 버전이 다른 경우가 있다.
이때, 필요한 자바 버전을 따로 설치하고 JAVA_HOME 변수와 PATH를 지정하여 사용해도 되지만, 조금 더 시스템적으로 관리할 수 있는 방법인 update-alternatives 명령어를 사용하는 방법을 소개한다.
이번 예제에서는 JDK1.8이 설치되어 있는 리눅스에 JDK17을 설치하여 설정하는 순서로 진행한다.
1. OpenJDK 17 설치
$ sudo yum install java-17-openjdk-devel
2. 현재 자바 버전 확인
위에서 OpenJDK 17을 설치했지만 java -version 결과는 아직 1.8 버전으로 확인된다.
$ java -version
openjdk version "1.8.0_412"
OpenJDK Runtime Environment (build 1.8.0_412-b08)
OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)
3. 자바 경로 확인
$ which java
/usr/bin/java
4. 실제 자바 경로 확인
실제 경로를 확인해 보면 자바 17 버전을 설치 후에도 /usr/bin/java는 여전히 자바 1.8로 연결되어 있는 것을 알 수 있다.
$ readlink -f /usr/bin/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-2.el8.x86_64/jre/bin/java
5. update-alternatives 명령어를 이용해서 자바 버전을 변경한다.
update-alternatives --config java 를 입력하면 현재 OS에 설치되어 있는 리눅스의 목록이 숫자와 함께 표시되며, 사용할 버전의 숫자를 키보드로 입력한다.
$ update-alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
*+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-2.el8.x86_64/jre/bin/java)
2 java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.11.0.9-2.el8.x86_64/bin/java)
Enter to keep the current selection[+], or type selection number: 2
6. 변경된 자바 버전 확인
이제 다시 java -version 명령어를 사용하면 버전이 17로 변경된 것을 확인할 수 있다.
java -version
openjdk version "17.0.11" 2024-04-16 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.11.0.9-3) (build 17.0.11+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.11.0.9-3) (build 17.0.11+9-LTS, mixed mode, sharing)
7. 변경된 자바 경로 확인
위에서 했던 것과 마찬가지로 자바의 경로를 다시 한 번 확인해 보면 17 버전으로 변경되어 있다.
$ which java
/usr/bin/java
$
$ readlink -f /usr/bin/java
/usr/lib/jvm/java-17-openjdk-17.0.11.0.9-2.el8.x86_64/bin/java
이렇게 update-alternatives 명령어를 사용하면 시스템 전역으로 자바의 버전이 변경되기 때문에, 특정 톰캣 등에서의 개별 설정으로 인해 유지보수에 혼란이 오는 경우를 방지할 수 있다.
추가적으로, 자바 버전에 따라 JAVA_HOME 변수도 같이 변경해야 할 일이 종종 있을 수 있는데, 이때 다른 프로그램에서 쉽게 적용할 수 있는 스크립트이다.
$ JAVA_HOME=$(java -XshowSettings:properties -version 2>&1 |grep java.home | awk -F= '{print $2}')
여기서 사용되는 java -XshowSettings:properties -version 명령어는 설치된 java 버전에 관한 자세한 속성들을 출력하는 명령어이다.
$ java -XshowSettings:properties -version
Property settings:
file.encoding = UTF-8
file.separator = /
java.class.path =
java.class.version = 61.0
java.home = /usr/lib/jvm/java-17-openjdk-17.0.11.0.9-2.el8.x86_64
java.io.tmpdir = /tmp
java.library.path = /usr/java/packages/lib
/usr/lib64
/lib64
/lib
/usr/lib
java.runtime.name = OpenJDK Runtime Environment
java.runtime.version = 17.0.11+9-LTS
java.specification.name = Java Platform API Specification
java.specification.vendor = Oracle Corporation
java.specification.version = 17
java.vendor = Red Hat, Inc.
java.vendor.url = https://www.redhat.com/
java.vendor.url.bug = https://access.redhat.com/support/cases/
java.vendor.version = (Red_Hat-17.0.11.0.9-3)
java.version = 17.0.11
java.version.date = 2024-04-16
java.vm.compressedOopsMode = 32-bit
java.vm.info = mixed mode, sharing
java.vm.name = OpenJDK 64-Bit Server VM
java.vm.specification.name = Java Virtual Machine Specification
java.vm.specification.vendor = Oracle Corporation
java.vm.specification.version = 17
java.vm.vendor = Red Hat, Inc.
java.vm.version = 17.0.11+9-LTS
jdk.debug = release
line.separator = \n
native.encoding = UTF-8
os.arch = amd64
os.name = Linux
os.version = 4.18.0-553.5.1.el8_10.x86_64
path.separator = :
sun.arch.data.model = 64
sun.boot.library.path = /usr/lib/jvm/java-17-openjdk-17.0.11.0.9-2.el8.x86_64/lib
sun.cpu.endian = little
sun.io.unicode.encoding = UnicodeLittle
sun.java.launcher = SUN_STANDARD
sun.jnu.encoding = UTF-8
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
sun.stderr.encoding = UTF-8
sun.stdout.encoding = UTF-8
user.country = US
user.dir = /root
user.home = /root
user.language = en
user.name = root
openjdk version "17.0.11" 2024-04-16 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.11.0.9-3) (build 17.0.11+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.11.0.9-3) (build 17.0.11+9-LTS, mixed mode, sharing)
'IT > 리눅스' 카테고리의 다른 글
yum groupinstall (dnf group install) 이란? (0) | 2024.08.08 |
---|---|
셸 스크립트를 바이너리 실행파일로 만들기 (0) | 2024.08.07 |
마리아디비(MariaDB) 덤프 생성하기 (0) | 2024.07.29 |
마리아디비(MariaDB) 백업 설정 (0) | 2024.07.26 |
마리아디비(MariaDB) 리눅스(Linux)에 설치하기 (0) | 2024.07.26 |