• inno Setup 打包Java exe可执行文件和MySQL数据库,无需额外配置实现一键傻瓜式安装


    前言

    出现有需要打包 Java 应用和 Mysql数据库成一个安装包给出去的需求,这里我把整个打包的流程整理一下。

    环境

    JDK17;

    MySQL 5.7;

    流程

    Jpackage打包EXE

    Jpackage是JDK14后加入的一个用于独立打包的工具,能够将应用打包成exe,有了Jpackage就不需要用exe4j这种打包工具,省去打包的繁琐流程。

    首先在idea里面打好Jar包,记下jar包的名字,比如是application.jar。打完后Jar包的目录一般是在target文件夹下,进到项目的目录,在上方的输入栏里输入打包命令,回车。

    image-20240513141900866

    打包命令:

    jpackage --type app-image --name application --input target --main-jar application.jar --win-console --dest dist
    

    打包完成后可以在dist文件夹里面看到对应的项目,双击exe就可以运行起项目。

    jpackage命令详情:

    • --type:指定要创建的安装程序的类型,如 exemsi(仅限 Windows)、pkg(仅限 macOS)、debrpm 等。
    • --input :指定要打包的输入文件或目录的路径。
    • --dest :指定生成安装程序的目标目录。
    • --name :指定应用程序的名称。
    • --app-version :指定应用程序的版本号。
    • --main-jar :指定应用程序的主 JAR 文件。
    • --main-class :指定应用程序的主类。
    • --icon :指定应用程序的图标文件。
    • --vendor :指定应用程序的供应商名称。
    • --runtime-image :指定自定义的运行时镜像目录--runtime-image
    • --java-options "-D...":指定自定义VM运行参数。

    MySQL打包准备

    下载MySQL

    进入MySQL官网,MySQL :: Download MySQL Community Server (Archived Versions),选择合适的打包,下载Zip版本。

    image-20240513142720488

    下载完成后解压,打开解压的文件夹,这里我采用将设置好账户和创建好相应表的数据库对应的data文件夹复制到刚刚解压的MySQL根目录下,这样子我只需要用命令行初始化MySQL,不需要去执行其他创建表和账户权限的语句,即可实现数据库的开箱即用。也可以是在初始化的bat文件里执行相关的sql语句,对应下面的myinit_admin.bat文件。

    配置MySQL

    在根目录下创建my.ini,输入以下内容:

    [client]
    port=3306
    [mysql]
    default-character-set=utf8
    [mysqld]
    port=3306
    character-set-server=utf8
    default-storage-engine=INNODB
    max_connections=100
    table_open_cache=256
    tmp_table_size=35M
    thread_cache_size=8
    myisam_max_sort_file_size=100G
    myisam_sort_buffer_size=69M
    key_buffer_size=50M
    read_buffer_size=64K
    read_rnd_buffer_size=256K
    sort_buffer_size=256K
    innodb_flush_log_at_trx_commit=1
    innodb_log_buffer_size=1M
    innodb_buffer_pool_size=96M
    innodb_log_file_size=20M
    innodb_thread_concurrency=18
    

    创建两个bat文件,并且在执行bat的时候获取系统的管理员权限,如果没有管理员权限会无法初始化。

    创建myinit_admin.bat文件,流程是先往my.ini里面写入mysql的路径和data文件对应的路径,获取管理员的权限进行MySQL初始化命令的执行。这个文件是在安装的时候执行。

    echo
    set CURRENT_DIR=%~dp0
    set CURRENT_DIR=%CURRENT_DIR:\=/%
    echo basedir="%CURRENT_DIR%">>%CURRENT_DIR%my.ini
    echo datadir="%CURRENT_DIR%data/">>%CURRENT_DIR%my.ini
    
    @echo off
     
    :: 开始获取管理员权限
    setlocal
    set uac=~uac_permission_tmp_%random%
    md "%SystemRoot%\system32\%uac%" 2>nul
    if %errorlevel%==0 ( rd "%SystemRoot%\system32\%uac%" >nul 2>nul ) else (
        echo set uac = CreateObject^("Shell.Application"^)>"%temp%\%uac%.vbs"
        echo uac.ShellExecute "%~s0","","","runas",1 >>"%temp%\%uac%.vbs"
        echo WScript.Quit >>"%temp%\%uac%.vbs"
        "%temp%\%uac%.vbs" /f
        del /f /q "%temp%\%uac%.vbs" & exit )
    endlocal
    
    echo
    
    cd /d %~dp0 
    
    cd bin
     
    "%cd%\mysqld.exe" --initialize-insecure --user=mysql --console
    echo -----mysql init succee-----
     
    mysqld install mysql 
    echo -----mysql service install succee-----
     
    net start mysql
    sc config mysql start=auto 
    net stop mysql
    net start mysql
    echo Installation complete 
     
    
    
    timeout /nobreak /t 10
    exit
    

    创建mystop_admin.bat文件,同样需要获取管理员权限。这个文件是在MySQL卸载的时候执行

    @echo off
     
    :: 开始获取管理员权限
    setlocal
    set uac=~uac_permission_tmp_%random%
    md "%SystemRoot%\system32\%uac%" 2>nul
    if %errorlevel%==0 ( rd "%SystemRoot%\system32\%uac%" >nul 2>nul ) else (
        echo set uac = CreateObject^("Shell.Application"^)>"%temp%\%uac%.vbs"
        echo uac.ShellExecute "%~s0","","","runas",1 >>"%temp%\%uac%.vbs"
        echo WScript.Quit >>"%temp%\%uac%.vbs"
        "%temp%\%uac%.vbs" /f
        del /f /q "%temp%\%uac%.vbs" & exit )
    endlocal
    
    
    @echo off
    cd /d %~dp0
    echo ----1.[Mysql] start uninstalling Mysql ---->>../log.txt
    sc stop mysql
    sc delete mysql
    echo ----2. [Mysql] uninstall finished---- >>../log.txt
    exit
    

    Inno Setup的安装和配置

    进入Inno Setup Downloads (jrsoftware.org),进行下载安装。

    创建一个文件夹,将MySQL和打包后的Java应用文件夹都放到一起,Java程序放在project文件夹下。

    image-20240513144542795

    创建Inno.iss文件,用inno Setup打开,在里面输入:

    ; Script generated by the Inno Setup Script Wizard.
    ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
     
    [Setup]
     
    ; 脚本由 Inno Setup 脚本向导 生成!
    ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!
     
    #define MyAppName "Application"
    #define MyAppVersion "1.0"
    #define MyAppPublisher "zh"
    #define MyAppExeName "application.exe"
     
    [Setup]
    ; 注: AppId的值为单独标识该应用程序。
    ; 不要为其他安装程序使用相同的AppId值。
    ; (生成新的GUID,点击 工具|在IDE中生成GUID。)
    AppId={{6CEE70A6-5DBD-43FF-9449-466A574C65E1}
    AppName={#MyAppName}
    AppVersion={#MyAppVersion}
    ;AppVerName={#MyAppName} {#MyAppVersion}
    AppPublisher={#MyAppPublisher}                                            
    DefaultDirName={pf}\{#MyAppName}
    DefaultGroupName={#MyAppName}
    ; 输入你要生成exe安装包的路径
    OutputDir=E:\xxxx
    ; 输入程序安装后的文件名
    OutputBaseFilename=Application
    Compression=lzma
    SolidCompression=yes
    ;AlwaysRestart=yes
    ;PrivilegesRequired=admin
    
    [Languages]
    Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
     
    [Tasks]
    Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1
     
    [Files]
    Source: "E:\xxx\mysql-5.7.41-winx64\*"; DestDir: "{app}\mysql-5.7.41-winx64"; Flags: ignoreversion recursesubdirs createallsubdirs
    Source: "E:\xxx\project\*"; DestDir: "{app}\project"; Flags: ignoreversion recursesubdirs createallsubdirs
    ; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”
     
    ; Java exe对应的目录
    [Icons]
    Name: "{commondesktop}\Application";Filename: "{app}\project\applicaiton.exe"; WorkingDir: "{app}\project"
     
    [INI]
    ;修改数据库配置文件(注意这个步骤,在上面的myinit_admin.bat已经获得了数据库和data的路径,但是不知道为什么我获取的路径会有点问题,在这个步骤也可以写入相应的路径。
    ;Filename:"{app}\mysql-5.7.41-winx64\my.ini";Section:"mysqld";Key:"basedir"; String:"{app}\mysql-5.7.41-winx64"
    ;Filename:"{app}\mysql-5.7.41-winx64\my.ini";Section:"mysqld";Key:"datadir"; String:"{app}\mysql-5.7.41-winx64\data"
     
     
    ; 安装的时候会执行
    [Run]
    Filename: "{app}\mysql-5.7.41-winx64\myinit_admin.bat";
     
    ; 卸载的时候会执行
    [UninstallRun]
    Filename: "{app}\mysql-5.7.41-winx64\mystop_admin.bat";
     
    [UninstallDelete]
     
    Type:filesandordirs;Name:"{app}"
    
    

    在软件左上方点击run

    image-20240513145623379

    执行完成生成了一个exe安装包,双击这个安装包选择相应路径进行安装。只要Java程序已经配置好了相应的数据库连接,则安装后软件即可进行使用。

  • 相关阅读:
    视频监控系统/视频汇聚平台EasyCVR平台页面展示优化
    以太网媒体接口MII/RMII/SMII/GMII/RGMII/SGMII
    洛谷千题详解 | P1017 [NOIP2000 提高组] 进制转换【C++、Java、Pascal、Python语言】
    聊一聊 .NET高级调试 内核模式堆泄露
    C++类型转换
    asp.net网站的建立及运行
    二十三、java版 SpringCloud分布式微服务云架构之 Java 多态
    vue3前端开发-flex布局篇
    使用ssh连接被拒
    记一次gateway微服务启动报错
  • 原文地址:https://www.cnblogs.com/Johnyzh/p/18189313