#!/usr/bin/env bash # ============================================================================== # CyberCore Signer - Script de Automação de Build do Fat JAR Executável # ============================================================================== set -euo pipefail # Garante execução no diretório raiz do projeto SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "${SCRIPT_DIR}" COLOR_RESET="\033[0m" COLOR_BOLD="\033[1m" COLOR_CYAN="\033[36m" COLOR_GREEN="\033[32m" COLOR_YELLOW="\033[33m" COLOR_RED="\033[31m" RUN_AFTER_BUILD=false RUN_TESTS=false # Interpretação de argumentos for arg in "$@"; do case "${arg}" in --with-tests|-t) RUN_TESTS=true ;; --run|-r) RUN_AFTER_BUILD=true ;; --help|-h) echo -e "${COLOR_BOLD}Uso: ./build-jar.sh [opções]${COLOR_RESET}" echo "" echo "Opções disponíveis:" echo " --with-tests, -t Executa a suíte completa de testes unitários antes de empacotar." echo " --run, -r Inicia automaticamente o CyberCore Signer após a compilação." echo " --help, -h Exibe esta mensagem de ajuda." echo "" echo "Exemplo:" echo " ./build-jar.sh # Compilação e empacotamento rápido do JAR" echo " ./build-jar.sh --run # Compila e já abre a aplicação" exit 0 ;; *) echo -e "${COLOR_YELLOW}Aviso: Opção desconhecida: ${arg}. Use --help para detalhes.${COLOR_RESET}" ;; esac done echo -e "${COLOR_CYAN}${COLOR_BOLD}" echo "============================================================" echo " CYBERCORE SIGNER - AUTOMAÇÃO DE BUILD DO JAR" echo "============================================================" echo -e "${COLOR_RESET}" # 1. Verificação e Auto-Detecção do Java (JDK 21+) if ! command -v java &>/dev/null; then POSSIBLE_JDKS=( "/home/claudecio/.jdks/jdk-25.0.4.1+1" "/usr/lib/jvm/java-25-openjdk-amd64" "/usr/lib/jvm/java-21-openjdk-amd64" "/usr/lib/jvm/default-java" ) for candidate in "${POSSIBLE_JDKS[@]}"; do if [ -x "${candidate}/bin/java" ]; then export JAVA_HOME="${candidate}" export PATH="${JAVA_HOME}/bin:${PATH}" break fi done fi if ! command -v java &>/dev/null; then echo -e "${COLOR_RED}Erro: Java não foi encontrado no PATH nem nos diretórios padrão de JDK.${COLOR_RESET}" echo -e "${COLOR_YELLOW}Dica: Não é necessário executar com 'sudo'. Tente executar normalmente: ./build-jar.sh${COLOR_RESET}" exit 1 fi JAVA_VERSION=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | head -n 1) echo -e "Ambiente Java detectado: ${COLOR_BOLD}${JAVA_VERSION}${COLOR_RESET} (${JAVA_HOME:-$(which java)})" # 2. Verificação do Maven Wrapper if [[ ! -f "./mvnw" ]]; then echo -e "${COLOR_RED}Erro: Maven Wrapper (./mvnw) não encontrado na raiz do projeto.${COLOR_RESET}" exit 1 fi chmod +x ./mvnw # 3. Execução do Build MVN_ARGS=("clean" "package") if [[ "${RUN_TESTS}" == "false" ]]; then echo -e "${COLOR_YELLOW}Modo rápido ativado (pulando testes unitários). Para testar use: ./build-jar.sh --with-tests${COLOR_RESET}" MVN_ARGS+=("-DskipTests") else echo -e "${COLOR_CYAN}Executando testes unitários e de integração...${COLOR_RESET}" fi echo -e "Iniciando compilação e geração do Fat JAR via Maven..." ./mvnw "${MVN_ARGS[@]}" SOURCE_JAR="modules/cybercore-app/target/cybercore-signer.jar" DEST_JAR="./cybercore-signer.jar" if [[ ! -f "${SOURCE_JAR}" ]]; then echo -e "${COLOR_RED}Erro: O artefato ${SOURCE_JAR} não foi gerado pelo build.${COLOR_RESET}" exit 1 fi # 4. Copia para a raiz para facilitar o acesso cp -f "${SOURCE_JAR}" "${DEST_JAR}" JAR_SIZE=$(ls -lh "${DEST_JAR}" | awk '{print $5}') echo "" echo -e "${COLOR_GREEN}${COLOR_BOLD}============================================================${COLOR_RESET}" echo -e "${COLOR_GREEN}${COLOR_BOLD}✓ JAR GERADO COM SUCESSO!${COLOR_RESET}" echo -e "Arquivo: ${COLOR_BOLD}${DEST_JAR}${COLOR_RESET} (${JAR_SIZE})" echo -e "Local de origem: ${SOURCE_JAR}" echo -e "${COLOR_GREEN}${COLOR_BOLD}============================================================${COLOR_RESET}" echo "" echo -e "Para testar manualmente, execute:" echo -e " ${COLOR_CYAN}java -jar ${DEST_JAR}${COLOR_RESET} # Interface gráfica desktop" echo -e " ${COLOR_CYAN}java -jar ${DEST_JAR} --dev${COLOR_RESET} # Modo desenvolvimento (logs detalhados)" echo -e " ${COLOR_CYAN}java -jar ${DEST_JAR} --headless${COLOR_RESET} # Modo console de segundo plano (porta 21325)" echo "" # 5. Execução automática opcional if [[ "${RUN_AFTER_BUILD}" == "true" ]]; then echo -e "${COLOR_BOLD}Iniciando aplicação agora...${COLOR_RESET}" java -jar "${DEST_JAR}" fi