Files
cybercore-signer/scripts/package-jpackage.sh

70 lines
2.5 KiB
Bash
Executable File

#!/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="/home/claudecio/.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}"