OpenJDK 최신버전인 25를 설치하고 IntelliJ Idea에서 KMP(Kotlin Multi-Platform) 개발을 해보려고 했더니, jdk 25 지원이 안된다는 거다. 그래서 IDE 설정에서 이전버전인 24로 했더니, 잘 돌아감. 그런데, 커맨드라인 빌드 해볼려니 또 문제가 생김. IDE는 빌트인 jdk도 있고 그래서 커맨드라인으로 gradlew를 실행했을 때와 다르게 동작한다.
JDK처럼 여러버전을 두고 필요시 실행되는 버전을 바꾸고 싶을 때를 위해 update-alternatives 라는 것이 존재한다. java나 javac의 경우 어떻게 실행되는지 찾아보자.
batmask@batmask-desktop:~/.jdks$ whereis javac
javac: /usr/bin/javac
batmask@batmask-desktop:~/.jdks$ ls -la /usr/bin/javac
lrwxrwxrwx 1 root root 23 9월 26 06:55 /usr/bin/javac -> /etc/alternatives/javac
batmask@batmask-desktop:~/.jdks$ ls -la /etc/alternatives/javac
lrwxrwxrwx 1 root root 33 11월 19 20:22 /etc/alternatives/javac -> /usr/lib/jvm/jdk-24.0.2/bin/javac
batmask@batmask-desktop:~/.jdks$ 위 화면을 보면, javac의 위치를 확인 한 후, ls 명령으로 보면 소프트링크로 /etc/alternatives/ 에 연결되있음을 알 수 있다. 또한, 이건 실제 실행파일 위치로 소프트 링크로 연결되어 있다. 이런 연결 구조로, javac를 실행했을 때 연결된 실제 파일이 실행되는 것이다. update-alternatives는 이 /etc/alternatives/에서 소프트 링크로 연결될 실제 파일들을 관리하며 사용자가 변경 가능하도록 만들어준다. 다음 명령을 입력해보자.
batmask@batmask-desktop:~/.jdks$ sudo update-alternatives --config java
대체 항목 java에 대해 (/usr/bin/java 제공) 3개 선택이 있습니다.
선택 경로 우선순� 상태
------------------------------------------------------------
0 /usr/lib/jvm/java-25-openjdk-amd64/bin/java 2511 자동 모드
1 /usr/lib/jvm/java-25-openjdk-amd64/bin/java 2511 수동 모드
2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 수동 모드
* 3 /usr/lib/jvm/jdk-24.0.2/bin/java 3 수동 모드
현재 선택[*]을 유지하려면 <엔터>를 누르고, 아니면 선택 번호를 입력하시오: 1
update-alternatives: using /usr/lib/jvm/java-25-openjdk-amd64/bin/java to provide /usr/bin/java (java) in manual mode
batmask@batmask-desktop:~/.jdks$ java -version
openjdk version "25" 2025-09-16
OpenJDK Runtime Environment (build 25+36-Ubuntu-124.04.2)
OpenJDK 64-Bit Server VM (build 25+36-Ubuntu-124.04.2, mixed mode, sharing)
batmask@batmask-desktop:~/.jdks$ sudo update-alternatives –config kava 를 입력하면, java에 대해 선택가능한 항목들을 보여준다. 여기서 원하는 번호를 선택하고 엔터를 누르면, 그 버전으로 연결을 바꿔준다. 위에서 3번 jdk 24로 되어 있는걸 1번 jdk 25로 바꿔주고 java 버전을 확인해보면 25로 변경 되었음을 알 수 있다.
0번은 자동모드인데, 우선순위 값에 따라 선택하게 된다. 숫자가 낮은게 먼저아닐까 혼동할 수 있는데, 위 화면을 보면 제일 큰 값이 사용되는 것으로 보인다.
위 화면은 이미 내가 24버전을 별도로 다운받아 설치해 설정한 상황이다. 위에서 OpenJDK 25는 소프트웨어 매니저로 설치한 것이다. 소프트웨어 매니저로 패키지를 받으면, 자동으로 alternative설정도 되는 것으로 보이나, OpenJDK 24는 LTS(Long Term Support)버전이 아니라서 없다고 한다. 이 경우, 직접 update-alternatives도 설정해줘야 한다.
다운로드를 받았으면, 다음의 명령으로 설정이 가능하다.
update-alternatives install <link> <name> <path> <priority>순서대로, 실행되는 소프트링크위치, 파일이름, 소트프 링크로 실행될 파일경로, 우선순위의 인자가 들어간다. 우선 다운로드를 먼저 해야지. 특정 버전 JDK를 받으려면 다음 사이트로 들어가면 된다.
다운받은 jdk를 압축을 풀어 사용해도 되는데, 여기서는 intellij idea에서 설치한 corretto-24 버전을 사용해 보겠다. 이 jdk의 위치는 ~/.jdk/ 에 설치된다.
batmask@batmask-desktop:~/.jdks/corretto-24.0.2$ sudo update-alternatives --install /usr/bin/java java ~/.jdks/
.corretto-24.0.2.intellij corretto-24.0.2/
batmask@batmask-desktop:~/.jdks/corretto-24.0.2$ sudo update-alternatives --install /usr/bin/java java ~/.jdks/corretto-24.0.2/bin/java
java javac javadoc javap
batmask@batmask-desktop:~/.jdks/corretto-24.0.2$ sudo update-alternatives --install /usr/bin/java java ~/.jdks/corretto-24.0.2/bin/java 2
batmask@batmask-desktop:~/.jdks/corretto-24.0.2$ sudo update-alternatives --install /usr/bin/javac javac ~/.jdks/corretto-24.0.2/bin/javac 2
위 화면을 보면, sudo update-alternatives –install 을 이용해서 update-alternatives에 해당 위치의 실행파일을 등록했다. java와 javac 두개의 파일에 대해 작업이 됐는데, 인자들은 위의 설명을 참고하면 될 것이다. 이제 다시 –config를 해보면,
batmask@batmask-desktop:~/.jdks/corretto-24.0.2$ sudo update-alternatives --config java
대체 항목 java에 대해 (/usr/bin/java 제공) 4개 선택이 있습니다.
선택 경로 우선순� 상태
------------------------------------------------------------
0 /usr/lib/jvm/java-25-openjdk-amd64/bin/java 2511 자동 모드
1 /home/batmask/.jdks/corretto-24.0.2/bin/java 2 수동 모드
2 /usr/lib/jvm/java-25-openjdk-amd64/bin/java 2511 수동 모드
3 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 수동 모드
* 4 /usr/lib/jvm/jdk-24.0.2/bin/java 3 수동 모드
현재 선택[*]을 유지하려면 <엔터>를 누르고, 아니면 선택 번호를 입력하시오: 1
update-alternatives: using /home/batmask/.jdks/corretto-24.0.2/bin/java to provide /usr/bin/java (java) in manual mode
batmask@batmask-desktop:~/.jdks/corretto-24.0.2$ java -version
openjdk version "24.0.2" 2025-07-15
OpenJDK Runtime Environment Corretto-24.0.2.12.1 (build 24.0.2+12-FR)
OpenJDK 64-Bit Server VM Corretto-24.0.2.12.1 (build 24.0.2+12-FR, mixed mode, sharing)
batmask@batmask-desktop:~/.jdks/corretto-24.0.2$
update-alternatives –install로 추가한 버전이, –config 화면에서 추가된 걸 확인 할 수 있다. 해당 버전을 선택하고나면, java –version에서 해당 버전으로 변경 된 것이 확인 가능하다.
참고로, 제거를 하려면 –remove 옵션을 사용하면 된다.
sudo update-alternatives --remove java ~/.jdks/corretto-24.0.2/bin/java