springboot项目打包(exe+jdk/jre+mysql)跨平台一键安装

2023-11-18

SpringBoot项目打包(exe+jdk/jre+mysql)跨平台一键安装

1. Spring Boot将javaFX应用打包为jar包:

1.1 pom.xml安装Spring-boot-maven-plugin
<build>
      <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
            </plugin>
       </plugins>
 </build>

Spring-boot-maven-plugin插件作用:

  1. 当运行“mvn package/ mvn clean package”进行打包时,把需要的各种依赖包都打到jar包中,使用“Java -jar”命令就可以直接运行。
  2. 一般的maven项目的打包命令,不会把依赖的jar包也打包进去的,只是会放在jar包的同目录下,能够引用就可以了,但是spring-boot-maven-plugin插件,会将依赖的jar包全部打包进去。
1.2 运行命令mvn clean package

在idea右侧maven管理栏运行打包命令,在target目录下生成jar包:
mvn package:编译代码并打包
mvn clean package:删除目标文件夹、编译代码并打包

2. exe4j将jar包打包为exe应用

建议在打包前建立用于exe4j打包的文件夹:项目名_exe4j,将生成的jar包、jre文件夹和应用的icon图标都放在该目录下,然后打开exe4j开始打包。

2.1 先百度填写有效的exe4j版本号,否则生成的exe应用会提示exe4j未激活

在这里插入图片描述

2.2 选择生成exe应用的模式

在这里插入图片描述

2.3 设置一个应用名(并非exe文件名),并指定生成的exe文件的输出位置,我这里仍然输出到刚才新建的exe4j文件夹。

在这里插入图片描述

2.4 选择打开方式、exe文件名和32位或者64运行环境

在这里插入图片描述

2.5 这一步保持默认,点击next即可

在这里插入图片描述

2.6 vm参数可根据系统项目环境要求进行配置,导入项目打包的jar,在Archive处选择预先放在exe4j目录下的jar包

-Dfile.encoding=utf-8 -XX:PermSize=512M -XX:MaxPermSize=1024M
在这里插入图片描述

2.7 设置最大运行环境和最小运行环境

在这里插入图片描述

2.8 如果电脑上之前安装过Java,默认有以下search sequence,全部删掉

在这里插入图片描述

2.9 清除掉原有的search sequence后,点击+号,加入预先放在exe4j目录下的jre,注意这里的jre是相对路径!这个.\jre目录相对路径要求:最终通过setup安装后,jre文件夹与.exe文件在同一目录,也就是这里相对路径的“根”是最终通过setup在目标电脑上安装后的根目录,运行时exe会根据这里定义的相对路径找jre,很重要!!一定要保证你定义的路径在目标电脑上的路径下有jre(这一步设置好后不需要再设置名为EXE4J_JAVA_HOME的Enviroment variable,如果要设置,也一定保证这个路径在目标电脑上是存在的)

在这里插入图片描述

2.10 选择prefered VM,然后一直next

在这里插入图片描述

2.9 此时目录下已有目标exe文件,点击可启动应用

在这里插入图片描述

3. Inno Setup将(jre+mysql+exe)打包成安装包

3.1 创建用于InnoSetup的文件夹 :项目名_InnoSetup,将安装好的jdk文件夹、mysql文件夹(我依据项目重新命名为了mymarsql)、exe文件放到该目录下

在这里插入图片描述

3.2 mymarsql配置

(a) 在mymarsql的bin目录下添加mysql_init.bat,用于数据库的安装、初始化以及环境变量配置等(运行完之后会在mysql的目录下自动生成my.ini文件)。

cd /d %~dp0
cd …
del /F %cd%\my.ini
echo 删除完成
echo [mysql]>> my.ini
echo default-character-set=utf8>> my.ini
echo [mysqld]>> my.ini
echo port = 3307>> my.ini
echo basedir=%cd%>> my.ini
echo datadir=%cd%\data>> my.ini
echo max_connections=200>> my.ini
echo character-set-server=utf8>> my.ini
echo default-storage-engine=INNODB>> my.ini
echo wait_timeout=2147483>> my.ini
echo interactive_timeout=2147483>> my.ini
echo secure_file_priv=“”>> my.ini
echo character-set-server=gbk>>my.ini
echo character_set_filesystem=gbk>>my.ini
echo my.ini生成成功
set inipath=%cd%\my.ini
cd bin
“%cd%\mysqld.exe” -remove mysqlMarried
“%cd%\mysqld.exe” -install mysqlMarried --defaults-file=“%inipath%”
“%cd%\mysqld.exe” --initialize-insecure --console
net start mysqlMarried
sc config mysqlMarried start=auto
net stop mysqlMarried
net start mysqlMarried
echo 安装完毕
“%cd%\mysqladmin.exe” -u root password 654321 -P3307
echo 修改密码完毕
cd …
“%cd%\bin\mysql.exe” -uroot -p654321 -P3307< “%cd%\initsql\myInitSql.sql”
echo 数据库初始化完成
echo 配置环境变量
echo %Path%|find /i “%cd%” && set IsNull=false || set IsNull=true
echo %IsNull%
if %IsNull%==true (
wmic ENVIRONMENT where “name=‘PATH’ and username=‘’” set VariableValue=“%path%;%cd%\bin”
)
echo 完成
exit

注:上边的配置文件分为几步:
1)生成初始化文件my.ini,定义了端口、basedir、datadir、编码等信息;
2)安装名为mysqlMarried的服务,并配置为自启动;
3)修改数据库密码;
4)导入初始化sql文件,初始化数据库;
5)配置环境变量(如果path中不含当前目录,则在path后追加当前目录下的bin目录,若存在则不追加)

(b)在mysql的bin目录下添加mysql_stop.bat,用于退出mysql服务

cd /d %~dp0
@rem %1 mshta vbscript:CreateObject(“Shell.Application”).ShellExecute(“cmd.exe”,“/c %~s0 ::”,“”,“runas”,1)(window.close)&&exit
@echo off
echo ----1.[Mysql] start uninstalling Mysql ---->>…/log.txt
sc stop mysqlMarried
sc delete mysqlMarried
echo ----2.[Mysql] uninstall Mysql finished---->>…/log.txt
echo ----3.[Mysql] delete enviroment variable---->>…/log.txt
set pathStr=%path%
set mingw=%~dp0%
set nPath=hello
setlocal enableDelayedExpansion
:Loop
for /f “delims=; tokens=1,*” %%a in (“%pathStr%”) do (
if not “%%a”= =“%mingw%” (
if “!nPath!”= =“hello” (
set nPath=“%%a”
) else (
set nPath=%nPath%;“%%a”
)
)
set pathStr=%%b
goto Loop
)
set nPath=%nPath:"=%
setx Path “%nPath%” /m
echo ----4.[Mysql] delete enviroment variable finished---->>…/log.txt
exit

注:上边的配置文件分为几步:
1)打开当前目录,停止该服务、删除该服务;
2)找到path中该环境变量,删除。

(c)在mysql目录下的initsql目录下创建myinitSql.sql初始化建表语句

create database IF NOT EXISTS myDatabase character set utf8;
set global character_set_database=utf8;
set global character_set_server=utf8;
USE myDatabase ;
SET FOREIGN_KEY_CHECKS=0;


– Table structure for user


DROP TABLE IF EXISTS user; CREATE TABLE user (
id int(10) NOT NULL AUTO_INCREMENT,
username varchar(30) DEFAULT NULL,
password varchar(30) DEFAULT NULL,
account_type int(10) DEFAULT NULL,
create_date datetime DEFAULT NULL,
PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.3 下载并安装运行软件所需要的dll文件

windows_dllFiles.exe放在项目名_InnoSetup目录下,并创建脚本init-windows_dllFiles.bat,该脚本能够下载并安装运行软件所需要的dll文件(这些文件正常来说是没有的,除非你以前装过,否则会报错)
在这里插入图片描述
init-windows_dllFiles.bat

start wait %cd%windows_dllFiles.exe q norestart
exit
3.4 Inno Setup生成iss文件,然后点击运行图标

打开Inno Setup软件按照指示生成项目对应的iss文件,然后针对生成的iss文件做部分调整。

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "TheMarried"
#define MyAppVersion "1.0"
#define MyAppPublisher "SihuiJi"
#define MyAppURL "https://www.example.com/"
#define MyAppExeName "TheMarried.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{43FDC426-E430-4C1F-B9A5-89144375AD02}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=D:\TheMarried
ChangesAssociations=yes
DisableProgramGroupPage=yes
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
WizardStyle=modern

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "D:\projects\TheMarried_InnoSetup\mymarsql\*"; DestDir: "{app}\mymarsql"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\projects\TheMarried_InnoSetup\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\projects\TheMarried_InnoSetup\jre\*"; DestDir: "{app}\jre"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\projects\TheMarried_InnoSetup\windows_dllFiles.exe"; DestDir: "{app}"; Flags: ignoreversion

; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[INI]
Filename:"{app}\mymarsql\my.ini";Section:"mysqld";Key:"basedir"; String:"{app}\mymarsql"
Filename:"{app}\mymarsql\my.ini";Section:"mysqld";Key:"datadir"; String:"{app}\mymarsql\data"
Filename:"{app}\mymarsql\my.ini";Section:"mysqld";Key:"port"; String:"3307"
 
[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"

[Run]
;Filename: "{app}\hide_cmd.vbs";
;Filename: "{app}\windows_dllFiles.exe";
Filename: "{app}\mymarsql\bin\mysql_init.bat";
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

[UninstallRun]
Filename: "{app}\mymarsql\bin\mysql_stop.bat";
 
[UninstallDelete]
 
Type:filesandordirs;Name:"{app}"
3.4 在 项目名_InnoSetup目录下的Output目录下生成安装包setup.exe,点击即可打开安装向导。

在这里插入图片描述

3.5 安装后的目录展示(jre、mymarsql、exe均在同一目录下)

在这里插入图片描述
至此,已实现利用exe4j和Inno setup实现将含有javafx的jar包与jre、mysql一起打包,成为可在任意电脑上使用的单机应用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot项目打包(exe+jdk/jre+mysql)跨平台一键安装 的相关文章

  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 将不同类型的参数传递给 jdbctemplate 查询

    我正在尝试使用带有少量不同类型参数的 where 子句从数据库中检索记录 这是我编写的简单方法 我将breedId和性别作为参数传递 public List
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 瞎写

    有人说人生有两大禁忌 一忌踌躇满志 一忌心灰意冷 别人我不知道 但是对我来说 似乎一直都在这两种情绪之间跳转 说实话写这篇文章的此时我应该是处于心灰意冷这个点的 下面就随便说说当处于这个点时 自己产生的一些想法 首先 处于这个状态时整个人肯
  • 传统目标检测方法研究(一)

    1 传统算法目标检测 区域选择 gt 特征提取 gt 特征分类 1 1 区域选择 python 实现 图像滑动窗口 区域选取 首先选取图像中可能出现物体的位置 由于物体位置 大小都不固定 因此传统算法通常使用滑动窗口 Sliding Win
  • db2中各个类型互相转换处理

    给数字左侧自动占位补零 digits函数 digits 参数 digits里的参数必须是整型参数 可以是smallint int bigint decimal 其中smallint占5位 int占10位 bigint占19位 decimal
  • unity 坐标系

    https blog csdn net qq 34536551 article details 90269908
  • 什么是多态?对于多态的理解....

    什么是多态 我们都知道面向对象有四个基本特性 抽象 封装 继承 多态 概括可以理解为 抽象 封装 继承 是多态的基础 多态是抽象 封装 继承的表现 多态 是Java中非常重要的一部分 简单理解 不同类的 对象 对同一消息 做出了不同的响应就
  • 电脑重装系统(U盘)

    Windows10 1 首先需要准备一个8G或以上的U盘 空的 2 前往浏览器下载windows安装工具 网址如下 https www microsoft com zh cn software download windows10 3 下载
  • CentOS7 挂载磁盘出错mount: /dev/sdb is write-protected, mounting mount: unknown filesystem type '(null)'

    报错信息如下 root localhost mount dev sdb image mount dev sdb is write protected mounting read only mount unknown filesystem t
  • 掌握Python的X篇_19_函数的定义与调用

    文章目录 1 函数 2 函数的定义 3 函数调用 1 函数 在Python 函数是一种基本的编程接口 因为函数的调用只关心参数输入和返回值 所以使得我们可以更好地进行编程分工 以下程序的功能是得到输入的三个数字的平方值 根据前面所学的话 可
  • Blender编程入门

    在本教程中 我们将学习一些 Blender 脚本技术 比如如何使用代码处理 操作 复制和动画网格图元 要结合所有这些技术 我们将创建一个波浪形的锥形图案 一个看起来很酷的动画 你可以将其转换为循环 GIF 我将使用bpy data模块中的一
  • 一位程序员工作10年总结的13个忠告

    原文网址 http zhangxpower iteye com blog 1145448 展望未来 总结过去10年的程序员生涯 给程序员小弟弟小妹妹们的一些总结性忠告 走过的路 回忆起来是那么曲折 把自己的一些心得体会分享给程 序员兄弟姐妹
  • oracle数据库存储过程基本语法

    oracle数据库存储过程 一 基本语法 数据类型 一 字符类型 字符串数据类型还可以依据存储空间分为固定长度类型 CHAR 和可变长度类型 varchar2 nvarchar2 两种 1 char类型 定长字符串 会用空格填充来达到器最大
  • WSL 修改默认用户

    通常可以通过以下命令来指定进入 wsl 的时候使用的用户 wsl u
  • STM32驱动HX711称重模块

    使用模块如下图所示 使用单片机为STM32C8T6 引脚DT gt PB7 SCK gt PB6 使用通道A 下面是驱动程序 void GPIO Weigh Init void GPIO InitTypeDef GPIO InitStruc
  • 设计模式-单一职责原则介绍与理解

    描述 一个类应该专注于实现一个功能 好处 便于代码复用 举例 俄罗斯方块游戏 首先可以想到的是游戏逻辑与界面的分离 也就是说逻辑一个类 界面部分一个类 这样做的好处就是我们可以复用游戏逻辑的代码 例如我们用java写了一个基于PC端的俄罗斯
  • JAVA实现压缩解压文件

    1 源码运行前准备好文件夹 2 源码 package com els modules inquiry service impl import java io File import java io FileInputStream impor
  • P2PSim中重要函数的说明

    环境 RedHat9上安装的P2Psim0 3 目的 在P2Psim使用Vivaldi协议仿真 现状 主程序代码中关于vivaldi协议的部分注释掉了 思路 从主函数分析代码 找到原因 vivaldi协议主函数是vivalditest C
  • windows server 2012R2 部署安装 hmail

    windows server 2012R2 部署安装 hmail 环境说明 系统 windows server2012 R2软件版本 hMailServer 5 6 7 B2425 exe 邮件客户端 foxmail7 2版本 加密工具 h
  • Python21天打卡Day20-可变参数、关键字参数

    在 Python 中 可变参数允许函数接受任意数量的参数 这些参数被封装成一个元组 Tuple 或列表 List 并作为参数传递给函数 Python 中有两种类型的可变参数 args 用于传递可变数量的位置参数 Positional Arg
  • 【Docker系列】从头学起 Docker——docker run 命令详解

    文章目录 作用 语法格式 docker run 执行流程 options 说明 实际例子 例一 例二 例三 例四 例五 例六 例七 例八 总结 例九 作用 创建一个新的容器并运行一个命令 语法格式 docker run OPTIONS IM
  • springboot项目打包(exe+jdk/jre+mysql)跨平台一键安装

    SpringBoot项目打包 exe jdk jre mysql 跨平台一键安装 1 Spring Boot将javaFX应用打包为jar包 1 1 pom xml安装Spring boot maven plugin