jar包打包成exe安装包的实现
作者:小波波啊
1.介绍
jar包启动我们通常是部署在服务器上,用户通过访问服务器来使用系统,但是如果用户想弄成电脑本端单机版,这时候部署的问题就比较麻烦了,不可能每个用户都部署一遍,那么这时候需要弄成exe安装形式,或者脚本安装形式,一键安装部署!
现在我就介绍如何将jar包打包成exe安装包
介绍:比如一个普通的springboot前后端分离项目,含有组件:redis,Nginx , 数据库: Mysql
思路:将用到的redis,Nginx,Mysql弄成windows服务,并开机自启,用户只需双击程序启动就能使用,无需等待
2.打包配置
用到的工具:
1.Inno Setup:Inno Setup是一个免费的安装制作软件,小巧、简便、精美是其最大特点,官方网站同时也提供源程序免费下载。它虽不能与Installshield这类恐龙级的安装制作软件相比,但也当之无愧算是后起之秀。(主要用来打包成exe文件格式)
2.Bat_To_Exe_Converter:可以将.bat格式的命令文件转换为exe文件
3.mysql数据库免安装版:解压后为文件夹形式,通过脚本设置mysql配置
4.jdk环境免安装版:解压后为文件夹形式
5.项目打包生成的jar包
6.redis压缩包
7.nginx压缩包
先在本地创建一个文件夹,将解压好的mysql数据库复制到该文件夹中
mysql配置
1、mysql_init.bat
在mysql/bin目录中新建mysql_init.bat
@echo off rem将工作路径切换到当前脚本所在目录 cd /d %~dp0 rem开始安装mysql echo ----1.start installing Mysql ---->>../log.txt "%cd%\mysqld.exe" --initialize-insecure --user=mysql --console cd .. set "mysqlpath=%cd%">>../log.txt cd bin ::创建服务,名为mysql-job mysqld install mysql-job --defaults-file="%mysqlpath%\my.ini" rem设置mysql开机自启 echo ----2. start Mysql service---- >>../log.txt rem pause net start mysql-job sc config mysql-job start= auto net stop mysql-job net start mysql-job rem设置mysql环境变量,并进行创建数据库初始化 echo ----3.setting Mysql environment ---->>../log.txt cd .. "%cd%\bin\mysqladmin" -u root password root "%cd%\bin\mysql.exe" -uroot -proot < "%cd%\sql\create.sql" echo %Path% echo %Path%|find /i "%mysqlpath%" && set IsNull=true || set IsNull=false echo %IsNull% if not %IsNull%==true ( wmic ENVIRONMENT create name="MYSQL_HOME",username="<system>",VariableValue="%mysqlpath%" rem 追加path变量 wmic ENVIRONMENT where "name='PATH' and username='<system>'" set VariableValue="%path%;%%MYSQL_HOME%%\bin;" echo ----4. Mysql environment create/append success---->>/log.txt ) exit
2、mysql_stop.bat
在mysql/bin目录中新建mysql_stop.bat
@echo off cd /d %~dp0 echo ----1.[Mysql] start uninstalling Mysql ---->>../log.txt sc stop mysql-job sc delete mysql-job echo ----2. [Mysql] uninstall finished---- >>../log.txt exit
3、my.ini
在mysql目录中新建my.ini
[mysqld] basedir ="C:\mysql-5.7.31-winx64" datadir ="C:\mysql-5.7.31-winx64\data" port=3308 server_id =10 character-set-server=gbk character_set_filesystem=gbk max_allowed_packet=41942040 [client] port=3308 default-character-set=gbk [mysqld_safe] timezone="CST" [mysql] default-character-set=utf8
4、新建create.sql文件,用于初始化项目数据库
在mysql目录中新建目录sql,将create.sql文件放置其中
注:在create.sql头部需要补充创建数据库的语句,如
一定要先删除存在的库,没有才创建 DROP DATABASE IF EXISTS `XXXXX`; CREATE DATABASE XXXXX; USE XXXXX;
3.项目配置
在新建的文件夹中(上面mysql所在的目录),新建一个project文件夹,将解压好的jdk以及项目jar包复制到project目录中
1、start.bat
在project目录中新建start.bat
@echo off #判断程序是否运行 tasklist | find /i "aaa.exe" #判断 if "%errorlevel%"=="1" (goto f) else (goto e) :f #没运行就启动,其中aaa.exe 为javaw.exe改名,目的后台启动jar包 start .\jdk1.8.0_121\bin\aaa.exe -jar aaa.jar :e #运行了就执行端口判断,判断是否启动完毕 netstat -ano |findstr "8084" @echo off netstat -ano |findstr "8084" if "%errorlevel%"=="1" (goto f) else (goto e) :f echo 系统安装初始化中,请等待两分钟后尝试,按回车退出! pause exit :e start Chrome\Application\chrome.exe --app=http:\\localhost:8085 ::这里用谷歌浏览器打开这个网址并且用 --app目的是为了隐藏工具栏和地址栏,达到高度类似单机版的概念
*******注:aaaa.jar名称修改为你项目的jar包
2、将start.bat转换为start.exe
将下载的Bat_To_Exe_Converter工具解压,运行Bat_To_Exe_Converter_(x64).exe程序,在工具界面中直接打开start.bat,点击转换即可,将转换之后的start.exe也存放于project目录
*******************注意:因为windows命令会出现中文编码问题,这里生成的快捷方式需要设置成gbk形式
下载winsw,下文有提及到,配置nginx也需要用到
将下载的exe文件改名为aaaservice.exe,并创建一个文件名为:aaaservice.xml, 其中aaa为你定义的项目名
aaaservice.xml文件的内容为
<service> <id>aaa</id> <name>aaa</name> <description>This service is a service created from a minimal configuration</description> <executable>.\jdk1.8.0_121\bin\aaa</executable> <arguments>-jar aaa.jar</arguments> <logpath>.\windows-service-logs</logpath> <log mode="roll"></log> <onfailure action="restart" /> </service>
注意 :.\jdk1.8.0_121\bin\aaa的这个文件是 javaw.exe复制一份并重名为 aaa.exe,目的是后台启动jar包后进程名称为aaa,用于分辨启动的jar包项目,这里的name标签是创建windows服务的服务名称
创建regiester-service.bat
@echo off rem将工作路径切换到当前脚本所在目录 cd /d %~dp0 rem设置aaa开机自启 echo ----2. start aaa service---- >> log.txt rem pause aaaservice.exe install net stop aaa net start aaa exit
创建uninstall-service.bat
@echo off ::杀掉进程为aaa.exe taskkill -f -t -im aaa.exe @echo off rem将工作路径切换到当前脚本所在目录 cd /d %~dp0 ::停掉aaa的windows服务,并删除 net stop aaa sc delete aaa exit
至此jar包和mysql服务目前搞完了,现在搞用到的组件redis和nginx
3.redis
解压redis压缩包后,进去根目录
修改redis配置文件,如项目中用到的redis端口和redis账号密码等。
在根目录新建start.bat
@echo off rem将工作路径切换到当前脚本所在目录 cd /d %~dp0 rem开始创建redis服务 redis-server --service-install redis.windows-service.conf --loglevel verbose rem pause rem设置redis开机自启 echo ----2. start redis service---- >>../log.txt rem pause net start redis sc config redis start= auto net stop redis net start redis exit
在根目录新建stop.bat
@echo off rem将工作路径切换到当前脚本所在目录 cd /d %~dp0 net stop redis sc delete redis
4.nginx
解压nginx压缩包后,进去根目录
修改nginx配置反向代理的文件
监听端口,跳转到页面
如图
我的页面在nginx文件夹同级
配置文件在这一级
则调转页面需要这样配置
不要使用绝对路径配置,具体层级自行根据位置调整
然后注册nginx服务并自启
用到工具:winsw
https://github.com/winsw/winsw/releases/tag/v3.0.0-alpha.10
下载x64完整版,第一个需要联网使用,但我试过了报错不行,所以最好下载完整版,避免不必要的错误!
下载完后将这个文件复制到nginx根目录,并改名为nginxservice
在nginx根目录创建一个文件名为: nginxservice.xml ,并且内容为如下
<service> <id>nginx</id> <name>nginx</name> <description>This service is a service created from a minimal configuration</description> <executable>.\nginx.exe</executable> <stopexecutable>.\nginx.exe -s stop</stopexecutable> <logpath>.\service-logs</logpath> <log mode="roll"></log> </service>
其中logpath为存放日志位置
具体的配置可参考github
1.新建nginx-service.bat
@echo off rem将工作路径切换到当前脚本所在目录 cd /d %~dp0 rem设置nginx开机自启 echo ----2. start nginx service---- >> log.txt rem pause nginxservice.exe install net stop nginx net start nginx exit
2.新建start.bat
@echo off rem将工作路径切换到当前脚本所在目录 cd /d %~dp0 rem开始创建redis服务 nginx.exe rem pause exit
3.新建stop.bat
@echo off rem将工作路径切换到当前脚本所在目录 cd /d %~dp0 net stop nginx start nginx.exe -s stop sc delete nginx
至此nginx配置完成
4.项目打包
先安装好Inno steup程序,在新建的文件夹中(上面mysql所在的目录),新建一个inno.iss文件
打开inno.iss文件,改配置内容
; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] ; 脚本由 Inno Setup 脚本向导 生成! ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! ;app名称 #define MyAppName "aaaa" ;app版本号 #define MyAppVersion "1.0" ;app作者 #define MyAppPublisher "rz" ;app访问路径 #define MyAppURL "http://localhost:8085" ;app工具名 #define MyAppExeName "aaaa.exe" [Setup] ; 注: AppId的值为单独标识该应用程序。 ; 不要为其他安装程序使用相同的AppId值。 ; (生成新的GUID,点击 工具|在IDE中生成GUID。) AppId={{6CEE70A6-5DBD-43FF-9449-466A574C65E2} AppName={#MyAppName} AppVersion={#MyAppVersion} ;AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={pf}\{#MyAppName} DefaultGroupName={#MyAppName} ;生成的exe文件输出路径 OutputDir=C:\Users\HP\Desktop ;生成的exe文件名 OutputBaseFilename=violation 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: "C:\Users\HP\Desktop\新建文件夹\mysql-5.7.31-winx64\*"; DestDir: "{app}\mysql-5.7.31-winx64"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "C:\Users\HP\Desktop\新建文件夹\project\*"; DestDir: "{app}\project"; Flags: ignoreversion recursesubdirs createallsubdirs ; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion” [Icons] Name: "{commondesktop}\管理系统";Filename: "{app}\project\start.exe"; WorkingDir: "{app}\project" [INI] ;修改数据库配置文件 Filename:"{app}\mysql-5.7.31-winx64\my.ini";Section:"mysqld";Key:"basedir"; String:"{app}\mysql-5.7.31-winx64" Filename:"{app}\mysql-5.7.31-winx64\my.ini";Section:"mysqld";Key:"datadir"; String:"{app}\mysql-5.7.31-winx64\data" Filename:"{app}\mysql-5.7.31-winx64\my.ini";Section:"mysqld";Key:"port"; String:"3306" Filename:"{app}\mysql-5.7.31-winx64\my.ini";Section:"client";Key:"port"; String:"3306" ;安装时候执行的命令 [Run] Filename: "{app}\mysql-5.7.31-winx64\bin\mysql_init.bat"; Filename: "{app}\project\redis\start.bat"; Filename: "{app}\project\nginx-1.18.0\nginx-service.bat"; Filename: "{app}\project\regiester-service.bat"; ;卸载时执行的命令 [UninstallRun] Filename: "{app}\mysql-5.7.31-winx64\bin\mysql_stop.bat"; Filename: "{app}\project\redis\stop.bat"; Filename: "{app}\project\nginx-1.18.0\stop.bat"; Filename: "{app}\project\uninstall-service.bat"; [UninstallDelete] Type:filesandordirs;Name:"{app}"
注意:配置文件中的地址需要根据自己本地的实际环境进行修改
例如:
OutputDir=C:\Users\HP\Desktop (该路径为生成exe程序的目录)
Source: “C:\Users\HP\Desktop\新建文件夹\mysql-5.7.31-winx64*” (该路径为本地新建的文件夹的地址)
将配置调整好之后,直接点击运行图标进行程序打包
打包完成会自动在OutputDir目录下生成一个exe程序,并提示安装。该程序安装过程中,会自动安装mysql数据库,执行初始化sql导入,安装完成后,电脑桌面会生成程序的快捷方式,运行会执行project中创建的start.exe程序,也就是将jar包运行起来,启动项目。
到此这篇关于jar包打包成exe安装包的实现的文章就介绍到这了,更多相关jar包打包成exe安装包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!