From eb715b8e1b34677e611886e24881177c3b4c31e4 Mon Sep 17 00:00:00 2001 From: chpark Date: Wed, 15 Oct 2025 16:02:42 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9E=90=EB=8F=99=20=EC=BB=B4=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EB=82=B4=EC=9A=A9=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- start-prod-full.sh | 245 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 245 insertions(+) diff --git a/start-prod-full.sh b/start-prod-full.sh index ffea255..2c5a946 100755 --- a/start-prod-full.sh +++ b/start-prod-full.sh @@ -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