#!/usr/bin/env bash # ============================================================================== # CyberCore Signer — Script de Empacotamento Nativo com jpackage # Gera runtime autocontido e instalador sem exigir Java instalado pelo usuário. # ============================================================================== set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" echo "==> [1/3] Compilando projeto e gerando Fat JAR via Maven..." cd "${PROJECT_ROOT}" if [ -n "${JAVA_HOME:-}" ]; then MVN_CMD="${PROJECT_ROOT}/mvnw" else export JAVA_HOME="${JAVA_HOME:-${HOME}/.jdks/jdk-25.0.4.1+1}" export PATH="${JAVA_HOME}/bin:${PATH}" MVN_CMD="${PROJECT_ROOT}/mvnw" fi ${MVN_CMD} clean package -DskipTests if [ -f "${PROJECT_ROOT}/modules/cybercore-app/target/cybercore-app-0.1.0-SNAPSHOT-shaded.jar" ]; then cp "${PROJECT_ROOT}/modules/cybercore-app/target/cybercore-app-0.1.0-SNAPSHOT-shaded.jar" "${PROJECT_ROOT}/modules/cybercore-app/target/cybercore-signer.jar" fi FAT_JAR="${PROJECT_ROOT}/modules/cybercore-app/target/cybercore-signer.jar" if [ ! -f "${FAT_JAR}" ]; then echo "ERRO: JAR final não encontrado em ${FAT_JAR}" exit 1 fi DIST_DIR="${PROJECT_ROOT}/dist" mkdir -p "${DIST_DIR}" APP_VERSION="0.1.0" APP_NAME="CyberCore-Signer" echo "==> [2/3] Verificando ferramenta jpackage..." JPACKAGE="${JAVA_HOME}/bin/jpackage" if [ ! -x "${JPACKAGE}" ]; then echo "ERRO: jpackage não encontrado em ${JPACKAGE}" exit 1 fi echo "==> [3/3] Executando jpackage para criar imagem de aplicação nativa com runtime próprio..." # No ambiente Linux em CI ou desenvolvimento, gera app-image nativa. # Em runners Windows, substitua o tipo por 'msi' ou 'exe'. TARGET_TYPE="app-image" if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then TARGET_TYPE="msi" fi "${JPACKAGE}" \ --name "${APP_NAME}" \ --app-version "${APP_VERSION}" \ --input "${PROJECT_ROOT}/modules/cybercore-app/target" \ --main-jar "cybercore-signer.jar" \ --main-class "br.com.cybercore.signer.app.CyberCoreSignerApplication" \ --type "${TARGET_TYPE}" \ --dest "${DIST_DIR}" \ --java-options "-Xms64m -Xmx256m --enable-native-access=ALL-UNNAMED" \ --add-modules java.base,java.desktop,java.net.http,java.smartcardio,jdk.crypto.cryptoki,jdk.unsupported \ --vendor "CyberCore" \ --description "Agente desktop de assinatura digital (A1/A3) ICP-Brasil" echo "==> Empacotamento concluído com sucesso em: ${DIST_DIR}/${APP_NAME}"