Files
cybercore-signer/build-jar.sh

137 lines
5.0 KiB
Bash
Executable File

#!/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 25+)
if ! command -v java &>/dev/null; then
POSSIBLE_JDKS=(
"${HOME}/.jdks/jdk-25.0.4.1+1"
"/home/claudecio/.jdks/jdk-25.0.4.1+1"
"/usr/lib/jvm/java-25-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 e para a pasta sdk/ para manter o ambiente sincronizado
cp -f "${SOURCE_JAR}" "${DEST_JAR}"
if [[ -d "sdk" ]]; then
SDK_JAR="sdk/cybercore-signer.jar"
cp -f "${SOURCE_JAR}" "${SDK_JAR}"
echo -e "Cópia sincronizada para o SDK: ${COLOR_BOLD}${SDK_JAR}${COLOR_RESET}"
fi
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