70 lines
2.5 KiB
Bash
Executable File
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}"
|