131 lines
4.8 KiB
Bash
Executable File
131 lines
4.8 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 21+)
|
|
if ! command -v java &>/dev/null; then
|
|
POSSIBLE_JDKS=(
|
|
"${HOME}/.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
|