자동 컴파일 내용 추가

This commit is contained in:
2025-10-15 16:02:42 +09:00
parent 0be0790e03
commit eb715b8e1b

View File

@@ -61,6 +61,251 @@ if ! git reset --hard origin/main; then
exit 1
fi
# Java 개발 환경 확인 및 설치
echo "Checking Java development environment..."
# JDK 7 우선 설치 및 설정
if ! command -v javac &> /dev/null; then
echo "Java compiler (javac) not found. Installing OpenJDK 7..."
# 패키지 목록 업데이트
apt-get update
# OpenJDK 7 JDK 설치 (JRE가 아닌 JDK)
apt-get install -y openjdk-7-jdk
# 설치 확인
if ! command -v javac &> /dev/null; then
echo "Failed to install OpenJDK 7. Trying alternative installation..."
apt-get install -y default-jdk
if ! command -v javac &> /dev/null; then
echo "Failed to install Java compiler. Exiting..."
exit 1
fi
fi
fi
# JAVA_HOME 설정 (JDK 7 우선)
export JAVA_HOME=""
JDK7_PATHS=(
"/usr/lib/jvm/java-7-openjdk-amd64"
"/usr/lib/jvm/java-1.7.0-openjdk-amd64"
"/usr/lib/jvm/openjdk-7-jdk"
"/usr/lib/jvm/default-java"
)
for path in "${JDK7_PATHS[@]}"; do
if [ -d "$path" ] && [ -f "$path/bin/javac" ]; then
export JAVA_HOME="$path"
export PATH="$JAVA_HOME/bin:$PATH"
echo "Set JAVA_HOME to: $JAVA_HOME"
break
fi
done
if [ -z "$JAVA_HOME" ]; then
echo "Warning: Could not find JDK 7 installation directory"
fi
# Java 버전 확인
echo "Java compiler version:"
javac -version
echo "Java runtime version:"
java -version
# Java 소스 컴파일
echo "Compiling Java sources..."
# Java 컴파일을 위한 디렉토리 생성 및 기존 클래스 파일 정리
echo "Preparing compilation directory..."
rm -rf WebContent/WEB-INF/classes
mkdir -p WebContent/WEB-INF/classes
# 클래스패스 설정 (모든 jar 파일 포함)
CLASSPATH=""
for jar in WebContent/WEB-INF/lib/*.jar; do
if [ -z "$CLASSPATH" ]; then
CLASSPATH="$jar"
else
CLASSPATH="$CLASSPATH:$jar"
fi
done
# JDK 7 기본 라이브러리 추가
if [ -n "$JAVA_HOME" ]; then
if [ -f "$JAVA_HOME/jre/lib/rt.jar" ]; then
CLASSPATH="$CLASSPATH:$JAVA_HOME/jre/lib/rt.jar"
echo "Added JDK 7 runtime: $JAVA_HOME/jre/lib/rt.jar"
fi
if [ -f "$JAVA_HOME/lib/tools.jar" ]; then
CLASSPATH="$CLASSPATH:$JAVA_HOME/lib/tools.jar"
echo "Added JDK 7 tools: $JAVA_HOME/lib/tools.jar"
fi
fi
# Servlet API는 WEB-INF/lib에 있는 것을 사용 (이미 클래스패스에 포함됨)
echo "Using Servlet API from WEB-INF/lib (javax.servlet-api-4.0.1.jar)"
echo "Classpath: $CLASSPATH"
# Java 소스 파일 찾기 및 컴파일
if [ -d "src" ]; then
echo "Found Java source directory: src"
# Java 소스 파일 목록 생성
find src -name "*.java" > java_sources.txt
if [ -s java_sources.txt ]; then
echo "Compiling Java files..."
# Java 컴파일 실행 (Java 7 호환성을 위해 source와 target 버전 명시)
echo "Starting Java compilation with classpath..."
echo "Number of Java files to compile: $(wc -l < java_sources.txt)"
# 컴파일 실행 및 결과 확인
COMPILE_EXIT_CODE=0
javac -cp "$CLASSPATH" -d WebContent/WEB-INF/classes -encoding UTF-8 -source 1.7 -target 1.7 @java_sources.txt 2>&1 | tee compile.log
COMPILE_EXIT_CODE=${PIPESTATUS[0]}
if [ $COMPILE_EXIT_CODE -eq 0 ]; then
echo "Java compilation successful!"
# 컴파일된 클래스 파일 수 확인
CLASS_COUNT=$(find WebContent/WEB-INF/classes -name "*.class" | wc -l)
echo "Successfully compiled $CLASS_COUNT class files"
# 컴파일된 패키지 구조 표시
if [ $CLASS_COUNT -gt 0 ]; then
echo "Compiled packages:"
find WebContent/WEB-INF/classes -type d | grep -v "^WebContent/WEB-INF/classes$" | head -10
fi
else
echo "Java compilation failed! (Exit code: $COMPILE_EXIT_CODE)"
echo "Compilation errors:"
if [ -f compile.log ]; then
tail -50 compile.log
fi
echo "Attempting compilation with extended classpath..."
# 이미 설정된 JAVA_HOME 사용하여 확장된 클래스패스 구성
EXTENDED_CLASSPATH="$CLASSPATH"
if [ -n "$JAVA_HOME" ]; then
echo "Using JAVA_HOME: $JAVA_HOME"
# JDK 7 필수 라이브러리들 추가
for lib in "jre/lib/rt.jar" "lib/tools.jar" "jre/lib/jsse.jar" "jre/lib/jce.jar"; do
if [ -f "$JAVA_HOME/$lib" ]; then
EXTENDED_CLASSPATH="$EXTENDED_CLASSPATH:$JAVA_HOME/$lib"
echo "Added: $JAVA_HOME/$lib"
fi
done
else
echo "Warning: JAVA_HOME not set, using system default"
fi
# 시스템 클래스패스로 재시도
echo "Extended classpath: $EXTENDED_CLASSPATH"
RETRY_EXIT_CODE=0
javac -cp "$EXTENDED_CLASSPATH" -d WebContent/WEB-INF/classes -encoding UTF-8 -source 1.7 -target 1.7 @java_sources.txt 2>&1 | tee compile_retry.log
RETRY_EXIT_CODE=${PIPESTATUS[0]}
if [ $RETRY_EXIT_CODE -eq 0 ]; then
echo "Java compilation successful with extended classpath!"
CLASS_COUNT=$(find WebContent/WEB-INF/classes -name "*.class" | wc -l)
echo "Successfully compiled $CLASS_COUNT class files"
# 컴파일된 패키지 구조 표시
if [ $CLASS_COUNT -gt 0 ]; then
echo "Compiled packages:"
find WebContent/WEB-INF/classes -type d | grep -v "^WebContent/WEB-INF/classes$" | head -10
fi
else
echo "Java compilation failed even with extended classpath. (Exit code: $RETRY_EXIT_CODE)"
echo "Retry compilation errors:"
if [ -f compile_retry.log ]; then
tail -50 compile_retry.log
fi
echo "WARNING: Continuing with deployment anyway. Some features may not work properly."
fi
fi
# 임시 파일 정리
rm -f java_sources.txt compile.log compile_retry.log
# XML, properties 등 리소스 파일들을 classes 디렉토리에 복사
echo "Copying resource files (XML, properties, etc.) to classes directory..."
# src 디렉토리에서 Java 파일이 아닌 모든 파일들을 찾아서 복사
find src -type f ! -name "*.java" | while read resource_file; do
# src/ 부분을 제거하여 상대 경로 생성
relative_path=${resource_file#src/}
target_dir="WebContent/WEB-INF/classes/$(dirname "$relative_path")"
# 대상 디렉토리 생성
mkdir -p "$target_dir"
# 파일 복사
cp "$resource_file" "WebContent/WEB-INF/classes/$relative_path"
echo "Copied: $resource_file -> WebContent/WEB-INF/classes/$relative_path"
done
# 복사된 리소스 파일 수 확인
RESOURCE_COUNT=$(find WebContent/WEB-INF/classes -type f ! -name "*.class" | wc -l)
echo "Copied $RESOURCE_COUNT resource files (XML, properties, etc.)"
else
echo "No Java source files found in src directory"
# Java 파일이 없어도 리소스 파일은 복사
echo "Copying resource files (XML, properties, etc.) to classes directory..."
find src -type f ! -name "*.java" | while read resource_file; do
relative_path=${resource_file#src/}
target_dir="WebContent/WEB-INF/classes/$(dirname "$relative_path")"
mkdir -p "$target_dir"
cp "$resource_file" "WebContent/WEB-INF/classes/$relative_path"
echo "Copied: $resource_file -> WebContent/WEB-INF/classes/$relative_path"
done
RESOURCE_COUNT=$(find WebContent/WEB-INF/classes -type f ! -name "*.class" | wc -l)
echo "Copied $RESOURCE_COUNT resource files (XML, properties, etc.)"
fi
else
echo "No src directory found - skipping Java compilation and resource copying"
fi
# 컴파일된 클래스 파일 권한 설정 및 최종 확인
if [ -d "WebContent/WEB-INF/classes" ]; then
chmod -R 644 WebContent/WEB-INF/classes
find WebContent/WEB-INF/classes -type d -exec chmod 755 {} \;
FINAL_CLASS_COUNT=$(find WebContent/WEB-INF/classes -name "*.class" | wc -l)
FINAL_RESOURCE_COUNT=$(find WebContent/WEB-INF/classes -type f ! -name "*.class" | wc -l)
if [ $FINAL_CLASS_COUNT -gt 0 ] || [ $FINAL_RESOURCE_COUNT -gt 0 ]; then
echo "✓ Build completed successfully!"
echo "✓ Total compiled class files: $FINAL_CLASS_COUNT"
echo "✓ Total resource files (XML, properties, etc.): $FINAL_RESOURCE_COUNT"
echo "✓ Set appropriate permissions for all files"
# 클래스 파일 크기 확인
CLASSES_SIZE=$(du -sh WebContent/WEB-INF/classes 2>/dev/null | cut -f1)
echo "✓ Classes directory size: $CLASSES_SIZE"
# 주요 리소스 파일 타입 확인
if [ $FINAL_RESOURCE_COUNT -gt 0 ]; then
echo "✓ Resource file types found:"
find WebContent/WEB-INF/classes -type f ! -name "*.class" | sed 's/.*\.//' | sort | uniq -c | head -5
fi
else
echo "⚠ WARNING: No compiled class files or resource files found in WebContent/WEB-INF/classes"
echo "⚠ The application may not function properly without compiled Java classes and resources"
fi
else
echo "⚠ WARNING: WebContent/WEB-INF/classes directory not found"
fi
# 컨테이너 상태 확인
echo "Checking container status..."
docker-compose -f docker-compose.prod.yml up --build --force-recreate -d