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插件作用:
- 当运行“mvn package/ mvn clean package”进行打包时,把需要的各种依赖包都打到jar包中,使用“Java -jar”命令就可以直接运行。
- 一般的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 TABLEuser
(
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一起打包,成为可在任意电脑上使用的单机应用。