java 컴파일용 shell script

개요

얼마전 프로젝트에서 UNIX / ksh 환경에서 동작하는 데몬/배치를 개발하는 작업을 수행하였습니다.
CI(Continuous Integration) 담당자가 컴파일용 shell script를 요구하더군요.
아래의 코드는 그때 사용했던 java 컴파일용 스크립트입니다.

참고로 java-daemon 디렉토리 하위에 bin, config, lib, src 디렉토리로 구성되어 있으며,
bin/log 에 로그파일을 생성합니다.
CLASSPATH 환경변수는 .profile 내에 설정되어 있습니다.

소스 설명

  • 파라메터로 컴파일의 대상을 입력받습니다. all 또는 파일명을 사용합니다.
  • lib 디렉토리의 jar를 classpath에 추가하기 위해 lib 디렉토리에서 ls 명령어를 사용합니다.
  • 컴파일할 java 파일들을 찾기 위해 java-daemon 하위 디렉토리들에서 find 명령어로 파일을 찾아 src.txt에 기록합니다.
  • src.txt에서 wc 명령으로 java 파일들을 찾았는지 검사합니다.
  • src.txt 파일을 사용하여 javac로 컴파일합니다.

컴파일용 shell script

#!/bin/ksh
ROOT_PATH=/fsapp/cyt/java-daemon/

# 디렉토리 이동
cd $ROOT_PATH

# 입력 파라메터 검증
if [ $1 ] && ([ "$1" == "all" ] || "$1" == "ALL" ]); then
    echo ""
    echo "전체 JAVA 파일을 컴파일합니다."
    TARGET_JAVA=*.java
elif [ $1 ]; then
    echo ""
    echo "$1 파일을 컴파일합니다."
    TARGET_JAVA=$1.java
else
    echo ""
    echo "오류 : 입력값이 없습니다."
    echo "예) make_java_batch.sh ALL"
    echo "예) make_java_batch.sh TMDaemon"
    exit -1
fi

# log 디렉토리 생성
mkdir -p $ROOT_PATH/bin/log

# CLASSPATH 정의
THE_CLASSPATH=$CLASSPATH
THE_CLASSPATH=$THE_CLASSPATH:bin
for i in `ls $ROOT_PATH/lib/*.jar`
    do
    THE_CLASSPATH=${THE_CLASSPATH}:${i}
done

# 대상 JAVA 파일 정의
cd $ROOT_PATH
find $ROOT_PATH/src -name "${TARGET_JAVA}" > src.txt
JAVA_COUNT=`cat src.txt | wc -l | sed 's,^ *,,;s, *$,,'`

# 대상 JAVA 파일 유무 확인
if [ "JAVA_COUNT" == "0" ]; then
    echo ""
    echo "오류 : 입력된 JAVA 파일이 없습니다."
    echo "예) make_java_batch.sh ALL"
    echo "예) make_java_batch.sh TMDaemon"
    exit -1
fi

# 컴파일
echo "$JAVA_COUNT 개의 java 파일을 컴파일 합니다..."
java -d bin -classpath ".:${THE_CLASSPATH}" @src.txt
rm src.txt

# 결과 출력
if [ $? -eq 0 ]; then
    echo "SUCCESS"
else 
    echo "!!! FAIL !!!"
fi

 

Notice

  • 이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 2.0 대한민국 라이선스에 따라 이용할 수 있습니다. 크리에이티브 커먼즈 라이선스
  • 저작권과 관련된 파일요청 및 작업요청을 받지 않습니다.
  • 댓글에 대한 답변은 늦을 수도 있습니다.
  • 댓글 남기기

    이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다