前言

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

环境

JDK17;

MySQL 5.7;

流程

Jpackage打包EXE

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

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

打包命令:

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 <path>:指定要打包的输入文件或目录的路径。
  • --dest <path>:指定生成安装程序的目标目录。
  • --name <name>:指定应用程序的名称。
  • --app-version <version>:指定应用程序的版本号。
  • --main-jar <jar>:指定应用程序的主 JAR 文件。
  • --main-class <class>:指定应用程序的主类。
  • --icon <icon>:指定应用程序的图标文件。
  • --vendor <vendor>:指定应用程序的供应商名称。
  • --runtime-image <path>:指定自定义的运行时镜像目录--runtime-image 。
  • --java-options "-D...":指定自定义VM运行参数。

MySQL打包准备

下载MySQL

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

下载完成后解压,打开解压的文件夹,这里我采用将设置好账户和创建好相应表的数据库对应的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文件夹下。

创建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

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

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

  1. CentOS系统 Amoeba+MySql主从读写分离配置 适合新手傻瓜式教程!-----仅供参考!

    废话不说,直接开始: 一.安装mysql的三种方式,这里采用第2种(安装方式不再详解,请参照) http://www.cnblogs.com/babywaa/articles/4837946.html ...

  2. inno setup 打包exe程序

    inno setup 用于打包生成安装程序, 是通过的一个脚本 可以将 exe 执行文件以安装的形式,解压,添加依赖,创建快捷方式. 例如,我们写了个winform,我们怎么通过安装的形式,给客户的机 ...

  3. Inno Setup 打包工具总结

    Inno Setup 打包工具总结 分类: Install Setup 2013-02-02 15:44 2386人阅读 评论(0) 收藏 举报 最近打包用到了Inno setup,在这个过程中容易犯 ...

  4. 使用Inno Setup 打包.NET程序,并自动安装.Net Framework

    使用Inno Setup 打包.NET程序,并自动安装.Net Framework http://www.cnblogs.com/xiaogangqq123/archive/2012/03/19/24 ...

  5. Inno Setup打包的程序提升为管理员权限

    Inno Setup打包的程序在Win7 64位系统上安装,安装步骤最后一步若选中运行程序,会跳出一个错误提示框. 这是因为64位win7系统运行程序时需要管理员权限,而打包的文件并没有这个权限就试图 ...

  6. Inno Setup打包添加和去除管理员权限

    原文:Inno Setup打包添加和去除管理员权限 添加管理员权限 1.在[Setup]节点添加 PrivilegesRequired=admin 2.进入安装目录,找到文件SetupLdr.e32, ...

  7. 将Python项目打包成EXE可执行文件(单文件,多文件,包含图片)

    解决 将Python项目打包成EXE可执行文件(单文件,多文件,包含图片) 1.当我们写了一个Python的项目时,特别是一个GUI项目,我们特备希望它能成为一个在Windows系统可执行的EXE文件 ...

  8. 【程序打包工具 Inno Setup】CreateProcess 失败:代码 740(Inno Setup打包的程序提升为管理员权限)

    原文参考 https://www.cnblogs.com/SnailProgramer/p/4243666.html http://blog.csdn.net/x356982611/article/d ...

  9. Inno Setup CreateProcess 失败:代码 740(Inno Setup打包的程序提升为管理员权限)

    原文参考 https://www.cnblogs.com/SnailProgramer/p/4243666.html http://blog.csdn.net/x356982611/article/d ...

  10. 打包成exe可执行文件的方法

    Python安装扩展库与打包成exe可执行文件的方法 1.安装扩展库的几种方法. 首先可能需要使用 pip install --upgrade pip 来升级本机的pip程序.然后在命令提示符环境(即 ...

随机推荐

  1. OpenHarmony创新赛丨报名倒计时,超强秘籍带你直通大奖!

      OpenHarmony创新赛报名倒计时开始啦! 设于开放原子全球开源大赛下的OpenHarmony创新赛,目前正在如火如荼地进行赛事招募中!这次大赛围绕创新应用.商显行业.金融行业三大赛题,邀请来 ...

  2. RabbitMQ 06 工作队列模式

    工作队列模式结构图: 这种模式非常适合多个工人等待任务到来的场景.任务有多个,一个一个丢进消息队列,工人也有很多个,就可以将这些任务分配个各个工人,让他们各自负责一些任务,并且做的快的工人还可以多完成 ...

  3. Redis 02 基础命令

    数据库 Redis 默认有 16 个数据库. 默认使用的是第 0 个数据库. 不同数据库存不同的值. 切换数据库 select 127.0.0.1:6379> select 1 OK 127.0 ...

  4. ASP.NET 部署常见问题及解决方案

    ASP.NET 部署部署过程中常见问题及解决方案 Could not load file or assembly 'XXXXX' or one of its dependencies. Access ...

  5. Android 开发入门(4)

    0x06 中级控件 (1)图形绘制 a. 图形 Drawable Drawable 类型包括图片.色块.画板.背景 drawable 目录一般保存描述性 XML 文件,具有具体分辨率的 drawabl ...

  6. mysql 必知必会整理—事务[十六]

    前言 简单整理一下事务. 正文 并非所有引擎都支持事务处理 正如第21章所述,MySQL支持几种基本的数据库引擎. 正如本章所述,并非所有引擎都支持明确的事务处理管理. MyISAM和InnoDB是两 ...

  7. .NET Emit 入门教程:第六部分:IL 指令:9:详解 ILGenerator 指令方法:运算操作指令(指令篇结束)

    前言: 经过前面几篇的学习,我们了解到指令的大概分类,如: 参数加载指令,该加载指令以 Ld 开头,将参数加载到栈中,以便于后续执行操作命令. 参数存储指令,其指令以 St 开头,将栈中的数据,存储到 ...

  8. FastWiki一分钟本地离线部署本地企业级人工智能客服

    FastWiki一分钟本地离线部署本地企业级人工智能客服 介绍 FastWiki是一个开源的企业级人工智能客服系统,它使用了一系列先进的技术和框架来支持其功能. 技术栈 前端框架:React + Lo ...

  9. 力扣8(java)-字符串转整数(atoi)(中等)

    题目: 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAtoi(string s) 的算法 ...

  10. 力扣479(java)-最大回文数乘积(困难)

    题目: 给定一个整数 n ,返回 可表示为两个 n 位整数乘积的 最大回文整数 .因为答案可能非常大,所以返回它对 1337 取余 . 示例 1: 输入:n = 2输出:987解释:99 x 91 = ...