안녕하세요. 오랫만입니다. 제 우분투 서버에 설치되어 있는 java랑 javac 버전은 8인데요. 이를 11로 어떻게 바꾸었는지 보도록 하겠습니다.

 

 먼저, Main.java입니다. Map.of 메서드가 보이는데요. 문서를 보면 9 버전부터 적용되는 메서드라고 되어 있어요. 이 메서드가 리턴하는 것은 immutable map이라고 하는데요.

 

 

 Main.java를 컴파일 해 보면, of 라는 것을 찾을 수 없다는 에러가 나옵니다. 왜 그럴까요? java랑 javac의 버전이 1.8이였기 때문입니다. 저 메서드는 1.9에 추가되었으니 java11로 업데이트를 해 보겠습니다.

 


 저는 우분투를 쓰고 있으니, apt search를 이용해서 openjdk가 들어가는 패키지를 모두 찾도록 하겠습니다.

 

 

 보니까 제가 찾는 것은 openjdk-11-jdk임을 알 수 있는데요. 이 패키지를 설치하겠습니다.

 

 

 그러면 openjdk-11-jdk가 설치가 됩니다.

 

 


 이제 우리는 update-alternatives 명령어를 이용해서 java랑 javac 버전을 선택할 수 있는데요.

 

 

 update-alternatives --config java를 입력하면, java에 대한 대체 경로를 선택할 수 있습니다.

 

 

 그리고 update-alternatives --config javac를 입력하면 javac에 대한 대체 경로를 선택할 수 있습니다. 아마도, 이 경로를 보고 어떤 java나 javac를 쓸 것인지 알아내서 실행시키는 것으로 보이긴 하네요. 각각 java8, javac8 버전을 선택한 상태에서, Main.java를 컴파일 해 보겠습니다.

 

 

 그러면 javac 버전은 1.8.0_312라고 나오는데요. 그렇기 때문에 Map.of 부분에서 컴파일 에러를 뱉게 됩니다. 자바 8 버전에는 Map.of 메서드가 없기 때문입니다. 이제 java와 javac의 버전을 11로 바꾼 다음에 다시 시도해 보겠습니다.

 

 

 저는 java11의 javac 경로가 0번, java11의 java 경로가 0번으로 잡혀있었기 때문에, 둘 다 0번을 선택하였습니다.

 

 

 이제 다시 Main.java를 실행시키면 {a=b} 라는 결과를 얻을 수 있습니다. 이제 JAVA_HOME만 바꿔주면 됩니다.