문제점
리눅스 OS 운영체제에서 java(jdk) 를 설치가 완료된 환경이며, 리눅스 명령어 프롬프트 상에서 java -version 명령어를 실행한 결과, 아래와 같은 에러를 확인하였다.
자바(java)명령어가 정상적으로 입력되지 않고, 알수 없는 에러메시지가 출력되는걸 확인할 수 있었다.
문제점을 확인하기 위해서 검색을 해봤지만 “JAVA_HOME 을 해줘야 된다” , “PATH를 해줘야된다” 등의 내용만 있을뿐 확실한 답은 찾을수 없었다. 일종의 버그 같은 현상인거 같다. 해결방법은 없는걸까?
해결방법
해결방법은 생각보다 간단하다. Object class 파일이 jre/lib 쪽에 있는데, rt.pack 이라는 파일들만 보이고 rt.jar 라는 파일은 전혀 보이지 않는다.
이 때문에 해당 파일들의 클래스패스를 찾을수 없으니 java 를 실행할수 없다고 에러메시지가 출력되는것이었다. 그래서 java 공식홈페이지의 포럼에서 pack 파일을 jar 파일로 변환해주는 스크립트를 찾게 되었다.
아래 스크립트를 잘 확인해서 JAVA_HOME 부분만 수정하면 된다.
pack -> jar 변환 스크립트
###################################
#!/bin/sh
JH=${JAVA_HOME:-"/usr/local/java/jre"}
UNPACK_EXE=$JH/bin/unpack200
if [ -f $UNPACK_EXE ]; then
chmod +x $UNPACK_EXE
PACKED_JARS="/jre/lib/rt.jar /jre/lib/jsse.jar /jre/lib/charsets.jar /jre/lib/ext/localedata.jar /jre/lib/plugin.jar /jre/lib/javaws.jar /jre/lib/deploy.jar"
#PACKED_JARS="/lib/tools.jar" 이부분은 tools.jar 생성할때 필요. 위에꺼 컴파일후 실행.
for i in $PACKED_JARS; do
srcFile=${JH}`dirname $i`/`basename $i .jar`.pack
dstFile=${JH}/$i
if [ ! -f $srcFile ]; then
printf "Error: Unable to find %s. Please, check out your installation.\n" $srcFile
exit 1
fi
$UNPACK_EXE $srcFile $dstFile
if [ ! -f $dstFile ]; then
printf "Error: unpack could not create %s. Please refer to the Troubleshooting\n" $dstFile
printf "Section of the Installation Instructions on the download page.\n"
exit 1
fi
rm -f $srcFile
done
else
printf "Error: unpack command could not be found. Please refer to the \n"
printf "TroubleShooting Section of the Installation Instructions on \n"
printf "the download page.\n"
printf "Please do not attempt to install this archive file.\n"
exit 2
fi
#######################################
스크립트를 수정해서 실행하게되면 pack 확장자가 jar 확장자로 변경되는걸 확인할 수 있다. 이렇게 모두 변경을 완료하고 java -version 실행하면 정상적으로 출력되는걸 확인하였다.
리눅스에서 java Error occurred during initialization of VM 에러메시지 오류 출력을 해결하였다.