Rocky Linux 8을 클린설치 하고 나서 당연하게 설치 되어 있을 것이라고 생각했던 Java 가 java-1.8.0-openjdk 였다.
'java-1.8.0-openjdk.x86_64' 이 패키지는 Java Runtime Environment(JRE)를 포함한다. 따라서 Java를 Application을 실행하는 데 필요한 최소한의 구성 요소만 포함하고 있다. 그래서 java 는 설치되어도 javac 는 설치되지 않는다. 그래서 'java-1.8.0-openjdk-devel.x86_64'를 설치해줘야 javac 도 사용할 수 있다. 'java-1.8.0-openjdk-devel.x86_64' 패키지는 Java Development Kit(JDK), JRE, Java Applicatino을 개발하기 위한 도구들도 함께 포함되어 있다. 예를 들어, javac, jar, javadoc 등이 포함되어 있는 것이다. 따라서 Java Application 을 개발하거나 Compile 해야 하는 경우엔 java-1.8.0-openjdk-devel.x86_64 를 설치하는게 바람직하다.
yum search openjdk
일반적으로 가장 많이 사용하는 java 1.8 을 설치해보자. 사용자의 필요에 따라 각자 원하는 버전을 설치해도 그 과정은 동일하다.
yum install java-1.8.0-openjdk-devel.x86_64
yum list installed | grep java
yum, dnf 같은 Package Manager를 사용해서 Package를 관리하다보면 가끔 Java가 Update 되는 경우가 있다. 환경설정에서 절대 경로로 환경설정을 해 놓으면 Java가 Update 되면서 Version 값 때문에 경로가 바뀌어 버리면 정상적인 작동을 못하게 된다. 그래서 환경설정 값이 Loading이 될 때 Java의 설치 경로를 읽어서 JAVA_HOME 및 PATH 값을 설정해주는게 좋다.
which java
일반적으로 Java의 설치 경로를 확인하는 방법으로 'which java' 명령어로 확인 할 수 있다. 하지만 which로 경로를 확인하게 되면 절대 경로가 아닌 Symbolic Link 경로를 보여준다.
위의 Capture를 보면 최초 java 명령어가 바라보는 곳은 '/etc/alternatives/java' 이다. 그리고 두번째로 Symbloic Link 가 된 곳은 '/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-2.el8.x86_64/jre/bin/java' 이다. 만약 지금은 1.8.0.412 버전인데 추후 Update가 되어 1.8.413 으로 변경된다면 저 링크는 정상적으로 작동하지 않게 된다. 다행스럽게도 Package가 설치 되면서 다시금 Symbolic Link를 설정해 준다면 문제가 안되겠지만 그렇지 않은 경우라면 Java 환경설정 값 때문에 다른 Package가 정상적으로 구동되지 않는 상황이 발생할 수 있다.
Java의 설치 경로 확인 작업에서 Symbolic Link가 아닌 실제 경로를 조회하는 방법으로 readlink 명령어를 사용할 수 있다.
readlink -f $(which java)
이제 환경설정에 JAVA_HOME 을 설정해 보자. Shell에 따라서 ~/.bash_profile 이 될 수 도 있고 ~/.zshrc 가 될 수 도 있고 다른 설정 파일이 될 수 도 있다. 별도의 Shell을 설치 하지 않았다면 ~/.bash_profile 에 환경설정을 추가하면 된다.
앞서 확인한 대로 java의 설치 절대경로는 readlink를 통해서 확인할 수 있다. 하지만 보통 환경설정을 할 때 사용되는 $JAVA_HOME의 경로는 '/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-2.el8.x86_64/jre/bin/java' 가 아니라 '/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-2.el8.x86_64' 이 JAVA_HOME 이 된다.
그러면 realink 로 얻어진 Java의 설치 경로를 그대로 사용할 수 없으므로 그 앞 path 값을 구해서 설정해줘야 하는 것이다.
java_path=$(readlink -f $(which java))
echo $(dirname $(dirname $(dirname $java_path)))
위의 Script 로 확인해 보면 '/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-2.el8.x86_64' 가 출력되는 것을 확인할 수 있다. 그 경로를 JAVA_HOME으로 설정하면 된다. 그 후 PATH에 대한 부분을 추가하면 된다.
cd ~
vi .bash_profile
# Set JAVA_HOME dynamically
if [ -z "$JAVA_HOME" ]; then
java_path=$(readlink -f $(which java))
if [ -n "$java_path" ]; then
export JAVA_HOME=$(dirname $(dirname $(dirname $java_path)))
fi
fi
# Append JAVA_HOME/bin to PATH if it's not already there
if [[ ":$PATH:" != *":$JAVA_HOME/bin:"* ]]; then
export PATH="$PATH:$JAVA_HOME/bin"
fi
위의 Script는 앞서 $JAVA_HOME 의 값이 설정되지 않았다는 전재로 작성된 것이다. 위의 Script 처럼 설정해주소 환경설정을 다시 Loading 해서 $JAVA_HOME 및 $PATH 값을 확인해 보면 정상적으로 Java 경로에 대한 환경설정이 된 것을 확인 할 수 있다. 더불어 앞서 이야기 했듯이 Pack Manager에 의해서Java 가 Update 되어 절대 경로가 변경되는 상황이 발생하더라도 능동적으로 환경설정이 적용되는 효과를 볼 수 있다.
'Blog > JAVA' 카테고리의 다른 글
MyBatis XML의 Parameter 기호인 $ 와 # 은 어떤 차이가 있나 ? (0) | 2024.07.18 |
---|---|
RESTFul-API SampleCoding (Java,SpringBoot,Maven,myBatis) #4 (0) | 2024.07.17 |
RESTFul-API SampleCoding (Java,SpringBoot,Maven,myBatis) #3 (0) | 2024.07.16 |
RESTFul-API SampleCoding (Java,SpringBoot,Maven,myBatis) #2 (2) | 2024.07.16 |
RESTFul-API SampleCoding (Java,SpringBoot,Maven,myBatis) #1 (0) | 2024.07.15 |