jar包打包成exe安裝包的實(shí)現(xiàn)
1.介紹
jar包啟動(dòng)我們通常是部署在服務(wù)器上,用戶(hù)通過(guò)訪問(wèn)服務(wù)器來(lái)使用系統(tǒng),但是如果用戶(hù)想弄成電腦本端單機(jī)版,這時(shí)候部署的問(wèn)題就比較麻煩了,不可能每個(gè)用戶(hù)都部署一遍,那么這時(shí)候需要弄成exe安裝形式,或者腳本安裝形式,一鍵安裝部署!
現(xiàn)在我就介紹如何將jar包打包成exe安裝包
介紹:比如一個(gè)普通的springboot前后端分離項(xiàng)目,含有組件:redis,Nginx , 數(shù)據(jù)庫(kù): Mysql
思路:將用到的redis,Nginx,Mysql弄成windows服務(wù),并開(kāi)機(jī)自啟,用戶(hù)只需雙擊程序啟動(dòng)就能使用,無(wú)需等待
2.打包配置
用到的工具:
1.Inno Setup:Inno Setup是一個(gè)免費(fèi)的安裝制作軟件,小巧、簡(jiǎn)便、精美是其最大特點(diǎn),官方網(wǎng)站同時(shí)也提供源程序免費(fèi)下載。它雖不能與Installshield這類(lèi)恐龍級(jí)的安裝制作軟件相比,但也當(dāng)之無(wú)愧算是后起之秀。(主要用來(lái)打包成exe文件格式)
2.Bat_To_Exe_Converter:可以將.bat格式的命令文件轉(zhuǎn)換為exe文件
3.mysql數(shù)據(jù)庫(kù)免安裝版:解壓后為文件夾形式,通過(guò)腳本設(shè)置mysql配置
4.jdk環(huán)境免安裝版:解壓后為文件夾形式
5.項(xiàng)目打包生成的jar包
6.redis壓縮包
7.nginx壓縮包
先在本地創(chuàng)建一個(gè)文件夾,將解壓好的mysql數(shù)據(jù)庫(kù)復(fù)制到該文件夾中
mysql配置
1、mysql_init.bat
在mysql/bin目錄中新建mysql_init.bat
@echo off rem將工作路徑切換到當(dāng)前腳本所在目錄 cd /d %~dp0 rem開(kāi)始安裝mysql echo ----1.start installing Mysql ---->>../log.txt "%cd%\mysqld.exe" --initialize-insecure --user=mysql --console cd .. set "mysqlpath=%cd%">>../log.txt cd bin ::創(chuàng)建服務(wù),名為mysql-job mysqld install mysql-job --defaults-file="%mysqlpath%\my.ini" rem設(shè)置mysql開(kāi)機(jī)自啟 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設(shè)置mysql環(huán)境變量,并進(jìn)行創(chuàng)建數(shù)據(jù)庫(kù)初始化 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文件,用于初始化項(xiàng)目數(shù)據(jù)庫(kù)
在mysql目錄中新建目錄sql,將create.sql文件放置其中
注:在create.sql頭部需要補(bǔ)充創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)句,如
一定要先刪除存在的庫(kù),沒(méi)有才創(chuàng)建 DROP DATABASE IF EXISTS `XXXXX`; CREATE DATABASE XXXXX; USE XXXXX;
3.項(xiàng)目配置
在新建的文件夾中(上面mysql所在的目錄),新建一個(gè)project文件夾,將解壓好的jdk以及項(xiàng)目jar包復(fù)制到project目錄中
1、start.bat
在project目錄中新建start.bat
@echo off #判斷程序是否運(yùn)行 tasklist | find /i "aaa.exe" #判斷 if "%errorlevel%"=="1" (goto f) else (goto e) :f #沒(méi)運(yùn)行就啟動(dòng),其中aaa.exe 為javaw.exe改名,目的后臺(tái)啟動(dòng)jar包 start .\jdk1.8.0_121\bin\aaa.exe -jar aaa.jar :e #運(yùn)行了就執(zhí)行端口判斷,判斷是否啟動(dòng)完畢 netstat -ano |findstr "8084" @echo off netstat -ano |findstr "8084" if "%errorlevel%"=="1" (goto f) else (goto e) :f echo 系統(tǒng)安裝初始化中,請(qǐng)等待兩分鐘后嘗試,按回車(chē)退出! pause exit :e start Chrome\Application\chrome.exe --app=http:\\localhost:8085 ::這里用谷歌瀏覽器打開(kāi)這個(gè)網(wǎng)址并且用 --app目的是為了隱藏工具欄和地址欄,達(dá)到高度類(lèi)似單機(jī)版的概念
*******注:aaaa.jar名稱(chēng)修改為你項(xiàng)目的jar包
2、將start.bat轉(zhuǎn)換為start.exe
將下載的Bat_To_Exe_Converter工具解壓,運(yùn)行Bat_To_Exe_Converter_(x64).exe程序,在工具界面中直接打開(kāi)start.bat,點(diǎn)擊轉(zhuǎn)換即可,將轉(zhuǎn)換之后的start.exe也存放于project目錄
*******************注意:因?yàn)閣indows命令會(huì)出現(xiàn)中文編碼問(wèn)題,這里生成的快捷方式需要設(shè)置成gbk形式

下載winsw,下文有提及到,配置nginx也需要用到
將下載的exe文件改名為aaaservice.exe,并創(chuàng)建一個(gè)文件名為:aaaservice.xml, 其中aaa為你定義的項(xiàng)目名
aaaservice.xml文件的內(nèi)容為
<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的這個(gè)文件是 javaw.exe復(fù)制一份并重名為 aaa.exe,目的是后臺(tái)啟動(dòng)jar包后進(jìn)程名稱(chēng)為aaa,用于分辨啟動(dòng)的jar包項(xiàng)目,這里的name標(biāo)簽是創(chuàng)建windows服務(wù)的服務(wù)名稱(chēng)
創(chuàng)建regiester-service.bat
@echo off rem將工作路徑切換到當(dāng)前腳本所在目錄 cd /d %~dp0 rem設(shè)置aaa開(kāi)機(jī)自啟 echo ----2. start aaa service---- >> log.txt rem pause aaaservice.exe install net stop aaa net start aaa exit
創(chuàng)建uninstall-service.bat
@echo off ::殺掉進(jìn)程為aaa.exe taskkill -f -t -im aaa.exe @echo off rem將工作路徑切換到當(dāng)前腳本所在目錄 cd /d %~dp0 ::停掉aaa的windows服務(wù),并刪除 net stop aaa sc delete aaa exit
至此jar包和mysql服務(wù)目前搞完了,現(xiàn)在搞用到的組件redis和nginx
3.redis
解壓redis壓縮包后,進(jìn)去根目錄
修改redis配置文件,如項(xiàng)目中用到的redis端口和redis賬號(hào)密碼等。
在根目錄新建start.bat
@echo off rem將工作路徑切換到當(dāng)前腳本所在目錄 cd /d %~dp0 rem開(kāi)始創(chuàng)建redis服務(wù) redis-server --service-install redis.windows-service.conf --loglevel verbose rem pause rem設(shè)置redis開(kāi)機(jī)自啟 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將工作路徑切換到當(dāng)前腳本所在目錄 cd /d %~dp0 net stop redis sc delete redis
4.nginx
解壓nginx壓縮包后,進(jìn)去根目錄
修改nginx配置反向代理的文件
監(jiān)聽(tīng)端口,跳轉(zhuǎn)到頁(yè)面
如圖

我的頁(yè)面在nginx文件夾同級(jí)

配置文件在這一級(jí)
則調(diào)轉(zhuǎn)頁(yè)面需要這樣配置

不要使用絕對(duì)路徑配置,具體層級(jí)自行根據(jù)位置調(diào)整
然后注冊(cè)nginx服務(wù)并自啟
用到工具:winsw
https://github.com/winsw/winsw/releases/tag/v3.0.0-alpha.10

下載x64完整版,第一個(gè)需要聯(lián)網(wǎng)使用,但我試過(guò)了報(bào)錯(cuò)不行,所以最好下載完整版,避免不必要的錯(cuò)誤!
下載完后將這個(gè)文件復(fù)制到nginx根目錄,并改名為nginxservice

在nginx根目錄創(chuàng)建一個(gè)文件名為: nginxservice.xml ,并且內(nèi)容為如下
<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>
其中l(wèi)ogpath為存放日志位置
具體的配置可參考github
1.新建nginx-service.bat
@echo off rem將工作路徑切換到當(dāng)前腳本所在目錄 cd /d %~dp0 rem設(shè)置nginx開(kāi)機(jī)自啟 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將工作路徑切換到當(dāng)前腳本所在目錄 cd /d %~dp0 rem開(kāi)始創(chuàng)建redis服務(wù) nginx.exe rem pause exit
3.新建stop.bat
@echo off rem將工作路徑切換到當(dāng)前腳本所在目錄 cd /d %~dp0 net stop nginx start nginx.exe -s stop sc delete nginx
至此nginx配置完成
4.項(xiàng)目打包
先安裝好Inno steup程序,在新建的文件夾中(上面mysql所在的目錄),新建一個(gè)inno.iss文件

打開(kāi)inno.iss文件,改配置內(nèi)容
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
[Setup]
; 腳本由 Inno Setup 腳本向?qū)?生成!
; 有關(guān)創(chuàng)建 Inno Setup 腳本文件的詳細(xì)資料請(qǐng)查閱幫助文檔!
;app名稱(chēng)
#define MyAppName "aaaa"
;app版本號(hào)
#define MyAppVersion "1.0"
;app作者
#define MyAppPublisher "rz"
;app訪問(wèn)路徑
#define MyAppURL "http://localhost:8085"
;app工具名
#define MyAppExeName "aaaa.exe"
[Setup]
; 注: AppId的值為單獨(dú)標(biāo)識(shí)該應(yīng)用程序。
; 不要為其他安裝程序使用相同的AppId值。
; (生成新的GUID,點(diǎn)擊 工具|在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
; 注意: 不要在任何共享系統(tǒng)文件上使用“Flags: ignoreversion”
[Icons]
Name: "{commondesktop}\管理系統(tǒng)";Filename: "{app}\project\start.exe"; WorkingDir: "{app}\project"
[INI]
;修改數(shù)據(jù)庫(kù)配置文件
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"
;安裝時(shí)候執(zhí)行的命令
[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";
;卸載時(shí)執(zhí)行的命令
[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}"注意:配置文件中的地址需要根據(jù)自己本地的實(shí)際環(huán)境進(jìn)行修改
例如:
OutputDir=C:\Users\HP\Desktop (該路徑為生成exe程序的目錄)
Source: “C:\Users\HP\Desktop\新建文件夾\mysql-5.7.31-winx64*” (該路徑為本地新建的文件夾的地址)
將配置調(diào)整好之后,直接點(diǎn)擊運(yùn)行圖標(biāo)進(jìn)行程序打包

打包完成會(huì)自動(dòng)在OutputDir目錄下生成一個(gè)exe程序,并提示安裝。該程序安裝過(guò)程中,會(huì)自動(dòng)安裝mysql數(shù)據(jù)庫(kù),執(zhí)行初始化sql導(dǎo)入,安裝完成后,電腦桌面會(huì)生成程序的快捷方式,運(yùn)行會(huì)執(zhí)行project中創(chuàng)建的start.exe程序,也就是將jar包運(yùn)行起來(lái),啟動(dòng)項(xiàng)目。
到此這篇關(guān)于jar包打包成exe安裝包的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)jar包打包成exe安裝包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
教你用Java驗(yàn)證服務(wù)器登錄系統(tǒng)
這篇文章主要介紹了教你用Java驗(yàn)證服務(wù)器登錄系統(tǒng),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04
java實(shí)現(xiàn)滑動(dòng)驗(yàn)證解鎖
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)滑動(dòng)驗(yàn)證解鎖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
簡(jiǎn)單談?wù)凧ava遍歷樹(shù)深度優(yōu)先和廣度優(yōu)先的操作方式
這篇文章主要介紹了簡(jiǎn)單談?wù)凧ava遍歷樹(shù)深度優(yōu)先和廣度優(yōu)先的操作方式的相關(guān)資料,需要的朋友可以參考下2023-03-03
Spring MVC集成springfox-swagger2構(gòu)建restful API的方法詳解
這篇文章主要給大家介紹了關(guān)于Spring MVC集成springfox-swagger2構(gòu)建restful API的相關(guān)資料,文中介紹介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-06-06
Java中Stream流對(duì)多個(gè)字段進(jìn)行排序的方法
我們?cè)谔幚頂?shù)據(jù)的時(shí)候經(jīng)常會(huì)需要進(jìn)行排序后再返回給前端調(diào)用,比如按照時(shí)間升序排序,前端展示數(shù)據(jù)就是按時(shí)間先后進(jìn)行排序,下面這篇文章主要給大家介紹了關(guān)于Java中Stream流對(duì)多個(gè)字段進(jìn)行排序的相關(guān)資料,需要的朋友可以參考下2023-10-10
SpringMVC攔截器創(chuàng)建配置及執(zhí)行順序
這篇文章主要為大家介紹了SpringMVC攔截器創(chuàng)建配置及執(zhí)行順序,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05

